完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本来想按一次按键加一的,可是实际情况是按一次按键加三 这是在《单片机C语言程序设计实训100例》中的例子,我看了好几遍代码了,找不到问题,大家帮忙给看看 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar Num_Buffer[]={0,0,0}; uchar Key_Code,Key_Counts=0; void DelayMS(int x) { uchar i; while(x--)for(i=0; i<120; i++); } void Show_Counts_ON_DSY() { uchar i,j=0x01; Num_Buffer[2]=Key_Counts/100; Num_Buffer[1]=Key_Counts/10%10; Num_Buffer[0]=Key_Counts%10; for(i=0; i<3; i++) { j=_cror_(j,1); P0=0xff; P0=DSY_CODE[Num_Buffer]; P2=j; DelayMS(1); } } void main() { uchar i; P0=0xff; P1=0xff; P2=0x00; Key_Code=0xff; while(1) { Show_Counts_ON_DSY(); P1=0xff; Key_Code=P1; if(Key_Code!=0xff) for(i=0; i<30; i++)Show_Counts_ON_DSY(); switch(Key_Code) { case 0xfe: if(Key_Counts<255)Key_Counts++; break; case 0xfd: if(Key_Counts>0)Key_Counts--; break; case 0xfb: Key_Counts=0; } Key_Code=0xff; } } |
|
相关推荐
7个回答
|
|
没有消抖吧,按键,按下去的时候你要检测是否真的按下去了,还有释放的时候也是。要有相应的消抖程序。
|
|
|
|
问题是不管是按加,还是按减,都是变化3个数,而且我是用软件仿真的说 |
|
|
|
|
|
|
|
路过,看看,看看
|
|
|
|
本帖最后由 duoluoxiaosheng 于 2013-10-24 14:49 编辑
这个真有效诶,我该成60的时候按一次加2,改成90的时候就按一次加1了,大神能给解释一下吗,难道是因为延时不够,导致程序多次执行,嗯……我觉得是这样的 |
|
|
|
恩、、应该是吧、、延时不够的话、当你一次按下按键、程序执行太快可能会误判为长按、就会一直往上加了(个人是这么理解的)....、 还有啊、我不是什么大神啊、我是个初学者、、 |
|
|
|
添加松键检测即可
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12024 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 04:48 , Processed in 0.510504 second(s), Total 52, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号