使用3*3矩阵按键,分别对应1-9九个数字,当按一次Key_SET时,切换速度指示LED亮起;按下某一矩阵按键,再按一次Key_SET,使得转速直接变为按下的数字相对应的档位,且指示灯熄灭;
3条回答 默认 最新
- Idoc_* 2021-09-08 17:02关注
楼上的大哥已经给出答案了,我就写个代码框架吧。
#define CHANGE_SPEED_TIME_OUT 2000 //设置超时// #define SET_SPEED_TIME_OUT 2000 //设置超时// #define SPEED_MAX 8 //最大速度值// #define SPEED_MIN 2 //最小速度值// u8 g_key_num; //按键值// u16 g_change_speed_time_cnt; //设置速度计数变量1// u16 g_set_speed_time_cnt; //设置速度计数变量2// u8 speed_change_flag; //允许切换速度的标志位// u8 set_speed_flag; //速度已经记录完成标志位// void Key_Fun(void) { switch (g_key_num) { case 0x01: if (!speed_change_flag) { //LED灯亮起,允许切换速度// speed_change_flag = 1; set_speed_flag = 0; } else { //LED灯灭,设置速度,禁止再切换速度// speed_change_flag = 0; set_speed_flag = 0; } break; //……还可以自行添加case// default: if (!speed_change_flag) break; if ((g_key_num >= SPEED_MIN) && (g_key_num <= SPEED_MAX)) //速度区间内设置速度// { //记录速度值// set_speed_flag = 1; } else{ //超出速度区间结束速度设置// g_change_speed_time_cnt = 0; speed_change_flag = 0; set_speed_flag = 0; } break; } if (speed_change_flag) { if (set_speed_flag) { if (++g_set_speed_time_cnt >= SET_SPEED_TIME_OUT) //已经按下了要设置的速度值,等待按下Key_set设置速度允许的最长时间// { //一定时间内没有按下key_set可以默认设置当前按下的速度值// g_set_speed_time_cnt = 0; set_speed_flag = 0; g_change_speed_time_cnt = 0; speed_change_flag = 0; //……// } } else { if (++g_change_speed_time_cnt >= CHANGE_SPEED_TIME_OUT) //在一定时间内一直没有设置速度值则默认设置结束// { g_change_speed_time_cnt = 0; speed_change_flag = 0; set_speed_flag = 0; } } } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
- ¥50 成都蓉城足球俱乐部小程序抢票
- ¥15 yolov7训练自己的数据集
- ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
- ¥15 电力市场出清matlab yalmip kkt 双层优化问题
- ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)