51单片机的状态机消抖代码

来源:本站
导读:目前正在解读《51单片机的状态机消抖代码》的相关信息,《51单片机的状态机消抖代码》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机的状态机消抖代码》的详细说明。
简介:本文给大家分享了51单片机的状态机消抖代码。

#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单片机的状态机消抖代码》最后刷新时间 2024-03-14 00:58:07,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机的状态机消抖代码》该内容的真实性请自行鉴别。