資源描述:
《51單片機(jī)計(jì)算器1602顯示程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、#include〃頭文件#include#defineuintunsignedint//#defineucharunsignedcharsbite=PlA6;//定義引腳sbitrs=P3A2;sbitrw=P3A0;sbitbusy=P0A7;chari,j,temp,num,num_l;longa,b,c,al,a2,bl,b2,c:l,c2;〃a,第一個(gè)數(shù)b,第二個(gè)數(shù)c,得數(shù)ucharflagl,fuhao;//flagl表示是否有符號(hào)鍵按下,fuhao表征按下的是哪個(gè)符號(hào)ucharcodetable[]={12304,5,6,0,7,&9,0,0
2、,0,0,0};ucharcodetablel[]={1,2,3,0x2f-0x30,4,5,6,0x2a-0x30,7,8,9,0x2d-0x30,0x01?0x30,0,0x3d?0x30,0x2b?0x30};voiddelayjsqfucharz)//延遲函數(shù){uchary;for(z;z>0;z-)for(y=0;y<110;y++);}voiddelay(uchara){uchari;while(a-){for(i=0;i<250;i++){_nop_();_nop_();_nop_();_nop_();〃判忙voidlcd_mang()rs=O;rw=l;e=l;_nop_();
3、_nop_();_nop_();_nop_();whilefPO&0x80);e=0;//1602的寫voidwrite_lcdl602(ucharcmd,uchari){lcd_mang();rs=i;rw=0;e=0;_nop_();_nop_();e=l;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();e=0;}//1602的初始化voidini_lcdl602()write」cdl602(0x38,0);delay(l);write_lcdl602(0x0c,0);delay(l);write」cd1602(0x06,0);
4、delay(l);write_lcdl602(0x01,0);delay(l);num_l=0;i=0;j=0;a=0;〃第一個(gè)參與運(yùn)算的數(shù)b=0;〃第二個(gè)參與運(yùn)算的數(shù)c=0;flagl=0;//flagl表示是否有符號(hào)鍵按下,fuhao=0;//fuhao表征按下的是哪個(gè)符號(hào)}//鍵盤掃描程序voidkeyscan_4_4(){uchari;P2=0xfe;if(P2!=0xfe){delayjsq(5);//20us訐(P2!=0xfe){temp=P2&OxfO;switch(temp){case0xe0:num=0;break;caseOxdO:num=l;break;caseOxbO
5、:num=2;break;case0x70:num=3;break;}while(P2!=0xfe);〃釋放按鍵if(j!=O){write_lcdl602(0x01z0);delay(l);j=0;if(num==O
6、
7、num==l
8、
9、num==2)//如果按下的是T,'2'或3if(flagl==O)//沒有按過符號(hào)鍵{a=a*10+table[num];}else//如果按過符號(hào)鍵{b=b*10+table[num];}}elseif(num==3)//如果按下的是7’{flagl=l;fuhao=4;//4表示除號(hào)已按}i=tablel[num];write_lcdl602(0x30+
10、i,l);}}P2=0xfd;if(P2!=0xfd){delayjsq(5);訐(P2!=0xfd){if(P2!=0xfd){temp=P2&OxfO;switch(temp){case0xe0:num=4;break;caseOxdO:num=5;break;caseOxbO:num=6;break;case0x70:num=7;break;}}while(P2!=0xfd);if(j!=0){write」cdl602(0x01,0);delay(l);j=0;}if(num==4
11、
12、num==5
13、
14、num==6&&num!=7)//如杲按下的是'4','5'或6if(flagl==0)
15、//沒有按過符號(hào)鍵{a=a*10+table[num];}else//如果按過符號(hào)鍵{b=b*10+table[num];}}else//如果按下的是'廠{flagl=l;fuhao=3;//3表示乘號(hào)已按}i=tablel[num];write_lcdl602(0x30+i,l);}}P2=0xfb;if(P2!=0xfb){delayjsq(5);訐(P2!=0xfb){if(P2!=0xfb