仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設(shè)計編號:【Q06】
1.? 簡介
? 本文提出了一種基于51單片機的LCD1602計算器設(shè)計。該設(shè)計是以AT89C51單片機為核心的計算器模擬系統(tǒng),輸入采用4×4矩陣鍵盤,可以進行加、減、乘、除數(shù)字運算,并在LCD1602上顯示操作過程。
2.? 主要功能
a.通過LCD1602顯示計算過程。
b.通過4×4矩陣鍵盤進行加、減、乘、除數(shù)字運算。
3.? 源程序(Keil5)
本設(shè)計采用keil5 C51軟件(內(nèi)附安裝包)實現(xiàn)程序設(shè)計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
void init_lcd(void) //初始化液晶,及畫面初始化
{
wela=0; //寫液晶
lcden=0; //使能1602
write_com(0x38); //8 位總線,雙行顯示,5X7 的點陣字符
LCD_Delay_us(100); //延時100us
write_com(0x0c); //開顯示,無光標,光標不閃爍
write_com(0x06); //光標右移動
write_com(0x01); //清屏
write_com(0x80); //DDRAM 地址歸0
}
//************************************************************************/
// 描述: 反轉(zhuǎn)法鍵盤掃描
//************************************************************************/
short keycheckdown() /* 反轉(zhuǎn)法鍵盤掃描 */
{
short temp1,temp2,temp,a=0xff;
P1=0xf0; /* 輸入行值(或列值) */
LCD_Delay_ms(20); /* 延時 */
temp1=P1; /* 讀列值(或行值) */
P1=0xff;
LCD_Delay_ms(20); /* 延時 */
P1=0x0f; /* 輸入列值(或行值) */
LCD_Delay_ms(20); /* 延時 */
temp2=P1; /* 讀行值(或列值) */
P1=0xff;
temp=(temp1&0xf0)|(temp2&0xf); /* 將兩次讀入數(shù)據(jù)組合 */
switch(temp) /* 通過讀入數(shù)據(jù)組合判斷按鍵位置 */
{
case 0x77 :a=0x0a;break;// 按鍵+
case 0x7b :a=0x0e; break;// 按鍵=
case 0x7d :a=0; break;// 按鍵0
case 0x7e :a=0x0f; break;// 按鍵CE
case 0xe7 :a=0x0d;break;// 按鍵/
case 0xbb :a=0x9;break; // 按鍵9
case 0xbd :a=0x8;break; // 按鍵8
case 0xbe :a=0x7;break; // 按鍵7
case 0xd7 :a=0x0c;break;// 按鍵*
case 0xdb :a=0x6;break; // 按鍵6
case 0xdd :a=0x5;break; // 按鍵5
case 0xde :a=0x4;break; // 按鍵4
case 0xb7 :a=0x0b; break;// 按鍵-
case 0xeb :a=3;break; // 按鍵3
case 0xed :a=2;break; // 按鍵2
case 0xee :a=1;break; // 按鍵1
default :a=0xff;
}
return a; /* 返回按鍵值 */
}
void display_a() //顯示數(shù)據(jù)a
{
dispaly[3]=data_a%10000/1000; //千
dispaly[2]=data_a%1000/100; //百
dispaly[1]=data_a%100/10; //十
dispaly[0]=data_a%10; //個
write_com(0x80+0); //顯示數(shù)據(jù)a
if(data_a>999){ write_date('0'+dispaly[3]);} //顯示千位
if(data_a>99){ write_date('0'+dispaly[2]);} //顯示百位
if(data_a>9){ write_date('0'+dispaly[1]);} //顯示十位
write_date('0'+dispaly[0]); //顯示個位
}
void display_b() //顯示數(shù)據(jù)b
{
write_com(0x80+7); //第一行
dispaly[3]=data_b%10000/1000; //千
dispaly[2]=data_b%1000/100; //百
dispaly[1]=data_b%100/10; //十
dispaly[0]=data_b%10; //個
if(data_b>999){ write_date('0'+dispaly[3]); } //顯示千位
if(data_b>99) { write_date('0'+dispaly[2]); } //顯示百位
if(data_b>9) { write_date('0'+dispaly[1]); } //顯示十位
write_date('0'+dispaly[0]); //顯示個位
}
//計算結(jié)果
void display_c(x)
{
if(data_c<100000000&&data_c>-1)//溢出時顯示錯誤
{
dispaly[8]=data_c%1000000000/100000000; //萬萬
dispaly[7]=data_c%100000000/10000000; //千萬
dispaly[6]=data_c%10000000/1000000; //百萬
dispaly[5]=data_c%1000000/100000; //十萬
dispaly[4]=data_c%100000/10000; //萬
dispaly[3]=data_c%10000/1000; //千
dispaly[2]=data_c%1000/100; //百
dispaly[1]=data_c%100/10; //十
dispaly[0]=data_c%10; //個
write_com(0x80+6+0x40); //第一行
if(x==4)
{
if(data_c>99999999) { write_date('0'+dispaly[8]);} //顯示萬萬
if(data_c>9999999) { write_date('0'+dispaly[7]);} //千萬
if(data_c>999999) { write_date('0'+dispaly[6]);} //百萬
if(data_c>99999) { write_date('0'+dispaly[5]);} //十萬
if(data_b!=0) {
write_date('0'+dispaly[4]); //萬
write_date('.');
write_date('0'+dispaly[3]); //千
write_date('0'+dispaly[2]); //百
write_date('0'+dispaly[1]); //十
write_date('0'+dispaly[0]); //個
}
}
else{
if(data_c>99999999) { write_date('0'+dispaly[8]);} //顯示萬萬
if(data_c>9999999) { write_date('0'+dispaly[7]);} //千萬
if(data_c>999999) { write_date('0'+dispaly[6]);} //百萬
if(data_c>99999) { write_date('0'+dispaly[5]);} //十萬
if(data_c>9999) { write_date('0'+dispaly[4]);} //萬
if(data_c>999) { write_date('0'+dispaly[3]);} //千
if(data_c>99) { write_date('0'+dispaly[2]);} //百
if(data_c>9) { write_date('0'+dispaly[1]);} //十
write_date('0'+dispaly[0]); //個
}
}
4.? 仿真proteus8.6
? 本設(shè)計采用proteus8.6軟件(內(nèi)附安裝包)實現(xiàn)仿真設(shè)計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
加:
減:
乘:
除:
5.? 設(shè)計報告
設(shè)計報告主要包括硬件電路、軟件設(shè)計、仿真調(diào)試等等,僅供參考。
6.? 資料清單
設(shè)計資料主要包括C程序+仿真+設(shè)計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網(wǎng)盤下載鏈接:【Q06】百度網(wǎng)盤下載鏈接
更多單片機仿真設(shè)計合集:單片機仿真設(shè)計合集