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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2232|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32單片機(jī)矩陣按鍵程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:949309 發(fā)表于 2022-4-28 15:55 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
/************************************************************
正面朝上黑引腳為行,白引腳為列
A、B 、C 、D  分別返回 10 11 12 13
*為 14
#為 15
0為 16
無按鍵按下返回0
*************************************************************/

#include "key.h"
#include "delay.h"
//矩陣鍵盤引腳初始化         
void delayMs(u8 t)
{
        while(t--)
        {
                delay_ms(20);
        }
}
void KEY_init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);//使能PORTB,PORTD,PORTG時(shí)鐘
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;                        //鍵盤輸出
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
        GPIO_Init(GPIOF,&GPIO_InitStructure);
        
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;                       //鍵盤輸入
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;   //輸入模式
        
        GPIO_Init(GPIOF,&GPIO_InitStructure);
}




//mode:0,不支持連續(xù)按;1,支持連續(xù)按;
u8 KEY_Scan(u8 mode)
{
        static u8 key0_up=1;//按鍵按松開標(biāo)志
        static u8 key1_up=1;//按鍵按松開標(biāo)志
        static u8 key2_up=1;//按鍵按松開標(biāo)志
        static u8 key3_up=1;//按鍵按松開標(biāo)志
        static u8 key4_up=1;//按鍵按松開標(biāo)志
        static u8 key5_up=1;//按鍵按松開標(biāo)志
        static u8 key6_up=1;//按鍵按松開標(biāo)志
        static u8 key7_up=1;//按鍵按松開標(biāo)志
        static u8 key8_up=1;//按鍵按松開標(biāo)志
        static u8 key9_up=1;//按鍵按松開標(biāo)志
        static u8 keyA_up=1;//按鍵按松開標(biāo)志
        static u8 keyB_up=1;//按鍵按松開標(biāo)志
        static u8 keyC_up=1;//按鍵按松開標(biāo)志
        static u8 keyD_up=1;//按鍵按松開標(biāo)志
        static u8 keyX_up=1;//按鍵按松開標(biāo)志
        static u8 keyJ_up=1;//按鍵按松開標(biāo)志
        
        if(mode)
        {
                        key0_up=1;
                        key1_up=1;
                        key2_up=1;
                        key3_up=1;
                        key4_up=1;
                        key5_up=1;
                        key6_up=1;
                        key7_up=1;
                        key8_up=1;
                        key9_up=1;
                        keyA_up=1;
                        keyB_up=1;
                        keyC_up=1;
                        keyD_up=1;
                        keyX_up=1;
                        keyJ_up=1;        
        }
        
    //第一行
        Hang_00_L;//把第一行輸出低電平
        Hang_01_H;
        Hang_02_H;
        Hang_03_H;
                if(key1_up&&Lie_00_V==0)
                {   
                   delayMs(jpys); //延時(shí)20秒,軟件消抖
                        
                   key1_up=0;
                   if(Lie_00_V==0) //如果第一列是低電平,說明有鍵被按下,如果沒有直接退出if語句
                   {
                           return 1;
                   }
                }else if(Lie_00_V==1)key1_up=1;
         
                if(key2_up&&Lie_01_V==0)//如果第二列是低電平,
                {   
                   delayMs(jpys);//延時(shí)20秒,軟件消抖
                   key2_up=0;
                   if(Lie_01_V==0)//如果第二列是低電平,說明有鍵被按下,如果沒有直接退出if語句
                   {
                          return 2;
                   }
                }else if(Lie_01_V==1)key2_up=1;
         
                if(key3_up&&Lie_02_V==0)
                {   
                   delayMs(jpys);
                   key3_up=0;
                   if(Lie_02_V==0)
                   {
                          return 3;
                   }
                }else if(Lie_02_V==1)key3_up=1;
         
                if(keyA_up&&Lie_03_V==0)//如果第四列是低電平
                {   
                   delayMs(jpys);
                   keyA_up=0;
                   if(Lie_03_V==0)//如果第四列是低電平,說明有鍵被按下,如果沒有直接退出if語句
                   {
                          return 4;
                   }
                }else if(Lie_03_V==1)keyA_up=1;

        //第二行
        Hang_00_H;
        Hang_01_L;//把第二行拉低
        Hang_02_H;
        Hang_03_H;
                if(key4_up&&Lie_00_V==0)//如果第一列是低電平
                {   
                   delayMs(jpys);
                   key4_up=0;
                   if(Lie_00_V==0)//說明有鍵被按下,如果沒有直接退出if語句
                   {
                                return 5;
                   }
                }else if(Lie_00_V==1)key4_up=1;
                 
                if(key5_up&&Lie_01_V==0)
                {   
                   delayMs(jpys);
                   key5_up=0;
                   if(Lie_01_V==0)
                   {
                       return 6;
                   }
                }else if(Lie_01_V==1)key5_up=1;
                 
                if(key6_up&&Lie_02_V==0)
                {   
                   delayMs(jpys);
                   key6_up=0;
                   if(Lie_02_V==0)
                   {
                           return 7;
                   }
                }else if(Lie_02_V==1)key6_up=1;
                 
                if(keyB_up&&Lie_03_V==0)
                {   
                   delayMs(jpys);
                   keyB_up=0;
                   if(Lie_03_V==0)
                   {
                       return 8;  
                   }
                }else if(Lie_03_V==1)keyB_up=1;

        //第三行
        Hang_00_H;
        Hang_01_H;
        Hang_02_L;//把第三行置低
        Hang_03_H;
                if(key7_up&&Lie_00_V==0) //如果第一列是低電平
                {   
                   delayMs(jpys);//延時(shí)20秒
                   key7_up=0;
                   if(Lie_00_V==0)//說明有鍵被按下,如果沒有直接退出if語句
                   {
                           return 9;
                   }
                }else if(Lie_00_V==1)key7_up=1;
                 
                if(key8_up&&Lie_01_V==0)
                {   
                   delayMs(jpys);
                   key8_up=0;
                   if(Lie_01_V==0)
                   {
                       return 10;
                   }
                }else if(Lie_01_V==1)key8_up=1;
                 
                if(key9_up&&Lie_02_V==0)
                {   
                   delayMs(jpys);
                   key9_up=0;
                   if(Lie_02_V==0)
                   {
                       return 11;
                   }
                }else if(Lie_02_V==1)key9_up=1;
                 
                if(keyC_up&&Lie_03_V==0)
                {   
                   delayMs(jpys);
                   keyC_up=0;
                   if(Lie_03_V==0)
                   {
                       return 12;
                   }
                }else if(Lie_03_V==1)keyC_up=1;

        //第四行
        Hang_00_H;
        Hang_01_H;
        Hang_02_H;
        Hang_03_L;//把第四行置低
                if(keyX_up&&Lie_00_V==0)//如果第一列是低電平
                {   
                   delayMs(jpys);
                   keyX_up=0;
                   if(Lie_00_V==0)//說明有鍵被按下,如果沒有直接退出if語句
                   {
                       return 13;
                   }
                }else if(Lie_00_V==1)keyX_up=1;
                 
                if(key0_up&&Lie_01_V==0)
                {   
                   delayMs(10);
                   key0_up=0;
                   if(Lie_01_V==0)
                   {
                       return 14;
                   }
                }else if(Lie_01_V==1)key0_up=1;
                 
                if(keyJ_up&&Lie_02_V==0)//如果第三列是低電平
                {   
                   delayMs(jpys);
                   keyJ_up=0;
                   if(Lie_02_V==0)//說明有鍵被按下,如果沒有直接退出if語句
                   {
                       return 15;
                   }
                }else if(Lie_02_V==1)keyJ_up=1;
                 
                if(keyD_up&&Lie_03_V==0)
                {   
                   delayMs(jpys);
                   keyD_up=0;
                   if(Lie_03_V==0)
                   {
                       return 16;
                   }
                }else if(Lie_03_V==1)keyD_up=1;
               
                return 0;
}

Keil代碼下載: 矩陣按鍵程序.7z (224.45 KB, 下載次數(shù): 38)

評(píng)分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 嫩草视频入口 | 亚洲第一视频网站 | 成人精品视频 | 免费国产视频在线观看 | 99re在线观看 | 亚洲欧洲精品一区 | 国产不卡在线播放 | 日韩视频三区 | 日日操日日舔 | 久久一区二区精品 | 欧美九九九 | 一区二区视屏 | 999久久久久久久久6666 | 亚洲欧美激情国产综合久久久 | 久久婷婷国产香蕉 | 国产精品五区 | 日韩三级电影一区二区 | 国产精品精品 | 日韩一级免费大片 | 日韩精品在线看 | av特级毛片 | 亚洲视频免费在线观看 | 一区二区三区在线观看免费视频 | 亚洲美女视频 | 成人在线精品 | 亚洲精品一区二区三区四区高清 | 亚洲国产成人av好男人在线观看 | 午夜在线影院 | 亚洲欧洲国产视频 | 日韩在线视频免费观看 | 黑人一级黄色大片 | 亚洲免费视频播放 | 性天堂网 | 国产精品美女久久久久久免费 | 青青久久 | 成人综合视频在线观看 | 91精品久久久久久久久久 | 久久精品一区二区三区四区 | 国产高清视频在线播放 | 色资源av| 国产精品日本一区二区不卡视频 |