#include enum State {Init, Press, Free}; //定义按键状态的枚举类型enum State Key_State; //按键状态 sbit Key1 = P2^4;sbit Key2 = P2^5;sbit Key3 = P2^6;sbit Key4 = P2^7; void Delay_ms(unsigned int x){int i,j;for(i=0; i<110; i++)for(j=0; j;}//===============================================================================//函数名称:键盘扫描(状态机无延时消抖)//说明:键盘接口对应: key1 = P2-4 key2 = P2-5 key3 = P2-6 key4 = P2-7//参数://返回值://日期:2011-6-22//修改://===============================================================================void Keyscan(void){ switch (Key_State) { case Init : // 按键初始态 if((P2 | 0x0f) != 0xff) { Key_State = Press; // 键被按下,但需要确认是否是干扰 } break; case Press : // 按键确认态 if((P2 | 0x0f) != 0xff) //如有键按下则不是干扰,判断键值 { //判断是哪一个按键被按下 if( (P2 | 0xef) != 0xff ) //第一个键被按下 {P1 = 0xfe;Delay_ms(500);P1 = 0xff; } if( (P2 | 0xdf) != 0xff ) //第二个键被按下 {P1 = 0xfd;Delay_ms(500);P1 = 0xff; } if( (P2 | 0xbf) != 0xff ) //第三个键被按下 {P1 = 0xfb;Delay_ms(500);P1 = 0xff; } if( (P2 | 0x7f) != 0xff ) //第四个键被按下 {P1 = 0xf7;Delay_ms(500);P1 = 0xff; } Key_State = Free; // 状态转换到键释放态 } else { Key_State = Init; // 按键已抬起,属于干扰,转换到按键初始态 } break; case Free : if((P2 | 0x0f) == 0xff) //判断按键是否释放 { Key_State = Init; //如果按键释放,转换到按键初始态 } break;}} 这是另外一种,其实都差不多,只不过比较直观而已。 void Keyscan(void){ switch (Key_State) { case Init : // 按键初始态 if((Key1 == 0) | (Key2 == 0) | (Key3 == 0) | (Key4 == 0)) { Key_State = Press; // 键被按下,但需要确认是否是干扰 } break; case Press : // 按键确认态 if((Key1 == 0) | (Key2 == 0) | (Key3 == 0) | (Key4 == 0)) //如有键按下则不是干扰,判断键值 { //判断是哪一个按键被按下 if(Key1 == 0) //第一个键被按下 {P1 = 0xfe;Delay_ms(500);P1 = 0xff; } if((Key2 == 0)) //第二个键被按下 {P1 = 0xfd;Delay_ms(500);P1 = 0xff; } if((Key3 == 0)) //第三个键被按下 {P1 = 0xfb;Delay_ms(500);P1 = 0xff; } if((Key4 == 0)) //第四个键被按下 {P1 = 0xf7;Delay_ms(500);P1 = 0xff; } Key_State = Free; // 状态转换到键释放态 } else { Key_State = Init; // 按键已抬起,属于干扰,转换到按键初始态 } break; case Free : if((Key1 == 1) & (Key2 == 1) & (Key3 == 1) & (Key4 == 1)) //判断按键是否释放 { Key_State = Init; //如果按键释放,转换到按键初始态 } break;}}
导读:目前正在解读《51单片机的状态机消抖代码》的相关信息,《51单片机的状态机消抖代码》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机的状态机消抖代码》的详细说明。
简介:本文给大家分享了51单片机的状态机消抖代码。
提醒:《51单片机的状态机消抖代码》最后刷新时间 2024-03-14 00:58:07,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机的状态机消抖代码》该内容的真实性请自行鉴别。