完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
晚上有点事,加QQ晚了,不好意思 |
|
|
|
喇叭,这个我确定一定以及肯定,是循环运行。按键时间虽然很短但是对于单片机来说仍然被视为很长时间,也就是说,他不仅可以响一声,可以响很多声。你显示多个数码管的时候很可能会再这里出现问题。比如按键后,数码管的抖动! |
|
|
|
长知识了!这个怨我了!!!,我又细看了一下c语言,却有这种用法。但我真的没这么用过。好吧,期待你能把后续问题解决! |
|
|
|
呵呵。好像懂了,是不没有分号呢原因,但我真没这么用过。我要下班了,晚上还要参加一个满月宴,晚点找你!我qq441747863,要不你加我也行。晚上见! |
|
|
|
武力戡乱 发表于 2014-8-18 15:38 你给的链接我看了,可是我看完就更觉得我写的没错了,按键1,执行后面的显示等语句,然后直接break跳出switch,等待下一个按键再进入switch。 |
|
|
|
武力戡乱 发表于 2014-8-18 15:38 共同探讨,共同进步嘛 |
|
|
|
如果你说的一直按着喇叭一直响是指刚按下响一声,然后松开又响一声,如果指的是这个的话,我觉得这是因为电平变化引起的,刚按下电平由高到低喇叭响一下,松开的时候又由低到高喇叭响一声。不一定是因为程序运行的问题。 |
|
|
|
这个程序确实是实现了多个公用一组 但是你看看这个http://see.xidian.edu.cn/cpp/html/39.html switch语句的意思是什么。 看来这个确实一问题。今天晚上我一定花点时间看看。然后咱两在探讨。毕竟每个都设计思路不同吗。 |
|
|
|
其他的我稍后再看,我先纠正一点:准确的说每次是执行到break为止。多个case可共用一组执行语句。所以0-9中的任何一个都会显示。 |
|
|
|
switch(Key) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: // DispBuf[PassPosi] = LINECHAR;//显示’-‘ Disp_Led_Sin(Key,PassPosi); 这个switch是什么意思,选择吧! 当按键为9的时候,执行case 9:一直到到下一个case之前,是不? 那么假设你按键1的时候,是不不应该显示呢? 其实你没懂我的按键等待释放。你已经上传了程序 unsigned char Key_Scan(void) { unsigned char key_code_temp; if(Key_Hit()==1) { Delay_Init(10,10); if(Key_Hit()==1) { key_code_temp=Key_Code(); while(Key_Hit()==1); return(key_code_temp); } else return(0xff); } else return(0xff); } 其中while(Key_Hit()==1);就是判断按键是否释放。 如果按键没有释放,他就不会执行下一次扫描,这个是一个层。我把每个任务分成了层。 而你的程序有个明显的现象,就是按键一直按着的时候一直在响,这说明程序在整个系统中运行。我到没细看,为什么现象对。 先不说这个,我们打个赌,在不大改动思路的情况下,你看看你后续的功能能否实现,或者轻松就实现(我指的是多个数码管显示不同的值)。首先你要面对是数码管扫描(记得做在定时器中)和键盘扫描的问题。 |
|
|
|
我不明白为什么要加while(1);为什么不是一次性识别按键呢?难道不应该是按一次0-9的任意一个按键,然后执行完下面的程序由break退出吗?
|
|
|
|
注意查收啊!
|
|
|
|
其实也没多少,在6*6改进一下就可以了,显示稳定,按键稳定。 你细品一下,你那个程序,真要明天有时间研究了。确实有点意思!
Key_Display.rar
(61.61 KB, 下载次数: 40
)
这个是8.0的,给你截个图吧。 |
|
|
|
呵呵,你真牛。咋说呢 switch(Key) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: // DispBuf[PassPosi] = LINECHAR;//显示’-‘ Disp_Led_Sin(Key,PassPosi); 你告诉我他咋跳到9的 你这样在后面加个while(1),这说明你按一次按键后,不是一次性的判断你的键值,具体咋实现的,我没去细想,但真挺牛的。而你加上按键等待释放的话,一定不灵了。 switch(Key) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: // DispBuf[PassPosi] = LINECHAR;//显示’-‘ Disp_Led_Sin(Key,PassPosi); while(1); 最后来个结论,不是说你的程序不行,而是有一定误打误撞意味。你现在这个程序还没完成吧。这样会直接影响你后续程序的设计。甚至有可能会设计部出来后面的程序。真的! 行吧,我帮你设计一下按键+显示吧,后续你在思考,但是需要明天找时间,今天手头还有点活没完成。 |
|
|
|
你这个程序我没看懂,但是需要加个按键等待释放。 //作 者:武力戡乱 //项 目:按键驱动 //日 期:2014/7/18 //功 能:实现6*6按键功能,通过串口输出 //备 注:电子发烧友论坛-Proteus论坛,网友求助帮忙制作 #include "KEY.h" //函数:Key_Hit() //描述:按键判断 //参数:return 1:有按键 0:无按键 static unsigned char Key_Hit(void) { if(KEY_Lie_Read == 0xFF) return(0); else return(1); } //函数:Key_Code() //描述:计算键值 //参数:return 键值 static unsigned char Key_Code(void) { unsigned char row; unsigned char lieread = 0; unsigned char rownum = 0xFE; unsigned char key = 0xFF; for(row=0; row<6; row++) { KEY_Row_Write = rownum; lieread = KEY_Lie_Read; if (lieread != 0xFF) { switch(lieread) { case 0xFE: key=0 + 6*row; break; case 0xFD: key=1 + 6*row; break; case 0xFB: key=2 + 6*row; break; case 0xF7: key=3 + 6*row; break; case 0xEF: key=4 + 6*row; break; case 0xDF: key=5 + 6*row; break; } } rownum <<= 1; rownum ++; } KEY_Row_Write = 0; return(key); } //函数:Key_Scan() //描述:键盘扫描 //参数:return 0xff:无键值 0-15:键值 unsigned char Key_Scan(void) { unsigned char key_code_temp; if(Key_Hit()==1) { Delay_Int(10,10); if(Key_Hit()==1) { key_code_temp=Key_Code(); while(Key_Hit()==1); return(key_code_temp); } else return(0xff); } else return(0xff); } //函数:Key_Init() //描述:键盘初始化 //参数:无 void Key_Init(void) { KEY_SetRow_Write; KEY_SetLie_Read; KEY_Row_Write = 0; } 这个是我帮网友做的,论坛里面有430的6*6矩阵键盘。 我一会在帮你看看。你先看看这个。然后在找一下,论坛里面的6*6矩阵键盘仿真。 |
|
|
|
我想 我知道原因了,应该是消抖的问题,这是按照我规定的显示位置依次显示的,显示五个后PassPosi的值累加到4,也就是在最后一个数码管.又因为没有按enterkey键,PassPosi的值没有归零。所以再按其他键就没有上述情况了。看来消抖没有做好。 |
|
|
|
我用联调调试对电路和程序又做了修改,现在好很多了。但为什么每次仿真时,第一次按按键会在多个数码管上依次显示,(理论上应该只在最后一个数码管显示)再按按键就正常了。如果是因为按键抖动的话没理由只有第一次是这样啊。而且我觉得这也是影响密码输入准确与否的一个原因。我再想办法调试看看,找找原因和办法。
|
|
|
|
51密码锁改.rar
(201.12 KB, 下载次数: 29
)
里面没有仿真文件吧,我用你原来的仿真并且改动了电路。 开始上电就有没有显示。按键仍然没有反应。于是我就帮你写个显示程序,是滚屏显示2014-8。做的很粗糙,没细腻的去想,只是想告诉你怎么做显示吧。你可以改也可以自己在从新写,只要你懂原理了。注意,你原来的电路错了 |
|
|
|
我又弄了好长时间代码,改来改去还是基本上是没有改动,因为我觉得代码应该是可以实现功能的。可能是我陷入自己的思维定式里了。您帮我看看吧。个人觉得按键程序的可能性较大。 |
|
|
|
io需要稳定一下,并且和移动配合有关。把你改的东西上传一下,我晚上找个时间帮你看看。要是这次还差很多的话,我就帮你写一个数码显示程序吧。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
621 浏览 0 评论
【原创】收藏!单片机输出4种波形的函数信号发生器毕设(Proteus仿真+原理图+源码和论文)
1792 浏览 1 评论
6330 浏览 6 评论
《Proteus实战攻略从简单电路到单片机电路的仿真》+读后总结与推荐
991 浏览 0 评论
请问2020版本ADS中的symbol如何设置出layout look-alike
68230 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-27 22:30 , Processed in 0.674582 second(s), Total 94, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号