资源描述:
《基于at89c51的简易计算器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、3.1硬件连接图3-1所示为简易计算器的电路原理图。P3U用于键盘输入,接4*4矩阵键盘,键值与键盘的对应表如表---所示,pO口和p2口用于显示,p2口用于显示数值的高位,po口用于显示数值的低位。U1P33-4kC2C平30pFr~~IYlP32P35P34VCC丁RDWRClPol2lOOpFP1.0Pl.lPl.2Pl.3Pl.4Pl.5Pl.6Pl.7P3.3ONT1)P3.2(INT0)P3.5(T1)P3.4(T0)1918EA/VPP>XTAL1XTAL2RSTP3.7(RD)P3.6(WR)AT39C51RESET(AD0)P0.0(ADl)P0.1(AD2)P0.
2、2(AD3)P03(AD4)P0.4(AD5)P0.5(AD6)P0.6(AD7)P0.7(A8)P2.0(A9)P2.1(A10)P2.2(A11)P2.3(A12)P2.4(A13)P2.5(A14)P2.6(A15)P2.7VCCGND(RXD)P3.0(TXD)P3.1ALETROGPSENP00——8P017P02AAA.^6P035P044P05•vw™~3P06——VCChRP1PO?J-CDENIK10KRSPlVCCPOO40丁P0120P02P30P03P31P04P05RWLCDENP06P07VCC12345678910111213141516Header16
3、P307ASW-PBiSW-PB45■6P31SW-PB4SW-PB345人TRSW.PB-oo-SW-PB图3-1简易计算器电路原理图键值与功能对应表键值0123456789+0N/C功能0123456789+表3-13.2计算器的软件设计#include//头文件#defineuintunsignedint//#defineucharunsignedcharsbitlcden=P2A3;//定义引脚sbitrs=P2A4;sbitrw=P2A0;sbitbusy
4、=P0A7;chari,j,temp,num,num_l;longa,b,c;//a,第一个数b,第二个数c,得数floata_c,b_c;ucharflag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号ucharcodetable[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};ucharcodetablel))={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,l,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};voiddelay(ucharz)//延迟函数{uc
5、hary;for(z;z>0;z-)for(y=0;y6、date;rs=1;rw=0;lcden=0;check();lcden=l;}voidinit()//初始化{num=-l;lcden=l;//使能信号为高电平write_com(0x38);"8位,2行write_com(0x0c);//显示开,光标关,不闪烁write_com(0x06);//增量方式不移位显竟獗暧贫柚?write_com(0x80);//检测忙信号write_com(0x01);//显示开,光标关,不闪烁num_l=0;i=0;j=0;a=0;//第一个参与运算的数b=0;//第二个参与运算的数c=0;flag=O;//flag表示是否有符号键按下,fuhao
7、=0;//fuhao表征按下的是哪个符号}voidkeyscan()//键盘扫描程序P3=Oxfe;if(P3!=0xfe){delay(20);延迟20msif(P3!=0xfe){temp=P3&0xf0;switch(temp){case0xe0:num=0;break;case0xd0:num=l;break;case0xb0:num=2;break;case0x70:num=3;break;}}while(P3!=0xfe);if(num==0
8、