完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我需要用4*4矩阵键盘输入位数最多为四位的多位数。我要实现输入0-9时,键盘可以继续输入,液晶1602保持不变,输入10-15时,液晶1602显示我所输入的数值。我写了键盘扫描程序,但是组合起来就不会写了,尝试了很多方法,总是不能成功,以下是我的部分代码,大神能否帮我看看。我觉得主要是逻辑的问题。
void count() { uchar sn; uint num1=0; sn=key1();//这是键盘扫描程序,16个按键分别返回0-15 while(sn<10)//当输入0-9时,键盘可以继续输入 { num1=num1*10+sn; sn=key1(); } write_f(num1);//输入10-15将我输入的多位数送到1602显示,write_f()是显示函数。 } |
|
相关推荐
18个回答
|
|
1.把num1改为全局变量
2.把while(sn<10)改为if(sn<10) 3.把sn=key1()去掉 4.把write_f(num1)放到if里面 这样输入一位就显示一位,输入n位就显示n位 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wenzizaigaoge 发表于 2015-6-2 12:24 真怀疑你没用过计算器,每输入一位数难道没显示?比如输入123,输入了123要按确定键才能显示,如果我有这计算器我绝对砸了!永不使用这计算器! 上面已经改了,和计算器一样! |
|
|
|
Aidaohuakai 发表于 2015-6-2 12:31 |
|
|
|
Aidaohuakai 发表于 2015-6-2 12:31 哈哈哈对不起我用过计算器,照你说的改如下 void count() { uchar sn; num1=0; sn=key1(); if(sn<10)//°´ÏÂÊý×Ö¼ü { num1=num1*10+sn; write_f(num1); } } 可是这样改只能输入一位数,不能输入多位数的。而且我不明白,要是输入一位显示一位的话,那它怎么知道我什么时候输完这个数啊 |
|
|
|
|
|
|
|
|
|
|
|
不知你显示是怎么写的? 把write_f(num1);改为 write_f(sn); num1只是把输入的多位数合成了一个数,方便后面计算 |
|
|
|
Aidaohuakai 发表于 2015-6-3 09:07 void write_f(uint date) //显示函数 { uchar qian,bai,shi,ge; qian=date/1000; bai=date/100%10; shi=date/10%10; ge=date%10; write_com(0x80+0x42); write_data(0x30+qian); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); write_data(0x4D); write_data(0x48); write_data(0x5a); } 所以应该显示num1 void count { sn=key1(); if(sn<10)//按下0-9键,一直显示输入的数据 { num1=num1*10+sn; write_f(num1); } else//按下10-15键将num1清零 { num1=0; } } uint num1 void main()//主函数 { num1=0; init();//初始化函数 while(1) { count(); } } 我觉得我这样写并没错,然而并不能出来结果 |
|
|
|
Aidaohuakai 发表于 2015-6-3 09:07 void write_f(uint date) //显示函数 { uchar qian,bai,shi,ge; qian=date/1000; bai=date/100%10; shi=date/10%10; ge=date%10; write_com(0x80+0x42); write_data(0x30+qian); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); write_data(0x4D); write_data(0x48); write_data(0x5a); } 所以应该是num1 void count()//检测并显示输入值 { sn=key1(); if(sn<10)//按下0-9,显示输入值 { num=num*10+sn; write_f(num); } else//按下10-15,将num1清零 { num=0; } } uint num1; void main() { num=0; init();//初始化函数 while(1) { count(); } } 我觉得我这样写并没错,,然而并不能出来结果。。。 |
|
|
|
输入一位就显示一位,并不是显示一个数(一个数可以有多个位),num1是用来后面计算的,不是用来显示的! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
122 浏览 0 评论
565 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
772 浏览 0 评论
948 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
658 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12041 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 14:52 , Processed in 1.509539 second(s), Total 104, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号