A. 51單片機4*3矩陣鍵盤6位密碼鎖c語言程序
#include<stdio.h>
#include<reg51.h>
#define uchar unsigned char
uchar key;
int i=0;
char b[4]={'0','0','0','0'};//輸入的密碼放這里和初始的比較來判斷是否密碼正確
void keyscan() //掃描按鍵是否按下
{
uchar temp;
P3=0xfe; //掃描第一行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0) //判斷按鍵是否按下
{
delayms(10);//去抖動
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)//確認按鍵按下
{
temp=P3;
switch(temp)
{
case 0xee:key='0';break;
case 0xde:key='1';break;
case 0xbe:key='2';break;
case 0x7e:key='3';break;
}
while(temp!=0xf0) //判斷按鍵是否松開
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
P3=0xfd; //掃描第二行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:key='4';break;
case 0xdd:key='5';break;
case 0xbd:key='6';break;
case 0x7d:key='7';break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
P3=0xfb; //掃描第三行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:key='8' ;break;
case 0xdb:key='9' ;break;
case 0xbb:key='A';break;
case 0x7b:key='B';break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
P3=0xf7; //掃描第四行
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:key='C';break;
case 0xd7:key='D';break;
case 0xb7:key='E';break;
case 0x77:key='F';break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
b[i]=key;i++;if(i==3)i=0;
}
}
}
main()
{
char a[4]={'3','5','A','C'}; //這個做初始密碼
while(1)//無限循環,保證了b 0-3 四個數有值
{
keyscan();
if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3])
{
//這里寫密碼正確程序要怎麼處理
}
}
}
B. 51系列單片機使用矩陣鍵盤時需要加上拉電阻嗎
如果你是低電平有效的話,那要接上拉電阻的,按鍵按下時輸入低電平,按鍵恢復後馬上由上拉電阻將輸入拉高置位,可以減小干擾
C. 51單片機矩陣鍵盤,所有按鍵一起識別的問題。
你理解按鍵的原理嗎,矩陣的原理嗎,並不是確定的,矩陣大概是這樣,拿4*4來說 4行鍵盤連接一組io的前高四位,4列鍵盤連接一組io的低四位,如果沒有前面的賦值,按下健以後每條io線都是高電平的,只有你先給行賦值0,這時候你來檢測列,只要按下了就通了,也就得到低電平
D. 51單片機程序,怎樣用矩陣鍵盤輸入數字
在網上搜索「十天學會AVR」視頻,裡面講解的很清楚,不過是用C語言,原理其實都是一樣的。
而且這種簡單的玩法,隨便找本單片機的書上都會有的。
最後推薦個網站吧,我就在這一步一步學會的www.ourdev.cn
E. 51單片機矩陣鍵盤輸入的值保存到一個數組了里並顯示出來最後再控制LED燈閃爍對應數值的次數
例如按下1、2、3,我可以令result=num[0]*100+num[1]*10+num[2],得到123。--每次怎麼可能按下 1、2、3 ?每次,只能按下一個。你把值保存到數組num[i]的一個元素中,再 i++。 i == 3,可令result=num[0]*100+num[1]*10+num[2],得到123。然後可以讀這些數進行計算。
F. 普中51單片機 矩陣鍵盤
你可以嘗試使用switch case語句代替if語句,這樣可以避免程序出現參差上的錯誤(不用套那麼多的if)
你可以嘗試把key置零總覺得你用table1【1】有點不大好
我也是新手,希望能幫到你
G. 求助程序: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]; //
}
}
H. 51單片機 如何4*4矩陣鍵盤輸入按鍵 繼電器輸出信號
這個原理挺簡單的,不過我也好久沒用了,具體的記得不是那麼清楚。
你拿本單片機的書(應該講原理的書的都可以),找到編碼鍵盤那塊,看一會就會了~~
基本原理:當你按鍵按下後,鍵盤程序進行行列掃描,就可以確定為哪一個按鍵,然後跳到相應的子程序(你這邊就是控制繼電器了)!
補充回答:
那你就進行相應的設置,開外部中斷等,然後就把下面的鍵盤和轉移程序放到中斷裡面(即一般情況時程序停在等待中斷處,當你中斷按鈕按下後,然後就進入子程序,等待你的鍵盤數字按鍵。。。)
I. 51單片機矩陣鍵盤輸入11位數字,賦值給一個變數
(1)用手指頭按下矩陣鍵盤的0~9數字鍵即可輸入數值。
(2)最後賦值到一個變數上
unsigned char const str1[]="最後";
unsigned char const* pt1=&str1[0];
這樣就把最後賦值到指針pt1上了
J. 51單片機矩陣鍵盤
第一個程序,在定時中斷函數中,延時,並不合適。
第二個程序,不穩定,還是按鍵檢測,太拖拉了。
4*4 矩陣鍵盤的檢測,不用寫這么多的程序。
我的網路空間裡面有實用的程序。