基于51单片机计算器设计内容摘要:

e(busy==1)。 //判断是否为空闲, 1 为忙, 0为空闲 } void write_(uchar ) // 写指令函数 { P0=。 // 指令付给 P0口 rs=0。 //0 0 写指令 无输出 rw=0。 lcden=0。 //关闭 lcd 使能 check()。 //检验按键 lcden=1。 //开启 lcd 使能 哈尔滨华德学院课程设计用纸 11 } void write_date(uchar date) // 写数据函数 { P0=date。 rs=1。 //1 0 写数据 无输出 rw=0。 lcden=0。 //关使能 check()。 lcden=1。 //使能 } void init() //初始化 { num=1。 lcden=1。 //使能信号为高电平 write_(0x38)。 //功能设置命令 :8位, 2行 DDRAM 的地址 write_(0x0c)。 //显示开,光标关,不闪烁 write_(0x06)。 //增量方式不移位 write_(0x80)。 //检测忙信号 //设置访问地址 write_(0x01)。 //显示开,光标关,不闪烁 num_1=0。 i=0。 j=0。 a=0。 //第一个参与运算的数 b=0。 //第二个参与运算的数 c=0。 //结果值 flag=0。 //flag 表示是否有符号键按下, fuhao=0。 // fuhao 表征按下的是哪个符号 } void keyscan() // 键盘扫描程序 { P3=0xfe。 //1111 1110 if(P3!=0xfe)//p3 口最低位非 0 执行 { if(P3!=0xfe) { temp=P3amp。 0xf0。 //保留高 4位的按键值 switch(temp) { 哈尔滨华德学院课程设计用纸 12 case 0xe0:num=0。 //符号列 break。 case 0xd0:num=1。 //369 列 break。 case 0xb0:num=2。 //258 列 break。 case 0x70:num=3。 //147 列 break。 } } while(P3!=0xfe)。 //下面为判断按键 if(num==0||num==1||num==2)//如果按下的是 39。 739。 ,39。 839。 或 39。 9 { if(j!=0) { write_(0x01)。 //清屏命令 j=0。 } if(flag==0)//没有按过符号键 { a=a*10+table[num]。 //到 table 中取将要显示并参与运算 a的值 a的初值为 39。 039。 ,结果为输入 a值 } else//如果按过符号键 { b=b*10+table[num]。 //b 的初值为 39。 039。 ,结果为输入 b 值 } } else//如果按下的是 39。 /39。 { flag=1。 //有按键按下标志 fuhao=4。 //4 表示除号已按 } i=table1[num]。 //送显示 write_date(0x30+i)。 //将数 字转 化为 字符 ,对应 前面的table1 中的 i0x30 } P3=0xfd。 哈尔滨华德学院课程设计用纸 13 if(P3!=0xfd)//1111 1101 上次 1111 1110 低位向高位移一位 以后类似实现行扫描 { delay(5)。 //去抖 if(P3!=0xfd) { temp=P3amp。 0xf0。 switch(temp)//判断按键位置 下面是四种情况 { case 0xe0:num=4。 break。 case 0xd0:num=5。 break。 case 0xb0:num=6。 break。 case 0x70:num=7。 break。 } } while(P3!=0xfd)。 if(num==4||num==5||num==6amp。 amp。 num!=7)// 如果按下的是39。 439。 ,39。 539。 或 39。 639。 { if(j!=0) { write_(0x01)。 //清屏命令 j=0。 } if(flag==0)//没有按过符号键 { a=a*10+table[num]。 //输入 a值 } else//如果按过符号键 { b=b*10+table[num]。 //输入 b 值 } } else//如果按下的是 39。 /39。 哈尔滨华德学院课程设计用纸 14 { flag=1。 fuhao=3。 //3 表示乘号已按 } i=table1[num]。 //显示 找对应的码 write_date(0x30+i)。 } P3=0xfb。 //1111 1011 逐行扫描 if(P3!=0xfb) { delay(5)。 if(P3!=0xfb) { temp=P3amp。 0xf0。 switch(temp)//判断位置 { case 0xe0:num=8。 break。 case 0xd0:num=9。 break。 case 0xb0:num=10。 break。 case 0x70:num=11。 break。 } } while(P3!=0xfb)。 if(num==8||num==9||num==10)//如果按下的是 39。 139。 ,39。 239。 或 39。 339。 { if(j!=0) { write_(0x01)。 //清屏 j=0。 } if(flag=。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。