完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近想用51单片机上的矩阵键盘做个简单的计算器,输入的数字或符号显示在LCD1602上。但是我想不到用什么办法可以连续输入数字显示在LCD1602上,请各位大神指教指教啊!!!
这是我的主函数代码: #include #include #include "lcd.h" #include #define uchar unsigned char #define uint unsigned int #define CHECK_BUSY //--定义使用的IO口--// #define GPIO_KEY P1 //--定义全局变量--// //unsigned char PuZh[17]="The key value is:"; unsigned char KeyValue; unsigned char LED; //用来存放读取到的键值 //--声明全局函数--// void KeyScan(void); unsigned char KeyPro(void); void Delay10ms(unsigned int c); //误差 0us void KeyScan(void) { char a = 0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { Delay10ms(20);//延时20ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { //测试列 GPIO_KEY=0XF0; switch(GPIO_KEY) { case(0Xe0): KeyValue=1;break; case(0Xd0): KeyValue=2;break; case(0Xb0): KeyValue=3;break; case(0X70): KeyValue=4;break; } //测试行 GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X0e): KeyValue=KeyValue;break; case(0X0d): KeyValue=KeyValue+4;break; case(0X0b): KeyValue=KeyValue+8;break; case(0X07): KeyValue=KeyValue+12;break; } while((a<50) && (GPIO_KEY!=0xf0)) //检测按键松手检测 { Delay10ms(1); a++; } } } } unsigned char KeyPro(void) { KeyScan(); switch(KeyValue) { case 1:return '1';break;//按下相应的键显示相对应的码值 case 2:return '2';break; case 3:return '3';break; case 4:return '+';break; case 5:return '4';break; case 6:return '5';break; case 7:return '6';break; case 8:return '-';break; case 9:return '7';break; case 10:return '8';break; case 11:return '9';break; case 12:return 'x';break; case 13:return '0';break; case 14:return '.';break; case 15:return '=';break; case 16:return '/';break; default:return 0xff;break; } } main() { unsigned char num; unsigned char s; unsigned int i, j; LcdInit(); while(1) { Delay10ms(10); GPIO_KEY = 0x0f; num = KeyPro(); if(GPIO_KEY != 0x0f) { LcdWriteCom(0x80 + 0x40); LcdWriteData(num); } } } 现在的效果是只能在原地显示数字,如何连续的显示呢? |
|
相关推荐
6个回答
|
|
因为你的每次while(1)循环都重新写了一次命令LcdWriteCom(0x80 + 0x40); 这个就导致了每次都在一个地方显示 但是你去掉以后 显示32次后 会出现乱码 建议你可以定位到具体的某一行某一列显示
|
|
|
|
|
|
就就是轮到你动脑子的时候到了。这是算法问题。别人是一下子帮不到你的
|
|
|
|
用一个表示输入数字个数的变量来控制,例如变量为n;当n为0时,当按下数字1就在最右边某处显示1,
|
|
|
|
当n等于1,按下2时就在次右边显示2。每按下一次就n++
|
|
|
|
每次输入的数字必须要显示在你想要的位置,具体你要有个算法
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3457 浏览 1 评论
8996 浏览 16 评论
4050 浏览 18 评论
1107浏览 3评论
572浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1858浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 05:53 , Processed in 1.244199 second(s), Total 89, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号