国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

單片機(jī)學(xué)習(xí)——矩陣鍵盤(自用)

2023-03-14 21:20 作者:huabi_fxz  | 我要投稿

原理及思路:

對(duì)于矩陣鍵盤,我們只能逐行掃描,然后讀取列的信號(hào)。

例如一個(gè)4x4的矩陣,應(yīng)對(duì)每一行分別賦0,然后掃描列的信號(hào),加入某一列中出現(xiàn)0,則為對(duì)應(yīng)行列的鍵盤被按下。此時(shí),應(yīng)定義一個(gè)全局變量,給矩陣行列上的每一個(gè)按鍵賦予一個(gè)獨(dú)立的號(hào)碼,當(dāng)掃描到某一行某一列的動(dòng)作后,把對(duì)應(yīng)的編號(hào)輸出,我們就知道哪個(gè)按鍵觸發(fā)了。

軟件部分:

#include "reg52.h"

unsigned char code SMG_duanma[18]=

{0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x88,0x80,

0xc6,0xc0,0x86,0x8e,0xbf,0x7f};

unsigned char key_num;


sfr P4=0xc0; //52單片機(jī)無P4位,則需定義P4的地址


sbit R1=P3^0;

sbit R2=P3^1;

sbit R3=P3^2;

sbit R4=P3^3;


sbit C4=P3^4;

sbit C3=P3^4;

sbit C2=P4^2;

sbit C1=P4^4;//分別定義C1-C4、R1-R4端的端口


void selectHC573(unsigned char n)

{

?switch(n)

?{

?case 4:

?P2=(P2&0x1f)|0x80;

?break;

?case 5:

?P2=(P2&0x1f)|0xa0;

?break;

?case 6:

?P2=(P2&0x1f)|0xc0;

?break;

?case 7:

?P2=(P2&0x1f)|0xe0;

?break;

}

}//通過138譯碼器選擇需要使用的寄存器


void displaykeynum(unsigned char value)

{

?selectHC573(6);

?P0=0x01;

?selectHC573(7);

?P0=value;

}


void scankey()

{

?R1=0;//掃描第一行

?R2=R3=R4=1;

?C1=C2=C3=C4=1;

?if(C1==0)//分別對(duì)第一行的第一二三四列進(jìn)行掃描

?{

?while(C1==0);

?key_num=0;//若c1為0則代表按下的鍵為C1R1,輸出代表C1R1的0值

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=1;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=2;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=3;

?displaykeynum(SMG_duanma[key_num]);

?}?


?R2=0;

?R1=R3=R4=1;

?C1=C2=C3=C4=1;

?if(C1==0)

?{

?while(C1==0);

?key_num=4;

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=5;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=6;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=7;

?displaykeynum(SMG_duanma[key_num]);

?}


?R3=0;

?R2=R1=R4=1;

?C1=C2=C3=C4=1;

?if(C1==0)

?{

?while(C1==0);

?key_num=8;

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=9;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=10;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=11;

?displaykeynum(SMG_duanma[key_num]);

?}


?R4=0;

?R2=R3=R1=1;

?C1=C2=C3=C4=1;

?if(C1==0)

?{

?while(C1==0);

?key_num=12;

?displaykeynum(SMG_duanma[key_num]);

?}

?else if(C2==0)

?{

?while(C2==0);

?key_num=13;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C3==0)

?{

?while(C3==0);

?key_num=14;

?displaykeynum(SMG_duanma[key_num]);

?}

?if(C4==0)

?{

?while(C4==0);

?key_num=15;

?displaykeynum(SMG_duanma[key_num]);

?}

}

void main()

{

while(1)

{

?scankey();

}

}

懂完了


單片機(jī)學(xué)習(xí)——矩陣鍵盤(自用)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
瓮安县| 华池县| 玛多县| 微山县| 安图县| 阿坝县| 岗巴县| 泸州市| 英山县| 平潭县| 通化市| 封丘县| 磐石市| 温宿县| 赤城县| 尼勒克县| 鄢陵县| 灌南县| 游戏| 长寿区| 庆云县| 运城市| 达孜县| 济宁市| 河西区| 阆中市| 凌源市| 漾濞| 夏津县| 嘉禾县| 安新县| 北流市| 乌拉特前旗| 博爱县| 邹城市| 义马市| 平舆县| 凤庆县| 芦山县| 斗六市| 凌源市|