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

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

QQ登錄

只需一步,快速開(kāi)始

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

關(guān)于單片機(jī)矩陣鍵盤(pán)控制16路led

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:994989 發(fā)表于 2021-12-23 13:42 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
400黑幣

研究了好幾天研究不出來(lái),自己0基礎(chǔ)想研究呢,看了教程程序也寫(xiě)上就是實(shí)現(xiàn)不了, 運(yùn)行環(huán)境就是5V+ -開(kāi)關(guān)控制通路 cd4067想通過(guò)矩陣按鍵控制16路接通某一路,或者加上一個(gè)cd4067
就是矩陣按鍵控制兩條路同時(shí)接通。

求大神指導(dǎo)一下

最佳答案

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

使用道具 舉報(bào)

沙發(fā)
ID:332444 發(fā)表于 2021-12-23 13:42 | 只看該作者
看我帖子里面
回復(fù)

使用道具 舉報(bào)

板凳
ID:994989 發(fā)表于 2021-12-23 13:44 | 只看該作者
單刀16擲開(kāi)關(guān)4067,矩陣鍵盤(pán)1-16按鍵,按下對(duì)應(yīng)的鍵位通對(duì)應(yīng)的通路
回復(fù)

使用道具 舉報(bào)

地板
ID:301191 發(fā)表于 2021-12-27 04:47 | 只看該作者
頂一下
回復(fù)

使用道具 舉報(bào)

5#
ID:332444 發(fā)表于 2021-12-27 06:03 | 只看該作者
太簡(jiǎn)單了以致于都不想回復(fù),16個(gè)按鍵值對(duì)應(yīng)16個(gè)LED亮,看我博客矩陣鍵盤(pán)定義的值為0-15,把0-15+1送給P2的端口,不過(guò)電路圖引腳接法要改一下,X0-3要對(duì)應(yīng)P20-3,電路圖只接2個(gè)引腳是不夠的。
回復(fù)

使用道具 舉報(bào)

6#
ID:332444 發(fā)表于 2021-12-27 07:20 | 只看該作者

太簡(jiǎn)單了以致于都不想回復(fù),16個(gè)按鍵值對(duì)應(yīng)16個(gè)LED亮,看我博客矩陣鍵盤(pán)定義的值為0-15,把0-15+1送給P2的端口,不過(guò)電路圖引腳接法要改一下,X0-3要對(duì)應(yīng)P20-3,電路圖只接2個(gè)引腳是不夠的。如果亮相反的話,可以把值取反送P2。
回復(fù)

使用道具 舉報(bào)

7#
ID:965189 發(fā)表于 2021-12-27 09:01 | 只看該作者
一個(gè)按鍵對(duì)應(yīng)一個(gè)LED,這是最簡(jiǎn)單的程序。
回復(fù)

使用道具 舉報(bào)

8#
ID:303778 發(fā)表于 2021-12-27 09:28 | 只看該作者
兩條一個(gè)數(shù)組
回復(fù)

使用道具 舉報(bào)

9#
ID:993066 發(fā)表于 2021-12-27 10:21 | 只看該作者
,真是太簡(jiǎn)單。。。給你一個(gè)例子自己看看吧
                                                                                  
**************************************************************************************

*/
#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

typedef unsigned int u16;          //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;

#define GPIO_DIG P0
#define GPIO_KEY P1


u8 KeyValue;        //用來(lái)存放讀取到的鍵值


u8 code smgduan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                        0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//顯示0~F的值

/*******************************************************************************
* 函 數(shù) 名         : delay
* 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函 數(shù) 名         : KeyDown
* 函數(shù)功能                   : 檢測(cè)有按鍵按下并讀取鍵值
* 輸    入         : 無(wú)
* 輸    出         : 無(wú)
*******************************************************************************/
void KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
        {
                delay(1000);//延時(shí)10ms進(jìn)行消抖
                if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤(pán)是否按下
                {       
                        //測(cè)試列
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        //測(cè)試行
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                       
                }
        }
        while((a<50)&&(GPIO_KEY!=0xf0))         //檢測(cè)按鍵松手檢測(cè)
        {
                delay(100);
                a++;
        }
}


/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能                 : 主函數(shù)
* 輸    入       : 無(wú)
* 輸    出             : 無(wú)
*******************************************************************************/
void main()
{       

        while(1)
        {       
                KeyDown();                   //按鍵判斷函數(shù)
                GPIO_DIG=~smgduan[KeyValue];          //
        }               
}
回復(fù)

使用道具 舉報(bào)

10#
ID:57657 發(fā)表于 2021-12-27 10:45 | 只看該作者
你的程序是否需要識(shí)別多按鍵同時(shí)按下? 加了4067就不行了。
回復(fù)

使用道具 舉報(bào)

11#
ID:332444 發(fā)表于 2021-12-27 12:52 | 只看該作者



回復(fù)

使用道具 舉報(bào)

12#
ID:213173 發(fā)表于 2021-12-27 22:32 | 只看該作者
樓主這個(gè)電路沒(méi)有多少實(shí)際意義。矩陣鍵盤(pán)通過(guò)MCU直接控制16個(gè)端口驅(qū)動(dòng)LED更合理。不過(guò)用這個(gè)方式練練手也未嘗不可。給你一個(gè)示例參考。

  1. #include <reg51.H>
  2. #define uint unsigned int                 //宏定義無(wú)符號(hào)整型數(shù)據(jù)
  3. #define uchar unsigned char         //宏定義無(wú)符號(hào)字符型數(shù)據(jù)

  4. uchar key=16;                                        //定義鍵值全局變量

  5. void keyscan()                                        //按鍵掃描程序
  6. {
  7.         static bit sign=0;                        //按鍵自鎖標(biāo)志
  8.         static uint count=0;                //消抖計(jì)數(shù)變量                       
  9.         uchar num=0;                                //臨時(shí)變量
  10.         P1=0xf0;                                        //賦值P1 1111 0000
  11.         if(P1!=0xf0)                                //檢測(cè)有按鍵按下
  12.         {
  13.                 count++;                                //消抖計(jì)數(shù)
  14.                 if((count>=250)&&(sign==0))        //100~1000,根據(jù)主循環(huán)周期調(diào)整約10~20ms
  15.                 {                       
  16.                         sign=1;                                //按鍵自鎖標(biāo)志置1
  17.                         num=P1;                                //保存P1值xxxx 0000,x為0或1
  18.                         num|=0x0f;                        //保存num按位或0x0f值xxxx 1111
  19.                         P1=num;                                //賦值P1 xxxx 1111
  20.                         switch(P1)
  21.                         {
  22.                                 case 0xee: key= 0; break;
  23.                                 case 0xde: key= 1; break;
  24.                                 case 0xbe: key= 2; break;
  25.                                 case 0x7e: key= 3; break;
  26.                                 case 0xed: key= 4; break;
  27.                                 case 0xdd: key= 5; break;
  28.                                 case 0xbd: key= 6; break;
  29.                                 case 0x7d: key= 7; break;
  30.                                 case 0xeb: key= 8; break;
  31.                                 case 0xdb: key= 9; break;
  32.                                 case 0xbb: key=10; break;
  33.                                 case 0x7b: key=11; break;
  34.                                 case 0xe7: key=12; break;
  35.                                 case 0xd7: key=13; break;
  36.                                 case 0xb7: key=14; break;
  37.                                 case 0x77: key=15; break;
  38.                         }
  39.                 }
  40.         }
  41.         else                                                //鍵抬起
  42.         {
  43.                 sign=0;                                        //按鍵自鎖標(biāo)志清0
  44.                 count=0;                                //消抖計(jì)數(shù)清0
  45.         }
  46. }

  47. void main()                                                //主函數(shù)
  48. {
  49.         while(1)
  50.         {
  51.                 keyscan();                                //按鍵掃描程序
  52.                 if(key==16)
  53.                         P2=0x40;                                //燈全滅
  54.                 else P2=0xb0|key;                //按鍵值點(diǎn)亮
  55.         }
  56. }
復(fù)制代碼




評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级片成人 | 国产精品欧美一区二区三区不卡 | 久久国 | 免费黄色录像视频 | 91香蕉嫩草| 国产剧情久久 | 91在线精品视频 | 精品免费看 | 亚洲综合网站 | 欧美一区二区三区免费电影 | 国产在线观看一区 | 91在线看片| 黄色一级大片在线免费看产 | 国产乱码精品一区二区三区五月婷 | 成年人精品视频 | 国产特级毛片 | 巨大黑人极品videos精品 | 一区二区日韩精品 | 欧美成人一区二区三区 | 日本精品一区二区三区视频 | 性色综合 | 国产片网站 | 午夜a v电影 | 亚洲第一av | 午夜久久久久久久久久一区二区 | 波多野结衣一区二区 | 国产精品99久久久精品免费观看 | 亚洲国产成人av | 女同久久另类99精品国产 | 久久99久久98精品免观看软件 | 久久精品国产一区二区三区不卡 | 日韩在线三级 | 日韩精品成人在线 | 91操操操 | 国产精品色综合 | 嫩草研究影院 | 欧美激情一区二区 | 中文字幕在线观看www | 日本一区二区三区在线观看 | 久草网站 | 久久之精品 |