在一些單片機系統中,有時候需要采用一些一鍵多功能的技術,這里我給大家介紹一下。開關SP1接在P3.7/RD管腳上,在AT89S51單片機的P1端口接有四個發光二極管,上電的時候,L1接在P1.0管腳上的發光二極管在閃爍,當每一次按下開關SP1的時候,L2接在P1.1管腳上的發光二極管在閃爍,再按下開關SP1的時候,L3接在P1.2管腳上的發光二極管在閃爍,再按下開關SP1的時候,L4接在P1.3管腳上的發光二極管在閃爍,再按下開關SP1的時候,又輪到L1在閃爍了,如此輪流下去。這樣就實現了具有一鍵多功能的按鍵識別技術。簡單吧
單片機系統板上硬件連線
把“單片機系統”區域中的P3.7/RD端口連接到“獨立式鍵盤”區域中的SP1端口上把“單片機系統”區域中的P1.0-P1.4端口用8芯排線連接到“八路發光二極管指示模塊”區域中的“L1-L8”端口上;要求,P1.0連接到L1,P1.1連接到L2,P1.2連接到L3,P1.3連接到L4上。具體的電路圖在單片機論壇http://www.365buyu.cn51區上有。歡迎發表您的高見。本文為郭子喻先生原創作品希望大家支持。
匯編源程序
ID EQU 30H
SP1 BIT P3.7
L1 BIT P1.0
L2 BIT P1.1
L3 BIT P1.2
L4 BIT P1.3
ORG 0
MOV ID,#00H
START: JB K1,REL
LCALL DELAY10MS
JB K1,REL
INC ID
MOV A,ID
CJNE A,#04,REL
MOV ID,#00H
REL: JNB K1,$
MOV A,ID
CJNE A,#00H,IS0
CPL L1
LCALL DELAY
SJMP START
IS0: CJNE A,#01H,IS1
CPL L2
LCALL DELAY
SJMP START
IS1: CJNE A,#02H,IS2
CPL L3
LCALL DELAY
SJMP START
IS2: CJNE A,#03H,IS3
CPL L4
LCALL DELAY
SJMP START
IS3: LJMP START
DELAY10MS: MOV R6,#20
LOOP1: MOV R7,#248
DJNZ R7,$
DJNZ R6,LOOP1
RET
DELAY: MOV R5,#20
LOOP2: LCALL DELAY10MS
DJNZ R5,LOOP2
RET
END
7.C語言源程序
#include <AT89X51.H>
unsigned char ID;
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void delay02s(void)
{
unsigned char i;
for(i=20;i>0;i--)
{delay10ms();
}
}
void main(void)
{ while(1)
{ if(P3_7==0)
{delay10ms();
if(P3_7==0)
{
ID++;
if(ID==4)
{
ID=0;
}
while(P3_7==0);
}
}
switch(ID)
{ case 0:
P1_0=~P1_0;
delay02s();
break;
case 1:
P1_1=~P1_1;
delay02s();
break;
case 2:
P1_2=~P1_2;
delay02s();
break;
case 3:
P1_3=~P1_3;
delay02s();
break;
}
}
轉載請保留51黑鏈接!