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

51單片機鍵盤程序

發布時間:2023-04-24 20:39:47

『壹』 51單片機的4*4鍵盤輸入的編程

呵呵,自己寫的,可以根據你的引腳排布自己做適當修改,希望對你有幫助
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code num[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z);
main()
{
while(1)
{
P1=0xfe;
if(P1==0xee||P1==0xde||P1==0xbe||P1==0x7e)
delay(5);
if(P1==0xee||P1==0xde||P1==0xbe||P1==0x7e)
{
switch(P1)
{
case 0xee: P0=num[1]; break;
case 0xde: P0=num[2] ;break;
case 0xbe: P0= num[3];break;
case 0x7e: P0=num[4] ;break;
}
}
P1=0xfd;
if(P1==0xed||P1==0xdd||P1==0xbd||P1==0x7d)
delay(5);
if(P1==0xed||P1==0xdd||P1==0xbd||P1==0x7d)
{
switch(P1)
{
case 0xed: P0=num[5]; break;
case 0xdd: P0=num[6] ;break;
case 0xbd: P0= num[7];break;
case 0x7d: P0=num[8] ;break;
}
}
P1=0xfb;
if(P1==0xeb||P1==0xdb||P1==0xbb||P1==0x7b)
delay(5);
if(P1==0xeb||P1==0xdb||P1==0xbb||P1==0x7b)
{
switch(P1)
{
case 0xeb: P0=num[9]; break;
case 0xdb: P0=num[10] ;break;
case 0xbb: P0= num[11];break;
case 0x7b: P0=num[12] ;break;
}
}
P1=0xf7;
if(P1==0xe7||P1==0xd7||P1==0xb7||P1==0x77)
delay(5);
if(P1==0xe7||P1==0xd7||P1==0xb7||P1==0x77)
{
switch(P1)
{
case 0xe7: P0=num[13]; break;
case 0xd7: P0=num[14] ;break;
case 0xb7: P0= num[15];break;
case 0x77: P0=num[0] ;break;
}
}

}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

『貳』 51單片機矩陣鍵盤(c語言) 求大神啊~

uchar
KeyScan(void)
{
static
uchar
k=0;
//由於函數在調用結束時k值已返回給函數,k作為局部變數即可
/////////
uchar
Trg,Trg1,Trg2,Cont1,Cont2;
uchar
ReadData1,ReadData2;
/////////
P3=0x0f;
ReadData1=P3^0x0f;
Trg1=ReadData1&(ReadData1^Cont1);
//觸發鍵
Cont1=ReadData1;
//長按鍵
/////////
P3=0xf0;
ReadData2=P3^0xf0;
Trg2=ReadData2&(ReadData2^Cont2);
Cont2=ReadData2;
Trg=Trg1+Trg2;
////////
switch(Trg)
{
case
0x81:{k=1;break;}
case
0x41:{k=2;break;}
case
0x21:{k=3;break;}
case
0x11:{k=4;break;}
case
0x82:{k=5;break;}
case
0x42:{k=6;break;}
case
0x22:{k=7;break;}
case
0x12:{k=8;break;}
case
0x84:{k=9;break;}
case
0x44:{k=10;break;}
case
0x24:{k=11;break;}
case
0x14:{k=12;break;}
case
0x88:{k=13;break;}
case
0x48:{k=14;break;}
case
0x28:{k=15;break;}
case
0x18:{k=16;break;}
default:{k=0;break;}
}
return(k);
}
//在主函數裡面直接調用keyboard()函數,直接返回鍵值;
然後在數碼管顯示。
好好的研究下這個鍵盤程序,
這種方式很程序很精煉、簡單
絕對可以調出來。

『叄』 51單片機如何用一個按鍵控制一段程序的運行與停止

1、創建項目文件。

6、當按下一個按鍵時,關閉燈,整個程序運行,再按一次,程序停止。

『肆』 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])
{
//這里寫密碼正確程序要怎麼處理
}
}
}

『伍』 單片機51鍵盤程序:這段程序是怎麼掃描P0口的,能簡單解釋一下嗎

循環中,在低四位依次輸出零,高四位不為1111,就跳出循環。

在循環的後面扒豎,還要有其它語句,就可得出,按空毀鍵所在的,行列位斗此備置。

『陸』 求51單片機矩陣4*4鍵盤程序,P0口接一個數碼管,P3口接矩陣鍵盤,C語言的

#include<reg51.h>
unsigned char keyval,keynum=0;
unsigned char distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void t1isr() interrupt 3
{
unsigned char sccode,recode;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
P3=0x0f; //發0掃描,列線輸入
if ((P3 & 0x0f) != 0x0f)keynum++; //有鍵按下
else keynum=0;
if(keynum>5) //按鍵保持在5次中斷以上
{
keynum=0;
sccode = 0xef; //逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
getkey((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
getkey(0);
}
void getkey(unsigned char key)
{
if(key==0){keyval=0xff;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;
}
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyval!=0xff)P0=distab[keyval];
}

}

『柒』 51單片機1按鍵切換4種不同狀態的燈的c程序可以是正閃,反閃,多種間隔閃。

以下是一個簡單的51單片機程序,通過按下按鍵可以實現4種不同狀態的燈亮滅,包括正閃、反閃、多種間隔閃。程序中使用了定時器來實現閃爍功能。

程序中使用了P1.0到P1.3作為控制燈的引腳,P3.2作為按鍵的引腳。每當按下按鍵時,通過判斷狀態值悄攔悉來切換不同的燈亮滅模式衡首。定啟乎時器中斷函數用來實現燈的閃爍,可根據需求自行調整閃爍頻率。

編程不易,忘採納

『捌』 51單片機鍵盤編程 小弟一點也不懂,好心的大俠幫個忙!

JNZ K1,K11
JNZ K2 ,K22
JNZ K3,K33
JNZ K4,K44
K11: SETB P1.0
;延時一下
clr p1.0
其它的你就自己編了就是輸入幾個電平就是了

『玖』 51單片機獨立式按鍵程序

#include<reg52.h>
unsignedcharID;
sbitk1=P3^7;//定義按鍵埠
voiddelay()
{
TMOD=0x10;//定時器的工作方式
TH1=0xd8;
TL1=0xf0;
TR1=1;
while(!TF1);//這里錯了,是定時器1
TF1=0;
}
voidmain()
{
while(1)
{
if(k1==0)
{
delay();//去抖動
if(k1==0)//檢測按鍵確實按下,進行按鍵處理
{
ID++;
if(ID==0)
{
ID=0;
}
while(!k1);//這里錯了,多餘的加了==0
}
}
switch(ID)
{
case0:P1=0x3f;break;
case1:P1=0x06;break;
case2:P1=0x5b;break;
case3:P1=0x4f;break;
case4:P1=0x66;break;
case5:P1=0x6d;break;
case6:P1=0x7d;break;
case7:P1=0x07;break;
case8:P1=0x7f;break;
case9:P1=0x6f;break;
default:break;
}
}
}

『拾』 朋友們幫忙寫個51單片機的按鍵小程序匯編的

(1);P3.3小鍵盤清告按下P1.3亮再按0.5秒滅。
org 0000h
ajmp main0
org 0080h
MAIN0:
CLR 21H ;清標志
main:
mov c,p3.3 ;檢測按鍵
jc main
MOV R6,#200 ;設定延時
MOV R7,#200
TT0:
JNB 21H,TT2 ;檢測燈狀態
tt:
mov c,p3.3 ;檢測按鍵
jnc tt1

JNB 20H,MAIN ;檢測時間標志
CLR 20H
AJMP TT3
TT2:
mov c,p3.3 ;檢測按鍵
jnc tt2
TT3:
CPL 21H ;改變燈狀態
cpl p1.3
ajmp main
TT1: NOP ;延時但不是子程序
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TT
MOV R6,#200
DJNZ R7,TT
MOV R7,#200
SETB 20H
AJMP TT
end
(2)數碼管數據 p0,數碼管控制p2 獨立按鍵p1口 ,;對獨立鍵進行按鍵次數計數,三位數碼管顯示。 *
;K1按下後,進行加1計數 *
;K2按下後,進行減1計數。 *
;K3按下後,進行加5計岩正磨數。 *
;K4按下後,清計數單元,數碼管顯示0。 *
;按住鍵可以快速計數。
K1 BIT P1.4
K2 BIT P1.5
K3 BIT P1.6
K4 BIT P1.7
K_OLD EQU 30H
K_NEW EQU 31H
K_COUNT EQU 32H
DISSTART EQU 40H ;顯示單元首地址
LED_DATA EQU P0 ;數碼管數據口定粗斗義
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0080H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV K_COUNT,#00H
MAIN1:
CALL CONVT
CALL PLAY
CALL KEY_PROG
JMP MAIN1

KEY_PROG:
CALL K_SCAN ;鍵掃描
MOV A,K_NEW
CJNE A,K_OLD,KEY_P1
JMP KEY_P_END
KEY_P1:
MOV R4,#20
KEY_P2:
CALL CONVT ;用顯示程序來進行鍵延時
CALL PLAY
DJNZ R4,KEY_P2

CALL K_SCAN ;再判斷鍵是否按下
MOV A,K_NEW
CJNE A,K_OLD,KEY_P3
JMP KEY_P_END
KEY_P3:
JB ACC.0,LOOP1 ;K1按下
JB ACC.1,LOOP2 ;K2按下
JB ACC.2,LOOP3 ;K3按下
JB ACC.3,LOOP4 ;K4按下
JMP KEY_P_END
LOOP1:
INC K_COUNT ;鍵計數加1
JMP KEY_P_END
LOOP2:
DEC K_COUNT ;鍵計數減1
JMP KEY_P_END
LOOP3:
INC K_COUNT ;鍵計數加5
INC K_COUNT
INC K_COUNT
INC K_COUNT
INC K_COUNT
JMP KEY_P_END
LOOP4:
MOV K_COUNT,#00H ;鍵計數單元清零
KEY_P_END:
RET
;---------------------------------------------------------
;代碼變換 (HEX TO BCD)
;---------------------------------------------------------
CONVT:
MOV A,K_COUNT
MOV B,#100
DIV AB
MOV DISSTART+2,A ;百位存放在DISSTART+2
MOV A,#10
XCH A,B
DIV AB
MOV DISSTART+1,A ;十位存放在DISSTART+1
MOV DISSTART,B ;個位存放在DISSTART
RET
;---------------------------------------------------------
; 鍵掃描子程序
;---------------------------------------------------------
K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,P1
CPL A
ANL A,#0F0H
SWAP A
MOV K_NEW,A
RET
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY:
MOV R6,#200
DEL:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL
RET
;---------------------------------------------------------
PLAY:
MOV R0,#DISSTART ;獲得顯示單元首地址
MOV R1,#07FH ;從第一個數碼管開始
MOV R2,#03H ;共顯示3位數碼管
DISP1:
MOV A,@R0 ;獲得當前位地址
MOV DPTR,#TAB_NU ;獲得表頭
MOVC A,@A+DPTR ;查表獲得顯示數據
MOV LED_DATA,A ;顯示數據
MOV P2,R1 ;開始顯示當前位
MOV A,R1 ;准備顯示下一位
RR A
MOV R1,A ;下一位
INC R0 ;取下一個單元地址
LCALL DELAY2MS ;延時 2 MS
DJNZ R2,DISP1 ;重復顯示下一個
MOV P2,#0FFH ;關閉顯示
RET ;顯示完成,返回
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY2MS:
MOV R6,#10
DEL1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
TAB_NU:
db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代碼表
;**********************************************************
END

兩個例子我想夠你明白的了。詳細的解釋,代表性的例子,可慢慢學習

閱讀全文

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

熱點內容
程序員說有人愛你怎麼回答 瀏覽:102
騰訊游戲安卓怎麼用ios登錄 瀏覽:759
石獅雲存儲伺服器 瀏覽:180
python滲透入門到精通 瀏覽:272
如何真機調試安卓進程 瀏覽:739
農行app怎麼交公共維修基金 瀏覽:667
python中字典增加元素 瀏覽:240
伺服器端渲染的數據怎麼爬 瀏覽:163
壓縮空氣噴射器 瀏覽:488
python提高效率 瀏覽:796
華為文件管理怎麼樣輸入解壓碼 瀏覽:800
深思加密狗初始化 瀏覽:566
黃金崩潰pdf 瀏覽:310
華為特定簡訊息加密 瀏覽:375
微機原理與單片機技術李精華答案 瀏覽:816
pic12c508單片機 瀏覽:309
androidgps調用 瀏覽:226
金文編pdf 瀏覽:445
14乘87減147的簡便演算法 瀏覽:473
怎麼創建edu文件夾 瀏覽:723