独立按键-状态机-控制LED灯protues仿真图.zip

  • 浏览量:1787
  • 下载量:3
  • 资料大小:19.22 KB
  • 日期:2014-04-16
  • 上传者:ww4160
  • 分享
  • 评论
  • 举报
  • 收藏

资料描述

    /*单次按键 指示灯依此点亮 连续按键,指示灯快速依此点亮*/
    #include
    #define uint unsigned int
    #define uchar unsigned char
    sbit key1=p3^2;//  按键位定义
    typedef enum keystate1  {csstate,qrstate,dcstate,lxstate}; 
                //按键状态有: 初始状态 确认状态 单次触发状态 连续触发状态 默认的话就是 0 1 2 3
    typedef enum ledstate {d0,d1,d2,d3,d4,d5,d6,d7} ;
                //指示灯状态有: 0 1 2 3 4 5 6 7
    void time0init(void) //定时器t0
    {
    tmod=0x01;//定时器t0方式1
    th0=(65536-10000)/256;//装10ms的初值
    tl0=(65536-10000)%256;
    tr0=1;//开启定时器t0
    }
    uchar keyscan(void)
    {
    static uchar keystate=0;//按键状态变量
    static uchar keytime=0; //按键时间变量
        uchar keyvalue;//按键值
    uchar num;//指示灯点亮的变量
    keyvalue=key1; //读取按键值   如果按键按下后 keyvalue=0 进入了csstate状态
    switch(keystate)
    {
    case csstate: 
    if(keyvalue==0)//说明按键是按下 进入qrstate状态
    {keystate=qrstate;}
    else //否则是干扰,重新回到csstate状态 重新检测
          {keystate=csstate;}
    break;
         
    case qrstate: 
    if(keyvalue==0)//说明按键是按下 进入dcstate状态
    {keystate=dcstate;}
    else //消抖没有完成 重新检测
          {keystate=csstate;}
    break;

    case dcstate: 
       keytime++;
    if(keyt
评论(0)

登录后可评论,请 登录注册

   
相关资料
换一换