资源描述:
《单片机简易计算器程序代码.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、#include#include#defineuintunsignedint#defineucharunsignedchar#defineulongunsignedlongsbitlcden=P2^2;//定义引脚E使能sbitrs=P2^0;sbitrw=P2^1;sbitshangdang=P2^7;chari,temp,num,g=0,f=0,gz=0,ad=0,bd=0,eq=0,qz,k;//gz为跟踪地址,ad,bd分别表示a,b是否按小数点,eq表示是否入过等号doubleafd=0,bfd=0;//afd,bfd为小数点后个数floata,b
2、,daan;longc1,c2;//a,第一个数b,第二个数c,得数daan答案floatdzh;ucharflag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号ucharcodetable[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};ucharcodetable1[]={7,8,9,0x2f-0x30,//按键标值0x2f-0x30是将字符转化为数字,与后面的0x30+i抵消,得i值4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30//0x01是清屏命令}
3、;voiddelay(uintz)//延迟函数{while(z--);}voidwrite_com(ucharcom)//写指令函数{delay(1000);lcden=0;rs=0;rw=0;P0=com;//com指令付给P0口lcden=1;delay(20);lcden=0;}voidwrite_date(uchardate)//写数据函数{delay(1000);lcden=0;rs=1;rw=0;lcden=1;P0=date;lcden=0;}voidinit()//初始化{write_com(0x38);//功能设置命令:8位,2行DDRAM的地址delay(200);wri
4、te_com(0x0e);//显示开,光标开,不闪烁delay(200);write_com(0x06);//增量方式不移位delay(200);write_com(0x80);//设置访问地址delay(200);}voidxianshi(chari,charh,floatdaan)//c为得数i从最后一位跟踪,H为精确到小数点后几位{qz=0;k=0;c1=(long)daan;c2=(long)((daan-c1)*10000);//为小数点后6位尝试用pow函数答案不理想if(c2%10>=5){c2=(c2/10)+1;}else{c2=c2/10;}while(c2!=0){k=
5、c2%10;if(i6、dgg(chargz){write_com(0xc0);write_date(0xfe);write_com(0x80+gz);}voidkeyscan(void)//键盘扫描程序{if(shangdang==0)//上档键{delay(100);if(shangdang==0){while(shangdang==0);g=!g;//g表示那个档位g=0,下档g=1,上档if(g==1){write_com(0xc0);write_date(0x5e);write_com(0x80+gz);}if(g==0){write_com(0xc0);write_date(0xfe);write_co
7、m(0x80+gz);}shangdang=1;}}P1=0xfe;//第一行,7,8,9,/或sinif(P1!=0xfe){delay(20);//20msif(P1!=0xfe){temp=P1&0xf0;switch(temp){case0xe0:num=0;break;case0xd0:num=1;break;case0xb0:num=2;break;case0x70:num=3;break;}}w