完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想用51单片机的矩阵键盘和1602液晶做一个简易的计算器(只进行一次计算的,最简单的)但是遇到了问题: 1、我按矩阵键盘,按一下出来了2个数字,而且第一位是空格 2、液晶显示出现了乱码 3、计算答案不正确 4、计算结束后蜂鸣器一直在响,几秒后不响了,液晶屏也清空了,而清屏和蜂鸣器我程序根本没有涉及 求大佬指点(图片
里想做的计算是1+5=6)
|
|
相关推荐
13个回答
|
|
1、我按矩阵键盘,按一下出来了2个数字,而且第一位是空格
答:按照KeyScan()的写法,这样说吧,这种写法只检测了电平变化,会出现连击的效果。这样来讲,本来一个信号正常时是低电平状态,按一次按键就会发出一个脉冲,在常态低电平的情况下,一个完整的脉冲信号应该包括从低变高(上升沿)和从高变低(下降沿),而你程序中的KeyScan()函数就只检测了这个脉冲从低变高的过程。 void FIR() //而你的这个FIR()函数中使用了while语句,只有检测到你按了运算符号(加,减,乘,除)才能跳出FIR函数进行第二个数的输入,如果没有按运算符号,便会一直执行FIR(),分解来看,即执行:KeyScan(),也就是说,如果你按下第一个数字按键时间过长,这个函数就不停的往上加,就像你按了1,如果时间超过KeyScan()和几句 进位算法所消耗的时间的话,计算的第一个数就会不停的first=first*10+key; 结果就是,你按了1,如果时间长了,可能就是11,111,1111,1111,11111。当然了,因为定义的变量大小为unsigned int,那么他就不会超过65536.所以最大就是11111,如果你还没有松开1这个案件,他就溢出然后继续重头循环,又是1,11,1111…… 总结一下:出于一个尽可能完善的工程来讲,KeyScan()这里需要再加入是否松开的检测。 2、液晶显示出现了乱码 答:算是补充上一个问题的,你可以尝试一下,是否只有在输入运算符号时才会出现乱码。 分析原因:key = 3,7,11,15时,程序中对应的是加减乘除运算符,所以,不应对数字进位的变量wei进行自加操作。 3、计算答案不正确 答:你可以试试帮我口算一下1+++5 == ?,开个玩笑,个人觉得如果如果表达式都有错误,怎么能计算正确答案呢? 4、计算结束后蜂鸣器一直在响,几秒后不响了,液晶屏也清空了,而清屏和蜂鸣器我程序根本没有涉及 答:脱题的回答,如果楼主真相从事这个行业,对于最基础的东西,原理淸是必须的。当然了不是说你得需要看多少书,学过多少门课等等。而是,在具体做一次实验之前,最少要对齐硬件的原理性东西了解到位,不是说拿到开发板就开始整就OK,要把外围电路至少说要看清楚。硬件才是主要重点,你写的程序最终只是最底层的驱动程序,大多的时候都是裸奔的,好点加上自己搭的简单的分时任务系统,顶多uCOS,VSWORKS。 所以我说的就是,去看看开发板带的电路图,是不是上楼上哪位(抱歉忘了几楼了,海涵)所说的,跳线帽什么的,检查硬件,这个程序只是执行一遍运算。显示完成后,就执行完了,需要系统硬件复位才能再次进行运算操作。 写在最后: 首先希望楼主能够坚持下去,有想法毕竟是不错的。 然后对于学习方法,有一点点点点小建议。 一开始别老虎吃天,一步步来才能品尝到具体的滋味。 拿这个计算器来讲,如果是我,我就拆开来先分别验证。 1.1602显示,比如固定发一个字符“”楼主大帅比“”(手工滑稽),就使用文中的Sprint函数,稍微加入点思考理解分析一下。 2.按键扫描。有了第一个基础,先做一个简单的按键扫描显示,比如按下那个数显示那个数等等。要把软件消抖,还有是否连击综合考虑,多想想,考虑人体验是否舒服等等。 3.加入数学运算,到这,你就可以加入运算了,如果前两步领会的不错的话,这会儿只加上加减乘除那就有点浪费了,你可以尝试更高阶的运算方式等等了。 最后,还是希望楼主能坚持,加油。 哦,第一次在论坛回答说的这么多,程序也只是前前后后看了几遍,人脑运行了一下,如有疏漏,请海涵。 第一次说这么多目的就是为了能够鼓励一下楼主,只要努力坚持学习,论坛里都会热情帮助你解决的。 自此,匿了.
最佳答案
|
|
|
|
此问答贴被选为3月14日的每日一答贴,活动详情见:https://bbs.elecfans.com/jishu_1111064_1_1.html 希望大家可以踊跃帮助坛友解决问题,谢谢。
|
|
|
|
|
|
|
|
蜂鸣器响应该是你用的管脚与蜂鸣器连接了,你可以把连接用的跳线帽给去掉。
|
|
|
|
[/code] |
|
|
|
debug 看的不一定准吧,据老夫观察,debug是看不到t 的,因为t 不是全局变量,没仔细看你的程序,但是这种写法,不推荐,最好只有一个while 评分
|
||
|
||
将军问鼎 发表于 2017-3-14 16:34 t写在了函数外,是全局变量 |
|
|
|
|
|
|
|
顶一个
|
|
|
|
|
|
|
|
真的谢谢了,c语言已经学的比较深了,单片机只学了两个星期所以很多还是不太了解,谢谢你了。
|
|
|
|
linhe1992 发表于 2017-3-13 23:35 在吗,我就是之前用51做计算器的那个学生,想问一下那我这个键盘扫描该怎么修改呢 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11788 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 16:36 , Processed in 0.853132 second(s), Total 104, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号