導航:首頁 > 操作系統 > 單片機矩陣鍵盤程序

單片機矩陣鍵盤程序

發布時間:2022-01-12 23:35:15

㈠ 請教單片機矩陣鍵盤輸出5V電源的程序

用pwm來控制da0832的基準
但是這樣的話 那還要加個計量晶元來采樣

還有就是完全由硬體來控制了
DA0832是電流型的(如果我沒記錯的話)
可以通過配置電阻來改變輸出電壓

㈡ 51單片機矩陣鍵盤

第一個程序,在定時中斷函數中,延時,並不合適。

第二個程序,不穩定,還是按鍵檢測,太拖拉了。

4*4 矩陣鍵盤的檢測,不用寫這么多的程序。

我的網路空間裡面有實用的程序。

㈢ 單片機AT89C51矩陣鍵盤C語言程序

#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P2=0x0f; //發0掃描,列線輸入
if ((P2 & 0x0f) != 0x0f) //有鍵按下
{
delay(20); //延時去抖動
if ((P2&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行掃描初值
while((sccode&0x01)!=0)
{
P2=sccode;
if((P2&0x0f)!=0x0f)
{
recode=(P2&0x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //無鍵按下,返回0
}

void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0)return;
switch(key)
{
case 0x11:P1=distab[0];break;
case 0x12:P1=distab[1];break;
case 0x14:P1=distab[2];break;
case 0x18:P1=distab[3];break;
case 0x21:P1=distab[4];break;
case 0x22:P1=distab[5];break;
case 0x24:P1=distab[6];break;
case 0x28:P1=distab[7];break;
case 0x41:P1=distab[8];break;
case 0x42:P1=distab[9];break;
case 0x44:P1=distab[10];break;
case 0x48:P1=distab[11];break;
case 0x81:P1=distab[12];break;
case 0x82:P1=distab[13];break;
case 0x84:P1=distab[14];break;
case 0x88:P1=distab[15];break;
default:P1=distab[16];break;
}
}
main()
{
while(1)
{
getkey();
}
}

㈣ 求助程序:51單片機矩陣鍵盤是否按下檢測程序

/**************************************************************************************
* 矩陣按鍵實驗 *
實現現象:下載程序後數碼管顯示0,按下矩陣按鍵上的按鍵顯示對應的數字
S1-S4:0-3
S5-S8:4-7
S9-S12:8-B
S13-S16:C-F。
注意事項:如果不想讓點陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。
***************************************************************************************/
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16; //對數據類型進行聲明定義
typedef unsigned char u8;
#define GPIO_DIG P0
#define GPIO_KEY P1
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 KeyValue; //用來存放讀取到的鍵值
u8 code smgan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
/*******************************************************************************
* 函 數 名 : delay
* 函數功能 : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 數 名 : KeyDown
* 函數功能 : 檢測有按鍵按下並讀取鍵值
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
{
delay(1000);//延時10ms進行消抖
if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
{
//測試列
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;
}
//測試行
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)) //檢測按鍵鬆手檢測
{
delay(1000);
a++;
}
}
}
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
LSA=0; //給一個數碼管提供位選
LSB=0;
LSC=0;
while(1)
{
KeyDown(); //按鍵判斷函數
GPIO_DIG=smgan[KeyValue]; //
}
}

㈤ 51單片機程序,怎樣用矩陣鍵盤輸入數字

這完全是編程的問題,也就是採集到按鍵信息後程序怎樣處理數據的問題

㈥ 89c51單片機4*4矩陣鍵盤編程。

PANDUAN: MOV P1,#0FFH
CLR P1.4
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ SW1
LCALL DELAY10MS
JZ SW1//確認有鍵按下,但不知道哪個,此時可以之間讓蜂鳴器叫
MOV P3.0,#1//蜂鳴器發聲(賦1還是賦0取決你用的蜂鳴器)
MOV A,P1
ANL A,#0FH
CJNE A,#0EH,K1
MOV COUNT,#0
LJMP DK
K1: CJNE A,#0DH,K2
MOV COUNT,#4
LJMP DK
K2: CJNE A,#0BH,K3
MOV COUNT,#8
LJMP DK
K3: CJNE A,#07H,K4
MOV COUNT,#12
K4: NOP
LJMP DK
SW1: MOV P1,#0FFH
CLR P1.5
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ SW2
LCALL DELAY10MS
JZ SW2
MOV P3.0,#1
MOV A,P1
ANL A,#0FH
CJNE A,#0EH,K5
MOV COUNT,#1
LJMP DK
K5: CJNE A,#0DH,K6
MOV COUNT,#5
LJMP DK
K6: CJNE A,#0BH,K7
MOV COUNT,#9
LJMP DK
K7: CJNE A,#07H,K8
MOV COUNT,#13
K8: NOP
LJMP DK
SW2: MOV P1,#0FFH
CLR P1.6
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ SW3
LCALL DELAY10MS
JZ SW3
MOV P3.0,#1
MOV A,P1
ANL A,#0FH
CJNE A,#0EH,K9
MOV COUNT,#2
LJMP DK
K9: CJNE A,#0DH,KA
MOV COUNT,#6
LJMP DK
KA: CJNE A,#0BH,KB
MOV COUNT,#10
LJMP DK
KB: CJNE A,#07H,KC
MOV COUNT,#14
KC: NOP
LJMP DK
SW3: MOV P1,#0FFH
CLR P1.7
MOV A,P1
ANL A,#0FH
XRL A,#0FH
JZ SW4
LCALL DELAY10MS
JZ SW4
MOV P3.0,#1
MOV A,P1
ANL A,#0FH
CJNE A,#0EH,KD
MOV COUNT,#3
LJMP DK
KD: CJNE A,#0DH,KE
MOV COUNT,#7
LJMP DK
KE: CJNE A,#0BH,KF
MOV COUNT,#11
LJMP DK
KF: CJNE A,#07H,KG
MOV COUNT,#15
KG: NOP
LJMP DK
SW4: LJMP PANDUAN
DK: RET

㈦ 單片機矩陣鍵盤掃描程序

P3=0x7f;
temp=P3;
temp的值是實時的P3口的值,還是等於0x7f?
temp 的值,是 P3 外部引腳輸入的值。
具體是何值?取決於 P3 外接的電路。
如果 P3 外面,八個引腳,都接地,那麼:
temp 就是 0000 0000。

㈧ 單片機中獨立鍵盤和矩陣鍵盤如何一起使用 請用C語言寫個程序說明,謝謝。

這個很好處理呀,比如以下舉例,獨立+矩陣,實現獨立按鍵相當於類似SHIFT作用的效果。
#include<reg51.h>
#define uchar unsigned char
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0到f
uchar keyval,num;
sbit skey=P1^0; //獨立鍵P1.0
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<125;j++);
}
uchar kbscan(void) //矩陣鍵掃描程序
{
unsigned char sccode,recode;
P3=0x0f; //發0掃描,列線輸入
if ((P3 & 0x0f) != 0x0f) //有鍵按下
{
delay(20); //延時去抖動
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//等待鍵抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //無鍵按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0)
{
return;
}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
//以下處理獨立按鍵
if(skey==0)
{
if(keyval!=0xff)keyval+=16; //如果獨立鍵按下,鍵值加16
while(skey==0); //等待獨立鍵釋放
}
}
void t0isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
switch(num)
{
case 0:P2=0x01;break;
case 1:P2=0x02;break;
case 2:P2=0x04;break;
case 3:P2=0x08;break;
default:break;
}
if(keyval<16) P0=~tab[keyval]; //獨立鍵未按正常顯示
else P0=~(tab[keyval]|0x80); //獨立鍵按下顯示+DP
num++;
num&=0x03;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
}
}

㈨ 單片機矩陣鍵盤5*5的c語言程序

4*4跟5*5的基本類似的
對著5*5改下就好了
一般可以橫向和縱向兩個角度來看,一個硬體調向,橫向會用一個IO口,縱向會用一個IO口,兩個循環,你依樣化葫蘆,稍改改下就可以了。。
隨便給你一個軟體,其實並不是是你想向的,這個要根據硬體聯接定的。。
一般主要是根據聯接的IO口選擇、選通電平的高低,會不一樣的,你要根本這些情況變化的,至於4*4跟5*5邏輯基本是一樣的,只要會寫代碼,那基本就沒 有問題了

閱讀全文

與單片機矩陣鍵盤程序相關的資料

熱點內容
怎樣把qq收藏下載到文件夾 瀏覽:160
linux命令批量執行 瀏覽:307
android天氣app 瀏覽:797
程序員有多忙 瀏覽:561
pdf轉線稿 瀏覽:446
linux壓縮打包目錄 瀏覽:892
刷卡機加密錯誤什麼原因 瀏覽:780
手機桌面不顯示軟體如何卸載app 瀏覽:488
編譯原理教程習題分析 瀏覽:375
國際版mc為什麼會顯示無法與伺服器連接 瀏覽:869
怎麼將文件壓縮並改名 瀏覽:586
電腦如何創建伺服器地址 瀏覽:444
jarlinux解壓命令 瀏覽:571
安徽比雞麻將源碼 瀏覽:63
python公司自動辦公 瀏覽:667
如何出租mc伺服器 瀏覽:612
微商授權查詢系統源碼 瀏覽:980
安卓什麼情況沒法建立新工程 瀏覽:219
氣球解壓社區活動 瀏覽:924
話費會員充值源碼 瀏覽:319