基于单片机控制的简单计算器设计与仿真
display(num); } else
dataoverflow(); break; case 3: x=x*y; num=x;
if(num<134217728&&num>-134217728) {
display(num); } else
dataoverflow(); break; case 4: if (y==0) dealerror(); else { x=x/y; num=x;
if(num<134217728&&num>-134217728) {
display(num); } else
dataoverflow(); } break; } y=0; }
- 22 -
}
(3)LCD显示程序设计:
利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。
/**************LCD初始化函数*************/ void init_LCM() {
write_com(0x30); write_com(0x30); write_com(0x30); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0e); }
/***********LCD写数据函数*************/ void write_data(char ddata) {
RS=1;/*写指令*/ R_W=0;
EN=1;/*使能信号开*/ P1=ddata;/*将数据送入p1口*/ EN=0;/*使能信号关*/ check_BF(); }
/***********LCD写指令函数*************/ void write_com(char command) {
RS=0;/*写指令*/ R_W=0;
- 23 -
基于单片机控制的简单计算器设计与仿真
EN=1;/*使能信号开*/
P1=command;/*将数据送入p1口*/ EN=0;/*使能信号关*/ check_BF(); }
/************LCD检查忙碌函数***********/ void check_BF() {
char i,x=0x80; P1=0xff; while(x&0x80) { RS=0; R_W=1; EN=1; x=P1; EN=0;
for (i=0;i<10;i++); }
EN=0;/*关闭使能信号*/ }
/**********LCD清屏函数**********/ void clearLCD() {
write_com(0x01); }
/**********LCD显示函数**********/ void display(long a) {
long temp,b,c=-1; int lenth=1,i,j; clearLCD(); if(a<0)
- 24 -
{ a=a*c;
write_data('-'); } temp=a;
while((temp=temp/10)!=0) { lenth++; }
for(i=lenth;i>0;i--) { b=1;
for(j=0;j write_data(0x30+a/b); a=a%b; } } (4)错误处理及提示程序设计: /**********除数为处理函数**********/ void dealerror() { int i=0; clearLCD(); for(i=0;i<5;i++) write_data(error[i]); } /*********数值溢出处理函数**********/ void dataoverflow() { int i=0; - 25 - 基于单片机控制的简单计算器设计与仿真 clearLCD(); for(i=0;i<8;i++) write_data(overflow[i]); - 26 -