![單片機(jī)實(shí)例匯編語(yǔ)言整體_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/30/78b17f75-f366-4ecf-8cff-e6f69e2c7159/78b17f75-f366-4ecf-8cff-e6f69e2c71591.gif)
![單片機(jī)實(shí)例匯編語(yǔ)言整體_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/30/78b17f75-f366-4ecf-8cff-e6f69e2c7159/78b17f75-f366-4ecf-8cff-e6f69e2c71592.gif)
![單片機(jī)實(shí)例匯編語(yǔ)言整體_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/30/78b17f75-f366-4ecf-8cff-e6f69e2c7159/78b17f75-f366-4ecf-8cff-e6f69e2c71593.gif)
![單片機(jī)實(shí)例匯編語(yǔ)言整體_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/30/78b17f75-f366-4ecf-8cff-e6f69e2c7159/78b17f75-f366-4ecf-8cff-e6f69e2c71594.gif)
![單片機(jī)實(shí)例匯編語(yǔ)言整體_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/30/78b17f75-f366-4ecf-8cff-e6f69e2c7159/78b17f75-f366-4ecf-8cff-e6f69e2c71595.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、13 動(dòng)態(tài)數(shù)碼顯示技術(shù)1 實(shí)驗(yàn)任務(wù)如圖 4.13.1 所示,P0 端口接動(dòng)態(tài)數(shù)碼管的字形碼筆段,P2 端口接動(dòng)態(tài)數(shù)碼管的數(shù)位選擇端,P1.7 接一個(gè)開(kāi)關(guān),當(dāng)開(kāi)關(guān)接高時(shí),顯示“12345”字樣;當(dāng)開(kāi)關(guān)接低時(shí),顯示“HELLO”字樣。2電路原理圖圖 4.13.13系統(tǒng)板上硬件連線(xiàn)(1 把“單片機(jī)系統(tǒng)”區(qū)域中的 P0.0/AD0P0.7/AD7 用 8 芯排線(xiàn)連接到“動(dòng)態(tài)數(shù)碼顯示”區(qū)域中的 ah 端口上;(2 把“單片機(jī)系統(tǒng)”區(qū)域中的 P2.0/A8P2.7/A15 用 8 芯排線(xiàn)連接到“動(dòng)態(tài)數(shù)碼顯示”區(qū)域中的 S1S8 端口上;(3 把“單片機(jī)系統(tǒng)”區(qū)域中的 P1.7 端口用導(dǎo)線(xiàn)連接到“ 中的 S
2、P1 端口上;式鍵盤(pán)”區(qū)域4 程序設(shè)計(jì)內(nèi)容(1 動(dòng)態(tài)掃描方法動(dòng)態(tài)接口采用各數(shù)碼管循環(huán)輪流顯示的方法,當(dāng)循環(huán)顯示頻率較高時(shí),利用人眼的暫留特性,看不出閃爍顯示現(xiàn)象,這種顯示需要一個(gè)接口完成字形碼的輸出(字形選擇),另一接口完成各數(shù)碼管的輪流點(diǎn)亮(數(shù)位選擇)。(2 在進(jìn)行數(shù)碼顯示的時(shí)候,要對(duì)顯示單元開(kāi)辟 8 個(gè)顯示緩沖區(qū),每個(gè)顯示緩沖區(qū)裝有顯示的不同數(shù)據(jù)即可。(3 對(duì)于顯示的字形碼數(shù)據(jù)我們采用查表方法來(lái)完成。5程序框圖圖 4.13.26 匯編源程序ORG 00HSTART: JB P1.7,DIR1 MOV DPTR,#TABLE1 SJMP DIRDIR1: MOV DPTR,#TABLE2 D
3、IR: MOV R0,#00HMOV R1,#01H NEXT: MOV A,R0 MOVC A,A+DPTRMOV MOV MOVP0,A A,R1 P2,ALCALL DAY INC R0RL AMOV R1,ACJNE SJMP DAY:R1,#0DFH,NEXT STARTMOV R6,#4D1: MOV R7,#248 DJNZ R7,$DJNZ R6,D1 RETTABLE1: DB 06H,5BH,4FH,66H,6DH TABLE2: DB 78H,79H,38H,38H,3FH END7 C 語(yǔ)言源程序#include<AT89X51.H>unsigned uns
4、igned unsigned unsigned unsignedchar char char char charcode table1=0x06,0x5b,0x4f,0x66,0x6d; code table2=0x78,0x79,0x38,0x38,0x3f; i;a,b; temp;void main(void)while(1)temp=0xfe; for(i=0;i<5;i+) if(P1_7=1)P0=table1i;elseP0=table2i;P2=temp; a=temp<<(i+1); b=temp>>(7-i); temp=a|b;for(a=4
5、;a>0;a-)for(b=248;b>0;b-);14 4×4 矩陣式鍵盤(pán)識(shí)別技術(shù)1 實(shí)驗(yàn)任務(wù)如圖 4.14.2 所示,用 AT89S51 的并行口 P1 接 4×4 矩陣鍵盤(pán),以 P1.0P1.3 作輸入線(xiàn),以 P1.4P1.7 作輸出線(xiàn);在數(shù)碼管上顯示每個(gè)按鍵的“0F”序號(hào)。對(duì)應(yīng)的按鍵的序號(hào)排列如圖 4.14.1 所示圖 4.14.12硬件電路原理圖圖 4.14.23系統(tǒng)板上硬件連線(xiàn)(1 把“單片機(jī)系統(tǒng)“區(qū)域中的 P3.0P3.7 端口用 8 芯排線(xiàn)連接到“4X4 行列式鍵盤(pán)”區(qū)域中的 C1C4R1R4 端口上;(2 把“單片機(jī)系統(tǒng)”區(qū)域中的 P0.0/A
6、D0P0.7/AD7 端口用 8 芯排線(xiàn)連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè) ah 端口上;要求:P0.0/AD0對(duì)應(yīng)著 a,P0.1/AD1 對(duì)應(yīng)著 b,P0.7/AD7 對(duì)應(yīng)著 h。4 程序設(shè)計(jì)內(nèi)容(1 4×4 矩陣鍵盤(pán)識(shí)別處理(2 每個(gè)按鍵有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線(xiàn)和列線(xiàn)分別通過(guò)兩并行接口和 CPU 通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開(kāi)關(guān)的一端(列線(xiàn))通過(guò)電阻接 VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤(pán)處理程序的任務(wù)是:確定有無(wú)鍵按下,哪一個(gè)鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩
7、個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表,查出該鍵的功能。5 程序框圖圖 4.14.36 匯編源程序KEYBUF EQU 30H ORG 00HSTART: MOV KEYBUF,#2 WAIT:MOV CLR MOV ANL XRLP3,#0FFH P3.4 A,P3 A,#0FH A,#0FHJZ NOKEY1 LCALL DELY10MS MOV A,P3ANL A,#0FH XRL A,#0FH JZ NOKEY1MOV ANLA,P3 A,#0FHCJNE A,#0EH,NK1MOVKEYBU
8、F,#0LJMP DK1NK1: CJNE A,#0DH,NK2MOVKEYBUF,#1LJMP DK1NK2: CJNE A,#0BH,NK3MOVKEYBUF,#2LJMP DK1NK3: CJNE A,#07H,NK4MOVKEYBUF,#3LJMP DK1 NK4: NOP DK1:MOV MOVA,KEYBUF DPTR,#TABLEMOVC A,A+DPTRMOVP0,ADK1A: MOV A,P3ANL XRL JNZA,#0FH A,#0FH DK1ANOKEY1:MOV CLR MOV ANL XRLP3,#0FFH P3.5 A,P3 A,#0FH A,#0FHJZ NOK
9、EY2 LCALL DELY10MSMOV ANL XRLA,P3 A,#0FH A,#0FHJZ NOKEY2 MOV A,P3 ANL A,#0FHCJNE A,#0EH,NK5 MOV KEYBUF,#4LJMP DK2NK5: CJNE A,#0DH,NK6MOVKEYBUF,#5LJMP DK2NK6: CJNE A,#0BH,NK7MOVKEYBUF,#6LJMP DK2NK7: CJNE A,#07H,NK8MOVKEYBUF,#7LJMP DK2 NK8: NOP DK2:MOV MOVA,KEYBUF DPTR,#TABLEMOVC A,A+DPTRMOVP0,ADK2A:
10、MOV A,P3ANL XRL JNZA,#0FH A,#0FH DK2ANOKEY2:MOV CLR MOV ANL XRLP3,#0FFH P3.6 A,P3 A,#0FH A,#0FHJZ NOKEY3 LCALL DELY10MSMOV ANL XRLA,P3 A,#0FH A,#0FHJZ NOKEY3 MOV A,P3 ANL A,#0FHCJNE A,#0EH,NK9 MOV KEYBUF,#8 LJMP DK3NK9: CJNE A,#0DH,NK10 MOV KEYBUF,#9LJMP DK3NK10: CJNE A,#0BH,NK11 MOV KEYBUF,#10LJMP
11、DK3NK11: CJNE A,#07H,NK12 MOV KEYBUF,#11LJMP DK3 NK12: NOP DK3:MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,ADK3A: MOV A,P3ANL XRL JNZA,#0FH A,#0FH DK3ANOKEY3:MOV CLR MOV ANL XRLP3,#0FFH P3.7 A,P3 A,#0FH A,#0FHJZ NOKEY4 LCALL DELY10MSMOV ANL XRLA,P3 A,#0FH A,#0FHJZ NOKEY4 MOV A,P3 ANL A,#0FHCJN
12、E A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4NK13: CJNE A,#0DH,NK14 MOV KEYBUF,#13LJMP DK4NK14: CJNE A,#0BH,NK15 MOV KEYBUF,#14LJMP DK4NK15: CJNE A,#07H,NK16 MOV KEYBUF,#15LJMP DK4 NK16: NOP DK4:MOV A,KEYBUF MOV DPTR,#TABLEMOVC A,A+DPTR MOV P0,ADK4A: MOV A,P3ANL XRL JNZA,#0FH A,#0FH DK4ANOKEY4:LJMP WAIT DEL
13、Y10MS:MOV R6,#10D1: MOV R7,#248 DJNZ R7,$DJNZ R6,D1 RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71HEND7 C 語(yǔ)言源程序#include <AT89X51.H>unsigned char code table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71;unsigned unsigned unsign
14、edchar char chartemp; key; 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
15、0x0b: 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=P
16、3; 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)f
17、or(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=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)te
18、mp=P3; 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
19、0x07: key=15; break;temp=P3; P1_0=P1_0;P0=tablekey; temp=temp & 0x0f; while(temp!=0x0f)temp=P3; temp=temp & 0x0f;15 定時(shí)計(jì)數(shù)器 T0 作定時(shí)應(yīng)用技術(shù)(一)1 實(shí)驗(yàn)任務(wù)用 AT89S51 單片機(jī)的定時(shí)/計(jì)數(shù)器 T0 產(chǎn)生一秒的定時(shí)時(shí)間,作為秒計(jì)數(shù)時(shí)間,當(dāng)一秒產(chǎn)生時(shí),秒計(jì)數(shù)加 1,秒計(jì)數(shù)到 60 時(shí),自動(dòng)從 0 開(kāi)始。硬件電路如下圖所示2電路原理圖圖 4.15.13系統(tǒng)板上硬件連線(xiàn)(1 把“單片機(jī)系統(tǒng)”區(qū)域中的 P0.0/AD0P0.7/AD7 端口用 8 芯排線(xiàn)連接
20、到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè) ah 端口上;要求:P0.0/AD0對(duì)應(yīng)著 a,P0.1/AD1 對(duì)應(yīng)著 b,P0.7/AD7 對(duì)應(yīng)著 h。(2 把“單片機(jī)系統(tǒng)”區(qū)域中的 P2.0/A8P2.7/A15 端口用 8 芯排線(xiàn)連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè) ah 端口上;要求:P2.0/A8 對(duì)應(yīng)著 a,P2.1/A9 對(duì)應(yīng)著 b,P2.7/A15 對(duì)應(yīng)著 h。4 程序設(shè)計(jì)內(nèi)容AT89S51 單片機(jī)的內(nèi)部 16 位定時(shí)/計(jì)數(shù)器是一個(gè)可編程定時(shí)/計(jì)數(shù)器,它既可以工作在 13 位定時(shí)方式,也可以工作在 16 位定時(shí)方式和 8 位定時(shí)方式。只要通過(guò)設(shè)置特殊功能寄存器 TMOD,即
21、可完成。定時(shí)/計(jì)數(shù)器何時(shí)工作也是通過(guò)軟件來(lái)設(shè)定 TCON 特殊功能寄存器來(lái)完成的?,F(xiàn)在我們選擇 16 位定時(shí)工作方式,對(duì)于 T0 來(lái)說(shuō),最大定時(shí)也只有 65536us, 即 65.536ms,無(wú)法達(dá)到我們所需要的 1 秒的定時(shí),因此,我們必須通過(guò)軟件來(lái)處理這個(gè)問(wèn)題,假設(shè)我們?nèi)?T0 的最大定時(shí)為 50ms,即要定時(shí) 1 秒需要經(jīng)過(guò) 20 次的 50ms 的定時(shí)。對(duì)于這 20 次我們就可以采用軟件的方法來(lái)統(tǒng)計(jì)了。因此,我們?cè)O(shè)定 TMOD00000001B,即 TMOD01H下面我們要給 T0 定時(shí)/計(jì)數(shù)器的 TH0,TL0 裝入預(yù)置初值,通過(guò)下面的公式可以計(jì)算出TH0(21650000) /25
22、6TL0(21650000)MOD256當(dāng) T0 在工作的時(shí)候,我們?nèi)绾蔚弥?50ms 的定時(shí)時(shí)間已到,這回我們通過(guò)檢測(cè) TCON 特殊功能寄存器中的 TF0 標(biāo)志位,如果 TF01 表示定時(shí)時(shí)間已到。5 程序框圖圖 4.15.26 匯編源程序(法)SECOND EQU TCOUNT EQU ORG 00H START: MOV30H31HSECOND,#00HMOV MOV MOV MOVTCOUNT,#00H TMOD,#01HTH0,#(65536-50000) / 256TL0,#(65536-50000) MOD 256SETB TR0DISP: MOV A,SECONDMOV DI
23、V MOVB,#10 ABDPTR,#TABLEMOVC A,A+DPTR MOV P0,AMOV A,BMOVC A,A+DPTRMOV P2,AWAIT: JNB TF0,WAITCLR MOV MOV INC MOVTF0TH0,#(65536-50000) / 256TL0,#(65536-50000) MOD 256 TCOUNTA,TCOUNTCJNE A,#20,NEXTMOV INC MOVTCOUNT,#00H SECOND A,SECONDCJNE A,#60,NEXMOVSECOND,#00HNEX: LJMP DISP NEXT: LJMP WAITTABLE: DB
24、3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END7 C 語(yǔ)言源程序(法)#include <AT89X51.H>unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00;unsigned char second; unsigned char tcount;void main(void) TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-5
25、0000)%256; TR0=1;tcount=0; second=0;P0=dispcodesecond/10; P2=dispcodesecond%10; while(1) if(TF0=1)tcount+; if(tcount=20)tcount=0; second+; if(second=60)second=0;P0=dispcodesecond/10; P2=dispcodesecond%10; TF0=0;TH0=(65536-50000)/256; TL0=(65536-50000)%256;1 匯編源程序(中斷法)SECOND EQU TCOUNT EQU ORG 00H LJ
26、MP START ORG 0BH LJMP INT0X START: MOV30H31HSECOND,#00HMOV MOV DIV MOVA,SECOND B,#10AB DPTR,#TABLEMOVC A,A+DPTRMOV MOVP0,A A,BMOVC A,A+DPTRMOV MOV MOV MOV MOV SETB SETB SETB SJMPP2,A TCOUNT,#00H TMOD,#01HTH0,#(65536-50000) TL0,#(65536-50000) TR0ET0 EA$/256MOD 256INT0X:MOV MOV INCTH0,#(65536-50000) T
27、L0,#(65536-50000) TCOUNT/ 256MOD 256MOVA,TCOUNTCJNE A,#20,NEXTMOV INC MOVTCOUNT,#00H SECOND A,SECONDCJNE A,#60,NEXMOVSECOND,#00HNEX: MOV A,SECONDMOV DIV MOVB,#10 ABDPTR,#TABLEMOVC A,A+DPTRMOV MOVP0,A A,BMOVC A,A+DPTRMOVP2,ANEXT: RETITABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END2 C 語(yǔ)言源程序(中斷法)
28、#include <AT89X51.H>unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00;unsigned char second; unsigned char tcount;void main(void) TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1;ET0=1; EA=1;tcount=0; second=0;P0=disp
29、codesecond/10; P2=dispcodesecond%10; while(1);void t0(void) interrupt 1 using 0tcount+; if(tcount=20)tcount=0; second+; if(second=60)second=0;P0=dispcodesecond/10; P2=dispcodesecond%10;TH0=(65536-50000)/256; TL0=(65536-50000)%256;16 定時(shí)計(jì)數(shù)器 T0 作定時(shí)應(yīng)用技術(shù)(二)1 實(shí)驗(yàn)任務(wù)用 AT89S51 的定時(shí)/計(jì)數(shù)器 T0 產(chǎn)生 2 秒鐘的定時(shí),每當(dāng) 2 秒定時(shí)到來(lái)
30、時(shí),更換指示燈閃爍,每個(gè)指示閃爍的頻率為 0.2 秒,也就是說(shuō),開(kāi)始 L1 指示燈以 0.2 秒的速率閃爍,當(dāng) 2 秒定時(shí)到來(lái)之后,L2 開(kāi)始以 0.2 秒的速率閃爍,如此循環(huán)下去。0.2 秒的閃爍速率也由定時(shí)/計(jì)數(shù)器 T0 來(lái)完成。2電路原理圖圖 4.16.13系統(tǒng)板硬件連線(xiàn)(1 把“單片機(jī)系統(tǒng)”區(qū)域中的 P1.0P1.3 用導(dǎo)線(xiàn)連接到“八路發(fā)光二極管指示模塊”區(qū)域中的 L1L4 上4 程序設(shè)計(jì)內(nèi)容(1 由于采用中斷方式來(lái)完成,因此,對(duì)于中斷源必須它的中斷地址,對(duì)于定時(shí)/計(jì)數(shù)器 T0 來(lái)說(shuō),中斷地址為 000BH,因此在中斷地方加入長(zhǎng)跳轉(zhuǎn)指令來(lái)執(zhí)行中斷服務(wù)程序。書(shū)寫(xiě)匯編源程序格式如下所示:O
31、RG LJMP ORG LJMP00HSTART0BH;定時(shí)/計(jì)數(shù)器 T0 中斷地址INT_T0START: NOP;主程序開(kāi)始.INT_T0: PUSH ACC PUSH PSW.POP PSW POP ACC;定時(shí)/計(jì)數(shù)器 T0 中斷服務(wù)程序RETI END;中斷服務(wù)程序返回(2 定時(shí) 2 秒,采用 16 位定時(shí) 50ms,共定時(shí) 40 次才可達(dá)到 2 秒,每 50ms產(chǎn)生一中斷,定時(shí)的 40 次數(shù)在中斷服務(wù)程序中完成,同樣 0.2 秒的定時(shí),需要 4 次才可達(dá)到 0.2 秒。對(duì)于中斷程序,在主程序中要對(duì)中斷開(kāi)中斷。(3 由于每次 2 秒定時(shí)到時(shí),L1L4 要交替閃爍。采用 ID 來(lái)號(hào)來(lái)識(shí)
32、別。當(dāng) ID0 時(shí),L1 在閃爍,當(dāng) ID1 時(shí),L2 在閃爍;當(dāng) ID2 時(shí),L3 在閃爍;當(dāng) ID3 時(shí),L4 在閃爍5 程序框圖T0 中斷服務(wù)程序框圖主程序框圖圖 4.16.26 匯編源程序6 匯編源程序TCOUNT2S EQU 30H TCNT02S EQU 31H ID EQU 32HORG 00H LJMP START ORG 0BHLJMP INT_T0START: MOV TCOUNT2S,#00HMOV MOV MOV MOV MOV SETB SETB SETB SJMPTCNT02S,#00H ID,#00H TMOD,#01HTH0,#(65536-50000) / 2
33、56TL0,#(65536-50000) MOD 256 TR0ET0 EA$INT_T0: MOV TH0,#(65536-50000)/256MOV INC MOVTL0,#(65536-50000) TCOUNT2S A,TCOUNT2SMOD256CJNE A,#40,NEXTMOV INC MOVTCOUNT2S,#00H IDA,IDCJNE A,#04H,NEXT MOV ID,#00HNEXT: INC TCNT02SMOVT02SCJNE A,#4,DONE MOV TCNT02S,#00H MOV A,IDCJNE A,#00H,SID1 CPL P1.0SJMP DONE
34、SID1: CJNE CPL P1.1 SJMP DONE SID2: CJNE CPL P1.2 SJMP DONE SID3: CJNE CPL P1.3 SID4: SJMP DONE: RETI ENDA,#01H,SID2A,#02H,SID3A,#03H,SID4DONE7 C 語(yǔ)言源程序#include <AT89X51.H>unsigned char tcount2s;unsigned char tcount02s; unsigned char ID;void main(void) TMOD=0x01;TH0=(65536-50000)/256; TL0=(6553
35、6-50000)%256; TR0=1;ET0=1; EA=1;while(1);void t0(void) interrupttcount2s+; if(tcount2s=40)tcount2s=0; ID+; if(ID=4) ID=0;tcount02s+; if(tcount02s=4)tcount02s=0; switch(ID)case 0: P1_0=P1_0;break; case 1:P1_1=P1_1;break; case 2:P1_2=P1_2;break; case 3:P1_3=P1_3;1using0break;17 99 秒馬表設(shè)計(jì)1 實(shí)驗(yàn)任務(wù)(1(2(3開(kāi)始時(shí)
36、,顯示“00”,第 1 次按下 SP1 后就開(kāi)始計(jì)時(shí)。第 2 次按 SP1 后,計(jì)時(shí)停止。第 3 次按 SP1 后,計(jì)時(shí)歸零。2電路原理圖圖 4.17.13 系統(tǒng)板上硬件連線(xiàn)(1 把“單片機(jī)系統(tǒng)”區(qū)域中的 P0.0/AD0P0.7/AD7 端口用 8 芯排線(xiàn)連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè) ah 端口上;要求:P0.0/AD0對(duì)應(yīng)著 a,P0.1/AD1 對(duì)應(yīng)著 b,P0.7/AD7 對(duì)應(yīng)著 h。(2 把“單片機(jī)系統(tǒng)”區(qū)域中的 P2.0/A8P2.7/A15 端口用 8 芯排線(xiàn)連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè) ah 端口上;要求:P2.0/A8 對(duì)應(yīng)著 a,P2.1/A
37、9 對(duì)應(yīng)著 b,P2.7/A15 對(duì)應(yīng)著 h。(3 把“單片機(jī)系統(tǒng)“區(qū)域中的 P3.5/T1 用導(dǎo)線(xiàn)連接到” 的 SP1 端口上;式鍵盤(pán)“區(qū)域中4程序框圖主程序框圖T0 中斷服務(wù)程序框圖圖 4.17.25 匯編源程序TCNTA EQU 30H TCNTB EQU 31HSECEQU 32HT EQU 33H BIT P3.5 00HSP1 ORGLJMP START ORG 0BH LJMP INT_T0 START: MOVT,#00HMOV MOV MOV DIV MOVSEC,#00H A,SEC B,#10AB DPTR,#TABLEMOVC A,A+DPTRMOV MOV MOVP0
38、,A A,BDPTR,#TABLEMOVC A,A+DPTR MOV P2,AMOV TMOD,#02H SETB ET0SETB EAWT: JB SP1,WT LCALL DELY10MS JB SP1,WTINC MOV CJNE SETB MOV MOV MOV MOVTTA,#011 TR0TH0,#06H TL0,#06H TCNTA,#00H TCNTB,#00HLJMP DKNKN1: CJNE A,#022CLRTR0LJMP DKNKN2: CJNE A,#03H,DKNMOV MOV MOV DIV MOVSEC,#00H A,SEC B,#10AB DPTR,#TABL
39、EMOVC A,A+DPTRMOV MOV MOVP0,A A,BDPTR,#TABLEMOVC A,A+DPTRMOV MOV DKN: LJMPP2,AT,#00H JNB SP1,$ WTDELY10MS: MOV R6,#20D1: MOV R7,#248 DJNZ R7,$DJNZ R6,D1 RET INT_T0: INC TCNTAMOVTACJNE A,#100,NEXTMOV INC MOVTCNTA,#00H TCNTBTBCJNE A,#4,NEXTMOV INC MOVTCNTB,#00H SECA,SECCJNE A,#100,DONE MOV SEC,#00H DO
40、NE: MOV A,SECMOV DIV MOVB,#10 ABDPTR,#TABLEMOVC A,A+DPTRMOV MOV MOVP0,A A,BDPTR,#TABLEMOVC A,A+DPTR MOV P2,ANEXT: RETITABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END6 C 語(yǔ)言源程序#include <AT89X51.H>unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39
41、,0x5e,0x79,0x71,0x00;unsigned unsigned unsignedchar second;charint tcnt;t;void main(void)unsigned char i,j;TMOD=0x02; ET0=1; EA=1;second=0; P0=dispcodesecond/10; P2=dispcodesecond%10;while(1) if(P3_5=0)for(i=20;i>0;i-)for(j=248;j>0;j-); if(P3_5=0)t+;switch(case 1: TH0=0x06; TL0=0x06; TR0=1;bre
42、ak; case 2: TR0=0;break; case 3:t=0;second=0;t)P0=dispcodesecond/10; P2=dispcodesecond%10; break;while(P3_5=0);void t0(void) interrupttcnt+; if(tcnt=400)tcnt=0; second+; if(second=100)second=0;P0=dispcodesecond/10;1 using 0P2=dispcodesecond%10;18 “嘀、嘀、”聲1 實(shí)驗(yàn)任務(wù)用 AT89S51 單片機(jī)產(chǎn)生“嘀、嘀、”聲從 P1.0 端口輸出,產(chǎn)生頻率為
43、1KHz,根據(jù)上面圖可知:1KHZ 方波從 P1.0 輸出 0.2 秒,接著 0.2 秒從 P1.0 輸出信號(hào),如此循環(huán)下去,就形成我們所需的聲了。2電路原理圖圖 4.18.13系統(tǒng)板硬件連線(xiàn)(1 把“單片機(jī)系統(tǒng)”區(qū)域中的 P1.0 端口用導(dǎo)線(xiàn)連接到“音頻放大模塊”區(qū)域中的 SPK IN 端口上,(2 在“音頻放大模塊”區(qū)域中的 SPK OUT 端口上接上一個(gè) 8 歐或者是 16 歐的喇叭;4 程序設(shè)計(jì)方法(1生活中我們常常到各種各樣的聲,例如“嘀、嘀、”就是常見(jiàn)的一種聲音聲,但對(duì)于這種聲,嘀 0.2 秒鐘,然后斷 0.2 秒鐘,如此循環(huán)下去,假設(shè)嘀聲的頻率為 1KHz,則聲時(shí)序圖如下圖所示:
44、上述波形信號(hào)如何用單片機(jī)來(lái)產(chǎn)生呢?(2 由于要產(chǎn)生上面的信號(hào),我們把上面的信號(hào)分成兩部分,一部分為 1KHZ方波,占用時(shí)間為 0.2 秒;另一部分為,也是占用 0.2 秒;因此,我們利用單片機(jī)的定時(shí)/計(jì)數(shù)器 T0 作為定時(shí),可以定時(shí) 0.2 秒;同時(shí),也要用單片機(jī)產(chǎn)生 1KHZ 的方波,對(duì)于 1KHZ 的方波信號(hào)周期為 1ms,高占用 0.5ms,低占用 0.5ms,因此也采用定時(shí)器 T0 來(lái)完成 0.5ms 的定時(shí);最后,可以選定定時(shí)/計(jì)數(shù)器 T0 的定時(shí)時(shí)間為 0.5ms,而要定時(shí) 0.2 秒則是 0.5ms 的 400 倍,也就是說(shuō)以 0.5ms 定時(shí) 400 次就達(dá)到 0.2 秒的定時(shí)
45、時(shí)間了。5 程序框圖主程序框圖中斷服務(wù)程序框圖圖 4.18.26 匯編源程序T02SA EQU 30H T02SB EQU 31H FLAG BIT 00H ORG 00HLJMP START ORG 0BH LJMP INT_T0START: MOV T02SA,#00HMOV CLR MOV MOV MOV SETB SETB SETB SJMPT02SB,#00H FLAG TMOD,#01HTH0,#(65536-500) TL0,#(65536-500) TR0ET0 EA$/ 256MOD 256INT_T0:MOV MOV INCTH0,#(65536-500) TL0,#(65
46、536-500) T02SA/ 256MOD 256MOV A,T02SACJNE A,#100,NEXT INC T02SBMOV A,T02SBCJNE A,#04H,NEXTMOV MOV CPLT02SA,#00H T02SB,#00H FLAGNEXT: JB FLAG,DONE CPL P1.0DONE: RETI END7 C 語(yǔ)言源程序#include unsigned unsigned<AT89X51.H>int t02s; char t05ms;bit flag;void main(void) TMOD=0x01;TH0=(65536-500)/256; TL0
47、=(65536-500)%256; TR0=1;ET0=1; EA=1;while(1);void t0(void) interruptTH0=(65536-500)/256; TL0=(65536-500)%256; t02s+;if(t02s=400) t02s=0;flag=flag;if(flag=0) P1_0=P1_0;1 using 019 “叮咚”門(mén)鈴1 實(shí)驗(yàn)任務(wù)當(dāng)按下開(kāi)關(guān) SP1,AT89S51 單片機(jī)產(chǎn)生“叮咚”聲從 P1.0 端口輸出到 LM386,經(jīng)過(guò)放大之后送入喇叭。2電路原理圖圖 4.19.13系統(tǒng)板上硬件連線(xiàn)(1 把“單片機(jī)系統(tǒng)”區(qū)域中的 P1.0 端口用導(dǎo)線(xiàn)連接到“音頻放大模塊”區(qū)域中的 SPK IN 端口上;(2 在“音頻放大模塊”區(qū)域中的 SPK OUT 端口上接上一個(gè) 8 歐或者是 16 歐的喇叭;(3
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工現(xiàn)場(chǎng)施工防臺(tái)風(fēng)災(zāi)害制度
- 施工現(xiàn)場(chǎng)安全管理制度的國(guó)際比較與借鑒
- 施工單位關(guān)于現(xiàn)場(chǎng)布置的工作聯(lián)系函
- 科技輔助小學(xué)語(yǔ)文教學(xué)的策略與實(shí)踐
- 飯店生產(chǎn)安全事故應(yīng)急預(yù)案
- 食品安全的應(yīng)急預(yù)案
- DB6528T 146-2024庫(kù)爾勒香梨雜交育種技術(shù)規(guī)程
- DB3702T 46.2-2024地理標(biāo)志產(chǎn)品 平度大花生 第2部分:質(zhì)量標(biāo)準(zhǔn)
- 專(zhuān)賣(mài)店員工聘用合同標(biāo)準(zhǔn)格式
- 個(gè)人信用抵押借款合同2025
- 白酒銷(xiāo)售經(jīng)理述職報(bào)告
- 消防技術(shù)負(fù)責(zé)人任命書(shū)
- 六年級(jí)英語(yǔ)上冊(cè)綜合測(cè)試卷(一)附答案
- 部編小學(xué)語(yǔ)文(6年級(jí)下冊(cè)第6單元)作業(yè)設(shè)計(jì)
- 洗衣機(jī)事業(yè)部精益降本總結(jié)及規(guī)劃 -美的集團(tuán)制造年會(huì)
- 2015-2022年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文/數(shù)學(xué)/英語(yǔ)筆試參考題庫(kù)含答案解析
- 2023年菏澤醫(yī)學(xué)專(zhuān)科學(xué)校單招綜合素質(zhì)模擬試題及答案解析
- 鋁合金門(mén)窗設(shè)計(jì)說(shuō)明
- 常見(jiàn)食物的嘌呤含量表匯總
- 小學(xué)數(shù)學(xué)-三角形面積計(jì)算公式的推導(dǎo)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 人教版數(shù)學(xué)八年級(jí)下冊(cè)同步練習(xí)(含答案)
評(píng)論
0/150
提交評(píng)論