基于at89s52单片机的简易计算器设计内容摘要:

,0x99, //04 0x92,0x82,0xF8,0x80,0x90, //59 0x86,0xAF,0xFF,0x7F,0xBF,}。 //E,r,空格 ,., /***main 函数 ***/ void main(void) { char i,j,k,c。 char a[8],b[8]。 /***定时 1ms***/ TMOD=0。 TL0=(1000/256)。 TH0=(1000%256)。 EA = 1。 //总中断开关 ET0 = 1。 //开中断 TR0 = 1。 //启用计数器 0 KSC:do { for(i=1。 i9。 i++) //数字录入循环 { dsp[0]=keyscan()。 if(c==2amp。 amp。 dsp[0]10) //此段代码验证是否有旧的计算结果在显示,且不再参与新计算 单片机系统开发与应用工 程实习 计报告 6 { dsp[1]=dsp[0]。 for(j=2。 j9。 j++) dsp[j]=12。 c=0。 } else if(c==2amp。 amp。 dsp[0]9) //旧的计算结果将参与新的计算,作为第一个数 { c=0。 } if(dsp[0]==0amp。 amp。 dsp[1]==0amp。 amp。 dsp[2]==12) //个位为 0 且十位为空时按下 0,按键无效,跳回 KSC 等待正确输入 { /***goto 跳转标志 ***/ goto KSC。 } else if(dsp[0]9) break。 //有操作符按下,跳出数字录入循环 else {for(j=i。 j0。 j) dsp[j]=dsp[j1]。 //移位,以正确显示数字 } } if(i==9) //判断是否输入 8 个有效数字,是则等待操作符,否则直接判断操作符 { do //使用 do while 无论是否第一个数都取一次操作符 { dsp[0]=keyscan()。 //获取操作符号 if(dsp[0]==14||dsp[0]10) //按下 C 或者第 9 位数字清零 { 单片机系统开发与应用工 程实习 计报告 7 dsp[1]=0。 for(i=2。 i9。 i++) dsp[i]=12。 c=0。 } }while((dsp[0]==15)amp。 amp。 (c==0))。 //等号被按下,等待新的操作符(仅对第一个数字有效) } else if(dsp[0]==14) //按下 C 清零 { dsp[1]=0。 for(i=2。 i9。 i++) dsp[i]=12。 c=0。 } while(dsp[0]==15amp。 amp。 c==0) //未输满 8 位且是第一个数字即按下等号,等待非等号操作符 { dsp[0]=keyscan()。 //获取操作符号 if(dsp[0]==14||dsp[0]10) //按下 C 或者数字都进行清零 ,重新输入 a { dsp[0]=14。 //将 dsp[0]置为 14,防止因数字清零未能拦截 dsp[1]=0。 for(i=2。 i9。 i++) dsp[i]=12。 c=0。 } } }while(dsp[0]==14)。 //数字输入未完成即按下 C,重新等待输入 do { 单片机系统开发与应用工 程实习 计报告 8 if(c==0) //没有数字输入 { k=dsp[0]。 //存计算符(循环内已排除 C、=、数字) for(i=0。 i8。 i++) //将第一个数存入 a[8] { a[i]=dsp[i+1]。 } dsp[1]=0。 //清零 for(i=2。 i9。 i++) dsp[i]=12。 c=1。 //已输入 a /***goto 跳转标志 ***/ goto KSC。 } else if(c==1) { for(i=0。 i8。 i++) //将第二个数存入 b[8] { b[i]=dsp[i+1]。 } c=2。 //已输入 b if(dsp[0]!=15) //b 输完后操作符不是等号 { calculate(k,a,b)。 for(i=0。 i8。 i++) //将计算结果存入 a[8], a 值更新 { a[i]=dsp[i+1]。 } 单片机系统开发与应用工 程实习 计报告 9 k=dsp[0]。 //更新计算符 c=1。 /***goto 跳转标志 ***/ goto KSC。 } } }while((dsp[0]==15)amp。 amp。 (c2))。 //直到 ab 输入完成且按下等号 calculate(k,a,b)。 //进行最后计算 /***goto 跳转标志 ***/ goto KSC。 //跳回 KSC,等待新一轮计算 while(1)。 //防止程序跑飞 } char keyscan() { char KeyL。 char KeyR。 char j。 do { do { P3=0xF0。 P3=P3|0xF0。 //行扫描 11110000 if(P3!=0xF0) { KeyL=P3。 P3=0x0F。 单片机系统开发与应用工 程实习 计报告 10 P3=P3|0x0F。 //列扫描 00001111。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。