《單片機(jī)應(yīng)用技術(shù) 》中職配套PPT課件,單片機(jī)應(yīng)用技術(shù) ,《單片機(jī)應(yīng)用技術(shù),》中職配套PPT課件,單片機(jī),應(yīng)用技術(shù),配套,PPT,課件
一鍵多功能按鍵識別技術(shù)
1.實(shí)驗(yàn)任務(wù)
如圖1所示,開關(guān)SP1接在P3.7/RD管腳上,在AT89S51單片機(jī)的P1端口接有四個發(fā)光二極管,上電的時候,L1接在P1.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開關(guān)SP1的時候,L2接在P1.1管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,L3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,L4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時候,又輪到L1在閃爍了,如此輪流下去。
2.電路原理圖
圖1
3.系統(tǒng)板上硬件連線
(1). 把“單片機(jī)系統(tǒng)”區(qū)域中的P3.7/RD端口連接到“獨(dú)立式鍵盤”
區(qū)域中的SP1端口上;(2). 把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0-P1.4端口用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的“L1-L8”端口上;要求,P1.0連接到L1,P1.1連接到L2,P1.2連接到L3,P1.3連接到L4上。
4. 程序設(shè)計(jì)方法
(1). 設(shè)計(jì)思想
由來在我們生活中,我們很容易通過這個叫張三,那個叫李四,另外一個是王五;那是因?yàn)槊總€人有不同的名子,我們就很快認(rèn)出,同樣,對于要通過一個按鍵來識別每種不同的功能,我們給每個不同的功能模塊用不同的ID號標(biāo)識,這樣,每按下一次按鍵,ID的值是不相同的,所以單片機(jī)就很容易識別不同功能的身份了。
(2). 設(shè)計(jì)方法
從上面的要求我們可以看出,L1到L4發(fā)光二極管在每個時刻的閃爍的時間是受開關(guān)SP1來控制,我們給L1到L4閃爍的時段定義出不同的ID號,當(dāng)L1在閃爍時,ID=0;當(dāng)L2在閃爍時,ID=1;當(dāng)L3在閃爍時,ID=2;當(dāng)L4在閃爍時,ID=3;很顯然,只要每次按下開關(guān)K1時,分別給出不同的ID號我們就能夠完成上面的任務(wù)了。下面給出有關(guān)程序設(shè)計(jì)的框圖。
5.程序框圖
如圖2所示。
圖2
6. 匯編源程序 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
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; } } }