久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> STM32 >> 瀏覽文章

Stm32 鍵盤掃描程序分析

作者:huqin   來源:本站原創   點擊數:  更新時間:2014年04月26日   【字體:

我們知道在51單片機中,通過掃描某個口的電平高低得知那個按鍵按下,比如,控制兩行4列,假如讓P1=0xCf;低位都置1 pb0-pb3),pb4-pb50;然后我們就掃描P1口就行了,如果有按鍵被按下的,高電平會被強制拉低的。

假如按鍵返回的值為0xce,可知是pb0被拉低了,由此可判斷是S1或者S2按下了,其他的同理。

當然只讓P1=0xcf,是不能判斷出具體的按鍵是哪個的,此時,如果我們取反既P1=0x30;

當按鍵返回值為0x10時,我們可得知01 0000pb5=0s1或者s2被按下,這個時候我們將0xce|0x10=0xde,就是唯一的值了。以此類推,得出其他的值來。

stm32中是同樣的大道理;

uint8_t KeyScan(void)

{

    uint8_t HangValue = 0;

    uint8_t LieValue  = 0;

    uint16_t KeyValue  = 0;

    uint8_t Tmp =0;

    static uint8_t KeyConter = 0;

   

    GPIO_SetBits(Colum1.port, (Colum1.pin|Colum2.pin|Colum3.pin|Colum4.pin));         

    GPIO_ResetBits(Line1.port,(Line1.pin|Line2.pin));

 Tmp = GPIO_ReadInputData(Line1.port);

    if ((Tmp&0x0F) != 0x0F)

    {

        if (KeyConter < 1)

        {//去抖

            KeyConter++;

       }

       else

                 

              HangValue = Tmp&0x0f;     

 

                            GPIO_ResetBits(Colum1.port, (Colum1.pin|Colum2.pin|Colum3.pin|Colum4.pin));  

            GPIO_SetBits(Line1.port,(Line1.pin|Line2.pin));

           Tmp = GPIO_ReadInputData(Colum1.port);

            LieValue = Tmp&0x30;

             KeyValue = (HangValue)|LieValue;

 if (KeyValue)// KeyValue^KeyValueBkp

                          

                KeyValueBkp = KeyValue;

                switch (KeyValue)

                {

                                                                   

          //      case KEY_10:    return KEY_NUM_0;//16;----0

                case KEY_01:    return KEY_NUM_1;//3;-----1

                case KEY_02:    return KEY_NUM_2;//4;-----2

                case KEY_03:    return KEY_NUM_3;//5;-----3               

                case KEY_04:    return KEY_NUM_4;//7;-----4

                case KEY_05:    return KEY_NUM_5;//8;-----5

                case KEY_06:    return KEY_NUM_6;//9;-----6               

                case KEY_07:    return KEY_NUM_7;//11----7

                case KEY_08:    return KEY_NUM_8;//------8

                default:

                    return 0;

                             

            }

            else

            {

                return 0;

            }

        }

    }

    else

    {

        KeyConter = 0;  //計數清零

        KeyValueBkp = 0;

    

   

    return 0;

}

 

 

 

 

typedef struct

{

    GPIO_TypeDef        *port;

    uint16_t    pin;

}Matrix_t;

 

 

//const Matrix_t Colum1 = {GPIOD, GPIO_PIN_2};

//const Matrix_t Colum2 = {GPIOD, GPIO_PIN_3};

//const Matrix_t Colum3 = {GPIOD, GPIO_PIN_4};

const Matrix_t Colum1 = {GPIOB, GPIO_Pin_0};

const Matrix_t Colum2 = {GPIOB, GPIO_Pin_1};

const Matrix_t Colum3 = {GPIOB, GPIO_Pin_2};

const Matrix_t Colum4 = {GPIOB, GPIO_Pin_3};

 

const Matrix_t Line1  = {GPIOB, GPIO_Pin_4};

const Matrix_t Line2  = {GPIOB, GPIO_Pin_5};

#define KEY_01 0x1e

#define KEY_02 0x2e

#define KEY_03 0x1d

#define KEY_04 0x2d

#define KEY_05 0x1b

#define KEY_06 0x2b

#define KEY_07 0x17

#define KEY_08 0x27

關閉窗口

相關文章

主站蜘蛛池模板: 欧美精品久久久久久久久老牛影院 | 亚洲第一成年免费网站 | 国产精品成人av | 日韩精品久久一区 | 范冰冰一级做a爰片久久毛片 | 精品96久久久久久中文字幕无 | 99视频网| 国产成人精品一区二区 | 欧美日韩一区二区三区视频 | 亚洲欧美激情网 | 国产人成精品一区二区三 | 一区二区三区亚洲精品国 | 国产精品久久久久久久一区二区 | 黄色片网此 | 成年人黄色免费视频 | 亚洲欧美一区二区三区1000 | 污视频在线免费观看 | 91视频入口 | 亚洲在线免费观看 | 欧洲毛片 | 国产欧美在线视频 | 成人高清在线视频 | 懂色av蜜桃av| 日本人做爰大片免费观看一老师 | 精品国产18久久久久久二百 | 天天综合永久 | 亚洲久草视频 | 亚洲高清视频一区 | 99精品国产一区二区三区 | 久久国产日韩欧美 | 性视频一区 | 精品久久久精品 | 日本在线黄色 | 久久精品国产一区二区电影 | 国产激情在线看 | 亚洲精品国产一区 | 亚洲一二三在线观看 | 99re热精品视频国产免费 | 日韩精品成人 | 成人不卡视频 | www视频在线观看 |