




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、MCS 51單片機(jī)應(yīng)用程序?qū)嵗?007年10月25日 工控吧-多路開關(guān)狀態(tài)指示1. 實(shí)驗(yàn)任務(wù)如下圖,AT89S51單片機(jī)的一接四個(gè)發(fā)光二極管 L1- L4,一接了四個(gè)開關(guān)K1- K4, 編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上.(開關(guān)閉合,對(duì)應(yīng)的燈亮,開關(guān)斷開,對(duì)應(yīng)的燈滅).2. 電路原理圖圖3. 系統(tǒng)板上硬件連線(1.把“單片機(jī)系統(tǒng)區(qū)域中的一用導(dǎo)線連接到“八路發(fā)光二極管指示模塊區(qū)域中的L1 L4端口上;(2.把“單片機(jī)系統(tǒng)區(qū)域中的一用導(dǎo)線連接到“四路撥動(dòng)開關(guān)區(qū)域中的K1-K4端口上;4. 程序設(shè)計(jì)內(nèi)容(1.開關(guān)狀態(tài)檢測(cè)對(duì)丁開關(guān)狀態(tài)檢測(cè),相對(duì)單片機(jī)來說,是輸入關(guān)系,我們可輪流檢測(cè)每個(gè)開關(guān)狀態(tài), 根據(jù)
2、每個(gè)開關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JB , RE或JNB , REL指令來完成;也可以一次性檢測(cè)四路開關(guān)狀態(tài),然后讓其指示,可以采用MOV A,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高 4位的狀態(tài)來指示.(2.輸出限制根據(jù)開關(guān)的狀態(tài),由發(fā)光二極管 L1- L4來指示,我們可以用SETB和CLR指令來 完成,也可以采用 MOV P1, #1111XXXX由法一次指示.5. 程序流程讀P1 口數(shù)據(jù)到A CC中A CC內(nèi)容右移4次A CC內(nèi)容與F0H相或A CC內(nèi)容送入P1 口6. 方法一匯編源程序ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR AR
3、R ARR AXOR A,#0F0HMOV P1,ASJMP STARTEND7. 方法一C語言源程序#includeunsigned char temp;void mainvoidwhile1temp=P1>>4;temp=temp | 0xf0;P1=temp;8. 方法二匯編源程序ORG 00HSTART: JB ,NEXT1CLRSJMP NEX1NEXT1: SETBNEX1: JB ,NEXT2CLRSJMP NEX2NEXT2: SETBNEX2: JB ,NEXT3CLRSJMP NEX3NEXT3: SETBNEX3: JB ,NEXT4CLRSJMP NEX4N
4、EXT4: SETBNEX4: SJMP STARTEND9. 方法二(C語言源程序)#includevoid main(void)while(1)if(P1_4=0)P1_0=0;elseP1_0=1;if(P1_5=0)P1_1=0;elseP1_1=1;if(P1_6=0)P1_2=0;elseP1_2=1;if(P1_7=0)P1_3=0;else( P1_3=1;廣告燈的左移右移1. 實(shí)驗(yàn)任務(wù)做單一燈的左移右移,硬件電路如下圖,八個(gè)發(fā)光二極管L1- L8分別接在單片機(jī)的一接口上,輸出“ 0時(shí),發(fā)光二極管亮,開始時(shí)TTTT-TTT-T亮,重復(fù) 循環(huán).2. 電路原理圖圖3. 系統(tǒng)板上硬件
5、連線把“單片機(jī)系統(tǒng)區(qū)域中的-用 8芯排線連接到“八路發(fā)光二極管指示模塊區(qū)域 中的L1 L8端口上,要求:對(duì)應(yīng)著 L1,對(duì)應(yīng)著L2, ,對(duì)應(yīng)著L8.4. 程序設(shè)計(jì)內(nèi)容我們可以運(yùn)用輸出端口指令 MOV P1, A或MOV P1, # DATA只要給累加器值或常 數(shù)值,然后執(zhí)行上述的指令,即可到達(dá)輸出限制的動(dòng)作.每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表 1所示說明L8L7L6L5L4L3L2L111111110L1是11111101L2是11111011L3是11110111L4是11101111L5亮11011111L6亮10111111L7是01111111L8是5. 程序框圖圖6. 匯編源程序O
6、RG 0START: MOV R2,#8 MOV A,#0FEH SETB CLOOP: MOV P1,A LCALL DELAY RLC ADJNZ R2,LOOP MOV R2,#8LOOP1: MOV P1,A LCALL DELAYRRC ADJNZ R2,LOOP1 LJMP STARTDELAY: MOV R5,#20 ; D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2DJNZ R5,D1 RETEND7. C語言源程序 #includeunsigned char i; unsigned char temp; unsigned
7、 char a,b;void delay(void) unsigned char m,n,s; for(m=20;m>0;m-) for(n=20;n>0;n-) for(s=248;s>0;s-);void main(void)(while(1)(temp=0xfe;P1=temp;delay();for(i=1;i<8;i+)(a=temp<b=temp>>(8-i);P1=a|b;delay();for(i=1;i<8;i+)(a=temp>>i;b=temp<<(8-i);P1=a|b;delay();一鍵多功能按
8、鍵識(shí)別技術(shù)1. 實(shí)驗(yàn)任務(wù)如下圖,開關(guān)SP1接在RD管腳上,在AT89S51單片機(jī)的P1端口接有四個(gè)發(fā)光二極 管,上電的時(shí)候,L1接在管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開關(guān)SP1的時(shí)候,L2接在管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時(shí)候,L3接在管腳上的發(fā)光二極管在閃爍,再按下開關(guān) SP1的時(shí)候,L4接在管腳上的發(fā)光二極管在閃爍, 再按下開關(guān)SP1的時(shí)候,乂輪到L1在閃爍了,如此輪流下去.2. 電路原理圖圖3. 系統(tǒng)板上硬件連線(1.把“單片機(jī)系統(tǒng)區(qū)域中的 RD端口連接到“獨(dú)立式鍵盤區(qū)域中的 SP1端口(2.把“單片機(jī)系統(tǒng)區(qū)域中的一端口用 8芯排線連接到“八路發(fā)光二極管指示模 塊區(qū)域中
9、的“ L1 L8端口上;要求,連接到L1,連接到L2,連接到L3,連接到 L4上.4. 程序設(shè)計(jì)方法(1.設(shè)計(jì)思想由來在我們生活中,我們很容易通過這個(gè)叫張三,那個(gè)叫李四, 另外一個(gè)是王五;那是因 為每個(gè)人有不同的名子,我們就很快認(rèn)出,同樣,對(duì)丁要通過一個(gè)按鍵來識(shí)別每種不 同的功能,我們給每個(gè)不同的功能模塊用不同的ID號(hào)標(biāo)識(shí),這樣,每按下一次按鍵, ID的值是不相同的,所以單片機(jī)就很容易識(shí)別不同功能的身份了.(2.設(shè)計(jì)方法從上面的要求我們可以看出,L1到L4發(fā)光二極管在每個(gè)時(shí)刻的閃爍的時(shí)間是受開關(guān) SP1來限制,我們給L1到L4閃爍的時(shí)段定義出不同的ID號(hào),當(dāng)L1在閃爍時(shí),ID = 0;當(dāng)L2在
10、閃爍時(shí),ID = 1;當(dāng)L3在閃爍時(shí),ID = 2;當(dāng)L4在閃爍時(shí),ID = 3;很顯 然,只要每次按下開關(guān)K1時(shí),分別給出不同的ID號(hào)我們就能夠完成上面的任務(wù)了. 下面給出有關(guān)程序設(shè)計(jì)的框圖.5. 程序框圖圖6. 匯編源程序ID EQU 30HSP1 BIT P3.7L1 BIT P1.0L2 BIT P1.1L3 BIT P1.2L4 BITORG 0MOV ID,#00HSTART: JB K1,RELLCALL DELAY10MSJB K1,RELINC IDMOV A,IDCJNE A,#04,RELMOV ID,#00HREL: JNB K1,$MOV A,IDCJNE A,#00
11、H,IS0CPL L1LCALL DELAY SJMP STARTIS0: CJNE A,#01H,IS1CPL L2LCALL DELAY SJMP START IS1: CJNE A,#02H,IS2 CPL L3LCALL DELAYSJMP STARTIS2: CJNE A,#03H,IS3CPL L4LCALL DELAYSJMP STARTIS3: LJMP START DELAY10MS: MOV R6,#20 LOOP1: MOV R7,#248 DJNZ R7,$DJNZ R6,LOOP1RETDELAY: MOV R5,#20LOOP2: LCALL DELAY10MSDJ
12、NZ R5,LOOP2 RETEND7. 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(
13、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;4X4矩陣式鍵盤識(shí)別技術(shù)1. 實(shí)驗(yàn)任務(wù)如圖4.14.2所示,用AT89S51的并行口 P1接4X4矩陣鍵盤,以一作輸入線,以一 作輸出線;在數(shù)碼管上顯示每個(gè)按鍵的“ 0 F序號(hào).對(duì)應(yīng)的按鍵的序號(hào)排列如圖所 示圖2. 硬件電路原理圖圖3. 系統(tǒng)板上硬件連線(1.把“單片機(jī)系統(tǒng)“區(qū)域中的一端口用 8芯排線連接到“ 4X4
14、行列式鍵盤區(qū)域 中的C1 C4 R1-R4端口上;(2.把“單片機(jī)系統(tǒng)區(qū)域中的 ADAAD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼 顯示模塊區(qū)域中的任一個(gè) a-h端口上;要求:AD0對(duì)應(yīng)著a, AD1對(duì)應(yīng)著b, AD7對(duì)應(yīng)著h04. 程序設(shè)計(jì)內(nèi)容(1. 4X4矩陣鍵盤識(shí)別處理(2.每個(gè)按鍵有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼. 矩陣的行線和列線分別通過兩并行接口和 CPL®信.每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字 量“0和“1,開關(guān)的一端(列線)通過電阻接 VCC而接地是通過程序輸出數(shù)字“0實(shí)現(xiàn)的.鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個(gè)鍵按下,鍵的 功能是什么;還要
15、消除按鍵在閉合或斷開時(shí)的抖動(dòng). 兩個(gè)并行口中,一個(gè)輸出掃描碼, 使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成 鍵編碼而識(shí)別按鍵,通過軟件查表,查出該鍵的功能.5. 程序框圖圖6. 匯編源程序KEYBUF EQU 30HORG 00HSTART: MOV KEYBUF,#2WAIT:MOV P3,#0FFH CLR MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 MOV A,P3 ANL A,#0FH CJNE A,#0E
16、H,NK1 MOV KEYBUF,#0 LJMP DK1NK1: CJNE A,#0DH,NK2 MOV KEYBUF,#1 LJMP DK1NK2: CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1NK3: CJNE A,#07H,NK4 MOV KEYBUF,#3 LJMP DK1 NK4: NOP DK1:MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,ADK1A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK1A NOKEY1: MOV P3,#0FFH CLR MOV A,P
17、3 ANL A,#0FH XRL A,#0FH JZ NOKEY2LCALL DELY10MSMOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK5 MOV KEYBUF,#4 LJMP DK2 NK5: CJNE A,#0DH,NK6 MOV KEYBUF,#5 LJMP DK2 NK6: CJNE A,#0BH,NK7 MOV KEYBUF,#6 LJMP DK2 NK7: CJNE A,#07H,NK8 MOV KEYBUF,#7 LJMP DK2 NK8: NOP DK2: MOV A,K
18、EYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,ADK2A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK2A NOKEY2: MOV P3,#0FFH CLR MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK9MOV KEYBUF,#8LJMP DK3NK9: CJNE A,#0DH,NK10MOV KEYBUF,
19、#9LJMP DK3NK10: CJNE A,#0BH,NK11MOV KEYBUF,#10LJMP DK3NK11: CJNE A,#07H,NK12MOV KEYBUF,#11LJMP DK3NK12: NOPDK3:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ADK3A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK3ANOKEY3:MOV P3,#0FFHCLRMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0
20、FHJZ NOKEY4MOV A,P3ANL A,#0FHCJNE A,#0EH,NK13MOV KEYBUF,#12LJMP DK4NK13: CJNE A,#0DH,NK14MOV KEYBUF,#13LJMP DK4NK14: CJNE A,#0BH,NK15MOV KEYBUF,#14LJMP DK4NK15: CJNE A,#07H,NK16MOV KEYBUF,#15LJMP DK4NK16: NOPDK4:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ADK4A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK
21、4ANOKEY4:LJMP WAITDELY10MS:MOV R6,#10D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HEND7. C語言源程序#includeunsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char temp;unsigne
22、d char key;unsigned char i,j;void main(void)while(1)P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f; if (temp!=0x0f) (for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3;temp=temp & 0x0f; if (temp!=0x0f) (temp=P3; temp=temp & 0x0f; switch(temp) (case 0x0e:key=7; break;case 0x0d: key=8;break;case 0
23、x0b: key=9;break;case 0x07: key=10;break;temp=P3;P1_0=P1_0;P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) (temp=P3; temp=temp & 0x0f;P3=0xff;P3_5=0;temp=P3;temp=temp & 0x0f; if (temp!=0x0f) (for(i=50;i>0;i-) for(j=200;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) (temp=
24、P3; temp=temp & 0x0f; switch(temp) (case 0x0e:key=4; break;case 0x0d:key=5; break;case 0x0b:key=6; break;case 0x07: key=11;break;temp=P3;P1_0=P1_0;P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) (temp=P3; temp=temp & 0x0f;P3=0xff;P3_6=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f)(for(i
25、=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp & 0x0f; if (temp!=0x0f) (temp=P3;temp=temp & 0x0f; switch(temp) (case 0x0e: key=1;break;case 0x0d:key=2; break; case 0x0b:key=3; break;case 0x07: key=12;break;temp=P3;P1_0=P1_0;P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f) (temp=P3;
26、 temp=temp & 0x0f; P3=0xff;P3_7=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f)(for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp & 0x0f; if (temp!=0x0f) (temp=P3;temp=temp & 0x0f;switch(temp)(case 0x0e:key=0;break;case 0x0d:key=13;break;case 0x0b:key=14;break;case 0x07:key=15;bre
27、ak;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0x0f;while(temp!=0x0f)(temp=P3;temp=temp & 0x0f;報(bào)警產(chǎn)生器1 .實(shí)驗(yàn)任務(wù)用輸出1KHz和500Hz的音頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器,作報(bào)警信號(hào),要求1KHz信號(hào)響100ms 500Hz信號(hào)響200ms,交替進(jìn)行,接一開關(guān)進(jìn)行限制,當(dāng)開關(guān)合上響報(bào)警信號(hào),當(dāng)開關(guān) 斷開告警信號(hào)停止,編出程序.2. 電路原理圖圖3. 系統(tǒng)板上硬件連線(1.把“單片機(jī)系統(tǒng)區(qū)域中的端口用導(dǎo)線連接到“音頻放大模塊區(qū)域中的 SP IN端口上;(2.在“音頻放大模塊區(qū)域中的 SPK OU
28、榆口上接上一個(gè)8歐的或者是16歐的 喇叭;(3.把“單片機(jī)系統(tǒng)區(qū)域中的 RD端口用導(dǎo)線連接到“四路撥動(dòng)開關(guān)區(qū)域中的K1端口上;4. 程序設(shè)計(jì)內(nèi)容(1.信號(hào)產(chǎn)生的方法500Hz信號(hào)周期為2ms信號(hào)電平為每1ms變反1次,1KHz的信號(hào)周期為1m§信號(hào) 電平每500us變反1次;5. 程序框圖圖6. 匯編源程序FLAG BIT 00HORG 00HSTART: JB ,STARTJNB FLAG,NEXTMOV R2,#200DV: CPLLCALL DELY500LCALL DELY500DJNZ R2,DVCPL FLAGNEXT: MOV R2,#200DV1: CPLLCALL
29、DELY500DJNZ R2,DV1CPL FLAGSJMP STARTDELY500: MOV R7,#250LOOP: NOPDJNZ R7,LOOPRETEND7. C語言源程序#include#includebit flag;unsigned char count;void dely500(void)unsigned char i;for(i=250;i>0;i-)_nop_();void main(void)while(1)if(P1_7=0)for(count=200;count>0;count-)P1_0=P1_0;dely500();for(count=200;co
30、unt>0;count-)P1_0=P1_0;dely500();dely500();簡(jiǎn)易電子琴系統(tǒng)的制作1 .實(shí)驗(yàn)任務(wù)1.由4X4組成16個(gè)按鈕矩陣,設(shè)計(jì)成16個(gè)音2.可隨意彈奏想要表達(dá)的音樂.2. 電路原理圖圖3. 系統(tǒng)板硬件連線1.把“單片機(jī)系統(tǒng)區(qū)域中的端口用導(dǎo)線連接到“音頻放大模塊區(qū)域中的SPIN端口上;2.把“單片機(jī)系統(tǒng)“區(qū)域中的一端口用 8芯排線連接到“ 4X4行列式鍵盤區(qū)域 中的C1 C4 R1-R4端口上;4. 相關(guān)程序內(nèi)容1. 4X4行列式鍵盤識(shí)別;2.音樂產(chǎn)生的方法;一首音樂是許多不同的音階組成的, 而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以 利用不同的頻率的組合,即
31、可構(gòu)成我們所想要的音樂了,當(dāng)然對(duì)丁單片機(jī)來產(chǎn)生不同 的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來產(chǎn)生這樣方波頻率信號(hào), 因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可.現(xiàn)在以單片機(jī) 12MHZ 晶振為例,例出高中低音符與單片機(jī)計(jì)數(shù) T0相關(guān)的計(jì)數(shù)值如下表所示音符頻率HZ簡(jiǎn)譜碼T值音符頻率HZ簡(jiǎn)譜碼T值低1 DO26263628# 4 FA#74064860#1 DO#低2 RE2772946373163835中5 SO# 5 SO#7848316489864934#2 RE#31163928中6 LA88064968低3 M33064021# 693264994低4 FA349
32、64103中7 SI98865030# 4 FA#37064185高1 DO104665058低5 SO39264260# 1 DO#110965085# 5 SO#41564331高2 RE117565110低6 LA44064400# 2 RE#124565134# 646664463Hj 3 M131865157低7 SI49464524高4 FA139765178中1 DO52364580# 4 FA#148065198# 1 DO#55464633高5 SO156865217中2 RE58764684# 5 SO#166165235# 2 RE#62264732高6 LA176065
33、252中3 M65964777# 6186565268中4 FA69864820高7 SI196765283下面我們要為這個(gè)音符建立一個(gè)表格,有助丁單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù) 據(jù)低音0- 19之間,中音在20-39之間,高音在40-59之間TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0DW 0,63731,63928,0,64185,64331,64463,0,0,0DW 0,64580,64684,64777,64820,64898,64968,65030,0,0DW 0,64633,64732,0,64860,64
34、934,64994,0,0,0DW 0,65058,65110,65157,65178,65217,65252,65283,0,0DW 0,65085,65134,0,65198,65235,65268,0,0,0DW 02、音樂的音拍,一個(gè)節(jié)拍為單位C調(diào)曲調(diào)值 1DELAY曲調(diào)值DELAY調(diào)4/4125ms調(diào)4/462ms調(diào)3/4187ms調(diào)3/494ms調(diào)2/4250ms調(diào)2/4125ms對(duì)丁不同的曲調(diào)我們也可以用單片機(jī)的另外一個(gè)定時(shí)/計(jì)數(shù)器來完成下面就用AT89S51單片機(jī)產(chǎn)生一首“生日快樂歌曲來說明單片機(jī)如何產(chǎn)生的.在這個(gè)程序中用到了兩個(gè)定時(shí)/計(jì)數(shù)器來完成的.其中T0用來產(chǎn)生音符頻率,
35、T1用 來產(chǎn)生音拍.5. 程序框圖6. 匯編源程序KEYBUF EQU 30HSTH0 EQU 31HSTL0 EQU 32HTEMP EQU 33HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV TMOD,#01HSETB ET0SETB EAWAIT:MOV P3,#0FFHCLRMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1MOV KEYBUF,#0L
36、JMP DK1NK1: CJNE A,#0DH,NK2MOV KEYBUF,#1LJMP DK1NK2: CJNE A,#0BH,NK3MOV KEYBUF,#2LJMP DK1NK3: CJNE A,#07H,NK4MOV KEYBUF,#3LJMP DK1NK4: NOPDK1:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,#TABLE1 MOVC A,A+DPTRMOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP
37、 MOVC A,A+DPTR MOV STL0,A MOV TL0,A SETB TR0DK1A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK1A CLR TR0NOKEY1:MOV P3,#0FFH CLRMOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 MOV A,P3 ANL A,#0FHCJNE A,#0EH,NK5 MOV KEYBUF,#4 LJMP DK2NK5: CJNE A,#0DH,NK6 MOV K
38、EYBUF,#5 LJMP DK2NK6: CJNE A,#0BH,NK7 MOV KEYBUF,#6 LJMP DK2NK7: CJNE A,#07H,NK8MOV KEYBUF,#7LJMP DK2NK8: NOPDK2:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,A+DPTRMOV STL0,AMOV TL0,ASETB
39、TR0DK2A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK2A CLR TR0 NOKEY2: MOV P3,#0FFHCLRMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 MOV A,P3 ANL A,#0FHCJNE A,#0EH,NK9MOV KEYBUF,#8LJMP DK3NK9: CJNE A,#0DH,NK10MOV KEYBUF,#9LJMP DK3NK10: CJNE A,#0BH,NK11MOV KEY
40、BUF,#10LJMP DK3NK11: CJNE A,#07H,NK12MOV KEYBUF,#11LJMP DK3NK12: NOPDK3:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK3A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ
41、DK3ACLR TR0NOKEY3:MOV P3,#0FFHCLRMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4MOV A,P3ANL A,#0FHCJNE A,#0EH,NK13MOV KEYBUF,#12LJMP DK4NK13: CJNE A,#0DH,NK14MOV KEYBUF,#13LJMP DK4NK14: CJNE A,#0BH,NK15MOV KEYBUF,#14LJMP DK4NK15: CJNE A,#07H,NK16MOV KEYBUF,#1
42、5LJMP DK4NK16: NOPDK4:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,KEYBUFMOV B,#2MUL ABMOV TEMP,AMOV DPTR,#TABLE1MOVC A,A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK4A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK4ACLR TR0NOKEY4:LJMP WAITDELY10MS:MOV R6,#10D1:
43、MOV R7,#248DJNZ R7,$DJNZ R6,D1RETINT_T0:MOV TH0,STH0MOV TL0,STL0CPLRETITABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71HTABLE1: DW 64021,64103,64260,64400DW 64524,64580,64684,64777DW 64820,64898,64968,65030DW 65058,65110,65157,65178END7. C語言源程序#includeunsigned char code tab
44、le=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char temp;unsigned char key;unsigned char i,j;unsigned char STH0;unsigned char STL0;unsigned int code tab=64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178;void main(void)TMOD=0x01;ET0=1;EA=1;while(1)(P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if (temp!=0x0f)(for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp & 0x0f;if (temp!=0x0f)(temp=P3;temp=temp & 0x0f;switch(temp)(case 0x0e:key=0;break;case 0x0d:key=1;break;case 0x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCMA 0059-2018工程機(jī)械產(chǎn)品銷售代理合同簽約操作指南
- T/CCAS 007-2019水泥產(chǎn)能核定標(biāo)準(zhǔn)
- T/CATEA 005-2023丘陵坡地甘蔗機(jī)械化收獲技術(shù)規(guī)程
- T/CAQP 002-2017汽車零部件倉儲(chǔ)信息追溯編碼規(guī)范
- T/CAQI 66-2019車載空氣凈化器
- T/CAQI 315-2023山區(qū)多級(jí)一體化供水泵站技術(shù)規(guī)范
- T/CAQI 200-2021小型清潔生物質(zhì)采暖爐具
- 2024年度江蘇省二級(jí)建造師之二建礦業(yè)工程實(shí)務(wù)模擬試題(含答案)
- 爾雅茶藝考試題及答案
- 火龍罐療法經(jīng)典課件
- 關(guān)于長(zhǎng)城的簡(jiǎn)介資料200字
- 評(píng)標(biāo)自動(dòng)計(jì)算表(區(qū)間復(fù)合平均價(jià)法)
- 2023年匹茲堡睡眠質(zhì)量指數(shù)量表
- 綠化苗木自產(chǎn)自銷證明
- 精神科藥物不良反應(yīng)及處理課件
- 手術(shù)室護(hù)理實(shí)踐指南側(cè)臥位的擺放
- 當(dāng)HR遇見AI:用人工智能重新定義人力資源管理
- 物流客戶服務(wù)試卷doc資料
- 2003奧迪a8原廠維修手冊(cè)帶電路圖自學(xué)
- 砂卡井的處理方法
評(píng)論
0/150
提交評(píng)論