课程设计报告
void write_date(uchar date) // 写数据函数 {P1=date; rs=1; rw=0; lcden=0; check(); lcden=1; }
void init() //初始化 { num=-1;
lcden=1; //使能信号为高电平 write_com(0x38); //8位,2行
write_com(0x01); //显示开,光标关,不闪烁 write_com(0x0c); //显示开,光标关,不闪烁*/ write_com(0x06); //增量方式不移位 显竟獗暌贫 柚? num_1=0; i=0; j=0;
a=0; //第一个参与运算的数 b=0; //第二个参与运算的数 c=0;
flag=0; //flag表示是否有符号键按下, fuhao=0; // fuhao表征按下的是哪个符号 }
void keyscan() // 键盘扫描程序 {P2=0xfe; if(P2!=0xfe) { delay(20); if(P2!=0xfe) {temp=P2&0xf0;
15
课程设计报告
switch(temp)
{ case 0xe0:num=0; break; case 0xd0:num=1;break; case 0xb0:num=2;break; case 0x70:num=3;break; } } while(P2!=0xfe);
if(num==0||num==1||num==2)//如果按下的是'7','8'或'9 { if(j!=0)
{ write_com(0x01); j=0; }
if(flag==0)//没有按过符号键 {a=a*10+table[num]; }
else//如果按过符号键 {b=b*10+table[num]; }}
else//如果按下的是'/' {flag=1;
fuhao=4;//4表示除号已按 }
i=table1[num]; write_date(0x30+i);} P2=0xfd; if(P2!=0xfd) {delay(5); if(P2!=0xfd) { temp=P2&0xf0; switch(temp)
{ case 0xe0:num=4; break;
16
课程设计报告
case 0xd0:num=5; break; case 0xb0:num=6; break; case 0x70:num=7; break; } }
while(P2!=0xfd);
if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6' { if(j!=0)
{ write_com(0x01); j=0; }
if(flag==0)//没有按过符号键 {a=a*10+table[num]; }
else//如果按过符号键 b=b*10+table[num]; }}
else//如果按下的是'/' { flag=1;
fuhao=3;//3表示乘号已按 }
i=table1[num]; write_date(0x30+i);} P2=0xfb; if(P2!=0xfb) {delay(5); if(P2!=0xfb) {temp=P2&0xf0; switch(temp)
{ case 0xe0:num=8;break; case 0xd0:num=9;break; case 0xb0:num=10;break;
17
课程设计报告
case 0x70:num=11;break; }}
while(P2!=0xfb);
if(num==8||num==9||num==10)//如果按下的是'1','2'或'3' { if(j!=0)
{ write_com(0x01); j=0; }
if(flag==0)//没有按过符号键 {a=a*10+table[num]; }
else//如果按过符号键 {b=b*10+table[num]; }}
else if(num==11)//如果按下的是'-' {flag=1;
fuhao=2;//2表示减号已按 }
i=table1[num]; write_date(0x30+i); } P2=0xf7; if(P2!=0xf7) {delay(5); if(P2!=0xf7) {temp=P2&0xf0; switch(temp)
{ case 0xe0:num=12; break; case 0xd0:num=13;break; case 0xb0:num=14;break;
18
课程设计报告
case 0x70:num=15; break; } }
while(P2!=0xf7); switch(num) {
//按下的是\
case 12:
{write_com(0x01);a=0;b=0;flag=0;fuhao=0; } break; case 13:
//按下的是\
{ if(flag==0) //没有按过符号键 {a=a*10;
write_date(0x30); P2=0;}
else if(flag==1) //如果按过符号键 { b=b*10; write_date(0x30); }} break; case 14: {j=1; if(fuhao==1)
{ write_com(0x80+0x4f); //按下等于键,光标前进至第二行最后一个显示处 write_com(0x04); //设置从后住前写数据,每写完一个数据,光标后退一格 c=a+b; while(c!=0)
{ write_date(0x30+c); c=c/10;}
write_date(0x3d); //再写\ a=0;b=0;flag=0;fuhao=0; }
else if(fuhao==2)
19