zoukankan      html  css  js  c++  java
  • 51单片机状态机键盘检测

    #include<reg52.h>

    #define uint unsigned int

    #define uchar unsigned char

    sbit key1=P3^2;

    typedef enum keystate{initstate,affirmstate,singlestate,repeatstate};// typedef enum±íʾ¶¨ÒåÁËÒ»¸öö¾ÙÐ͵ÄÊý¾Ý½á¹¹ ²»¸³ÖµµÄ»° ĬÈÏ {0 1 2 3}

      // ³õʼ״̬£¬È·ÈÏ״̬£¬µ¥´Î´¥·¢×´Ì¬£¬Á¬Ðø´¥·¢×´Ì¬

    typedef enum ledstate{D0,D1,D2,D3,D4,D5,D6,D7,D8};//Á÷Ë®µÆ8¸ö״̬ 0 1 2 3 4 5 6 7

    void time0init()//¶¨Ê±Æ÷T0³õʼ»¯

    {

        TMOD=0X01;           //T0·½Ê½1

        TH0=(65536-10000)/256;//³õÖµ10ms

        TL0=(65536-10000)%256;

        TR0=1;   //Æô¶¯¶¨Ê±Æ÷0

        EA=1;   //¿ª×ÜÖжÏ

        ET0=1;//¿ªÆô¶¨Ê±Æ÷0

    }

    /*Ï£Íûº¯ÊýÖеľֲ¿±äÁ¿µÄÖµÔÚº¯Êýµ÷ÓýáÊøºó²»Ïûʧ¶ø±£ÁôÔ­Öµ,

    ¼´ÆäÕ¼ÓõĴ洢µ¥Ôª²»ÊÍ·Å,ÔÚÏÂÒ»´Îº¯Êýµ÷ÓÃʱ,¸Ã±äÁ¿ÒÑÓÐÖµ,

    ¾ÍÊÇÉÏÒ»´Îº¯Êýµ÷ÓýáÊøʱµÄÖµ.

    ÕâÊǾÍÓ¦¸ÃÖ¸¶¨¸Ã¾Ö²¿±äÁ¿Îª"¾Ö²¿¾²Ì¬±äÁ¿",ÓÃstatic¼ÓÒÔ˵Ã÷*/

    uchar keyscan(void)  //°´¼üɨÃ躯Êý

    {

        staticuchar keystatevalue=0;  //°´¼ü״ֵ̬  ¼ÓStaticÑÓ³¤Ê±¼äÖÜÆÚ×÷ÓÃÓò²»±ä

        staticuchar presstime=0;   //

         uchar key_value;                //°´¼ü״ֵ̬

        uchar num;

        key_value=key1;                 //¶ÁÈ¡°´¼ü״ֵ̬£¨0 1£©

        switch(keystatevalue)

        {

        case initstate:          //³õʼ״̬

            if(key_value==0)       //˵Ã÷°´¼ü°´ÏÂ

            {keystatevalue=affirmstate;}//¼ÈÈ»°´¼ü°´Ï ¾Í±ä³ÉÈ·ÈÏ״̬

            else

            {keystatevalue=initstate;}//·ñÔò»¹Êdzõʼ״̬

            break;

        case affirmstate://È·ÈÏ״̬

            if(key_value==0)

            {

            keystatevalue=singlestate; //±äΪµ¥´Î´¥·¢×´Ì¬

            }

            else

            {

            keystatevalue=initstate;  // ¶¶¶¯Ã»ÓÐÏû³ýÍí£¬½øÈë³õʼ״̬

            }

            break;

       case singlestate:              //µ¥´Î´¥·¢×´Ì¬

            presstime++;               //Óö¨Ê±Æ÷ ÿ¹ý10ms¼Ó1´Î

            if(presstime>100)          //ʱ¼ä´óÓÚ1S  Çл»µ½Á¬·¢×´Ì¬

            {

            presstime=0;

            keystatevalue=repeatstate;  //״̬Çл»µ½Á¬·¢

            }

            else if(key_value==1)           //ʱ¼äСÓÚ1S²¢ÇÒÈç¹û°´¼üÊÍ·Å

            {

            keystatevalue=initstate;

            num++;    //µÆµÄ±ä»¯

            if(num==8)

            {

            num=0;

            }

            }

            break;

    case repeatstate:  //Á¬Ðø´¥·¢×´Ì¬

            if(key_value==1)   //Èç¹û°´¼üÊͷžͽøÈë³õʼ״̬

            {

            keystatevalue=initstate;

            }

            presstime++;

            if(presstime>10)//ÿ¹ý100msÁ¬·¢Ò»´Î

            {

            presstime=0;

            num++;

            if(num==8)

            {

            num=0;

            }

            }

            break;

            default: keystatevalue=initstate; break;

     }

           return num;

    }

    void keypress() //°´¼ü´¦Àíº¯Êý

    {

        uchar keynum; //ÓÃÓÚ¶ÁÈ¡°´¼üɨÃèµÄ·µ»ØÖµ

        if(TF0)//TF0=1ÓÐÒç³ö,˵Ã÷10msʱ¼äµ½

        {

            TF0=0;

            TH0=(65536-10000)/256;//ÖØ×°³õÖµ

            TL0=(65536-10000)%256;//ÖØ×°³õÖµ

            keynum=keyscan();//¶ÁÈ¡°´¼üɨÃèµÄ·µ»ØÖµ£¬Ò²¾ÍÊÇ°´¼ü°´ÏÂʱµÄ²Ù×÷Öµ

        }

        switch(keynum)//¶Áµ½keynumµÄÖµ ÓÃÓÚÅжÏÄĸöָʾµÆÁÁ

        {

            case D0: P0=0XFE;break;

            case D1: P0=0XFD;break;

            case D2: P0=0XFB;break;

            case D3: P0=0XF7;break;

            case D4: P0=0XEF;break;

            case D5: P0=0XDF;break;

            case D6: P0=0XBF;break;

            case D7: P0=0X7F;break;

            default: P0=0XFF;break;

        }

    }

    void main(void)

    {

        time0init();

        while(1)

        {

           keypress();

        }

    }

  • 相关阅读:
    Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
    和菜鸟一起学linux总线驱动之初识i2c驱动主要结构
    和菜鸟一起学linux之container_of实例
    和菜鸟一起学linux总线驱动之初识spi驱动主要结构
    和菜鸟一起学android4.0.3源码之按键驱动短长按功能
    和菜鸟一起学linux总线驱动之初识i2c总线协议
    程序溢出的基础和原理
    Network Information Detection程序作品+源代码
    Network Information Detection程序作品+源代码
    渗透asp后门源代码
  • 原文地址:https://www.cnblogs.com/luxiaolai/p/5209615.html
Copyright © 2011-2022 走看看