完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近被TM1638搞的心情烦躁了。。总不知道哪里出错了。现在就想问下大佬们,按键检测后,可以执行其他模块的程序吗,不去管数码管的显示或不显示或显示什么?按键检测的步骤如何,和普通独立按键检测步骤有区别吗?
|
|
相关推荐
4个回答
|
|
帮你顶一下,我也在用这个驱动,刚刚弄好显示,卡在按键上了,按键一点反应都没有,不知道是怎么回事,手册不详细...
|
|
|
|
|
|
|
|
按键现在可以工作了,原来是3根数据线要接上拉电阻,每根线接一个10K电阻到5V就可以判断按键了,但是我不知道怎么消抖,按键按一下变量连加很多次,还有不知道怎么判断按键释放....下面是我的代码。。。
/****************读取按键值并存储*******************/ void read_key() { unsigned char i,j; send_command(0x42); delay_nms(10); DIO=1; //释放DIO for(j=0;j<4;j++) { for(i=0;i<8;i++) { CLK=0; delay_nms(10); Key[j]=Key[j]>>1; CLK=1; if(DIO) Key[j]=Key[j]|0x80;//1000 0000 nop; } nop; nop; } CLK=0; DIO=0; STB=1; //xiaodou=0; } void key_process() { if(Key[2]!=0x00) { if((Key[2]==0x10)) //(ERROR power { miao=0; push_system^=1; AUXR|=0x10;//定时器2使能中断 TR0^=1;//定时器0开始计时 // EA^=1; } if((Key[2]==0x20)){display_fixedadd(led_dis=led_dis|1,4);display(10,1);} //(MODE if((Key[2]==0x40))/////////////////////////////////////////(srt { display_fixedadd(led_dis=led_dis|2,4);set_key=1;display(11,1); set_temp=IapReadByte(0x0001);//b=jh/10;a=jh%10; } /////////////////////////////////////////////////////////(SET } if(Key[3]!=0x00) { if((Key[3]==0x01))/////////////////////////////////////////////(UP { lj++;if(lj>9)lj=0; set_temp++; if(set_temp>99)set_temp=0; display_fixedadd(led_dis|=0x40,4); }//////////////////////////////////////////////////////////(UP if((Key[3]==0x02))/////////////////////////////////////////////(ENTER { display_fixedadd(led_dis|=0x40,4);set_key=0; IapEraseSector(0x0000); IapProgramByte(0x0001,set_temp); } /////////////////////////////////////////////////////////////(ENTER if((Key[3]==0x04)){display_fixedadd(led_dis|=0x80,4);} ////////////////////(FUNC if((Key[3]==0x10))/////////////////////////////////////////////(DOWN { display_fixedadd(led_dis|=0x04,4);lj--;if(lj>9)lj=9; set_temp--; if(set_temp<0)set_temp=99; } /////////////////////////////////////////////////////////////(DOWN } } |
|
|
|
本帖最后由 fzhlpp 于 2018-4-13 12:19 编辑
我的问题解决了,用的是状态机方法,就是在按键执行那里来一个状态机,记录第一次进入状态,然后等待释放按键,第一次记录的状态用于阻止后面多次进入按键功能执行语句,直到按键释放状态解除第一次按键状态。主要用了这个static修饰符: void key_process() { static char key_state = 0; // if(!key_state) { if((Key!==0x00) { key_state=1; if((Key!=0x02){/*这里放按键功能语句*/; } if((Key!=0x00){/*这里放按键功能语句*/; } ........ } } if((Key=0x00)key_state=0;//按键释放状态恢复初始为零 } 有跟我一样困惑不懂的可以提问. |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 04:08 , Processed in 0.490312 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号