只需一步,快速开始
热门: 51单片机 | 24小时必答区 | 单片机教程 | 单片机DIY制作 | STM32 | Cortex M3 | 模数电子 | 电子DIY制作 | 音响/功放 | 拆机乐园 | Arduino | 嵌入式OS | 程序设计
typedef enum{ STATE_OFF, STATE_ON, STATE_STOP }ENUM_STATE; //定义ENUM_STATE枚举类型 ENUM_STATE system_state = STATE_OFF; //定义枚举变量system_state, 初始化为STATE_OFF bit key_on_flag, key_off_flag, work_too_long_flag; //定义3个触发条件的bit变量(其实用2个就行) void systemStateCtrl(){ if(key_on_flag){ if(system_state==STATE_ON || system_state==STATE_STOP) system_state = STATE_OFF; } else if(key_off_flag){ if(system_state==STATE_OFF) system_state = STATE_ON; } else if(work_too_long_flag){ if(system_state==STATE_ON) system_state = STATE_STOP; } else{ ; } systemStateWork();//把状态工作程序放这里 } void systemStateWork(){ //设计你各个状态下的工作 switch( system_state ){ case STATE_OFF: do_sth1(); //关机时的工作 break; case STATE_ON: do_sth2(); //开机时的工作 break; case STATE_STOP: do_sth3(); //超时停机时的工作 break; default: break; } }
主函数与定时器
增大时基的设置
查看全部评分
使用道具 举报
ccdmcu 发表于 2019-8-2 16:22 按键的松手检测呢?怎么用定时器写?
laishu12345 发表于 2019-8-9 17:08 if(++key_press_time
IdeaMing 发表于 2019-8-14 10:27 我想问,怎么把DS18B20的加入到你这种机制里?一次通讯时间都要好几毫秒
IdeaMing 发表于 2019-8-16 16:25 如果同时存在数码管的刷新呢,比如一秒读一次18B20,读的时候数码管的刷新就被卡了一下
13303022280 发表于 2020-1-7 14:29 如果我只需要执行一次按键之后的程序,为了避免按键长按导致的重复运行,就用一个变量,在每次进入中断检 ...
hubj627 发表于 2020-1-13 09:20 这种针对代码量小的项目实时性没有问题。但代码量大的整个程序架构就会显得臃肿,也需针对同一个事情,在主 ...
nsush 发表于 2019-6-7 00:36 我对delay1s(); delay500ms()这样的延时函数就很不爽,当然程序流程很简单的,用用也没什么,如果是一个还 ...
kissme 发表于 2019-6-16 11:24 新手完全不晓得你说的啥玩意
tesrsm 发表于 2019-6-20 12:01 去除按键的抖动 不用延时函数的话,怎么处理
lianzai 发表于 2019-6-20 13:46 好文章,不知楼主能否弄成pdf格式上传呢,想保存起来
本版积分规则 发表回复 回帖后跳转到最后一页
手机版|小黑屋|51黑电子论坛 | 管理员QQ:125739409;技术交流QQ群281945664
Powered by 单片机教程网