




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、目錄引言1實驗1 PROTUES環(huán)境及LED閃爍綜合實驗6實驗2 多路開關(guān)狀態(tài)指示9實驗3 報警產(chǎn)生器12實驗4 I/O并行口直接驅(qū)動LED顯示15實驗5 按鍵識別方法之一18實驗6 一鍵多功能按鍵識別技術(shù)21實驗7 定時計數(shù)器T0作定時應(yīng)用技術(shù)24實驗8定時計數(shù)器T0作定時應(yīng)用技術(shù)27實驗9 “嘀、嘀、”報警聲31實驗10 8X8 LED點陣顯示技術(shù)35實驗11電子琴39引言單片機體積小,重量輕,具有很強的靈活性而且價格便宜,具有邏輯判斷,定時計數(shù)等多種功能,廣泛應(yīng)用于儀器儀表,家用電器,醫(yī)用設(shè)備的智能化管理和過程控制等領(lǐng)域。以單片機為核心的嵌入式系統(tǒng)已經(jīng)成為目前電子設(shè)計最活躍的領(lǐng)域之一。在
2、嵌入式系統(tǒng)的中,開發(fā)板成本高,特別是對于大量的初學(xué)者而言,還可能由于設(shè)計的錯誤導(dǎo)致開發(fā)板損壞。利用Proteus我們可以很好地解決這個問題,由此我們可以快速地建立一個單片機仿真系統(tǒng)。1. Proteus介紹Proteus是英國LabcenterElectronics公司開發(fā)的一款電路仿真軟件,軟件由兩部分組成:一部分是智能原理圖輸入系統(tǒng)ISIS(IntelligentSchematicInputSystem)和虛擬系統(tǒng)模型VSM(VirtualModelSystem);另一部分是高級布線及編輯軟件ARES (AdvancedRoutingandEditingSoftware)也就是PCB。1.
3、1ProteusVSM的仿真Proteus可以仿真模擬電路及數(shù)字電路,也可以仿真模擬數(shù)字混合電路。Proteus可提供30多種元件庫,超過8000種模擬、數(shù)字元器件??梢园凑赵O(shè)計的要求選擇不同生產(chǎn)廠家的元器件。此外,對于元器件庫中沒有的元件,設(shè)計者也可以通過軟件自己創(chuàng)建。除擁有豐富的元器件外,Proteus還提供了各種虛擬儀器,如常用的電流表,電壓表,示波器,計數(shù)/定時/頻率計,SPI調(diào)試器等虛擬終端。支持圖形化的分析功能等。Proteus特別適合對嵌入式系統(tǒng)進行軟硬件協(xié)同設(shè)計與仿真,其最大的特點是可以仿真8051,PIA,AVR,ARM等多種系列的處理器。Protues包含強大的調(diào)試工具,具
4、有對寄存器和存儲器、斷點和單步模式IARC-SPY, Keil, MPLAB等開發(fā)工具的源程序進行調(diào)試的功能;能夠觀察代碼在仿真硬件上的實時運行效果;對顯示,按鈕,鍵盤等外設(shè)的交互可視化進行仿真。1.2ProteusPCBProteus的PCB設(shè)計除了有自動布線仿真功能外,還集成了PCB設(shè)計,支持多達16個布線層,可以任意角度放置元件和焊接連線;集成了高智能的布線算法,可以方便地進行PCB設(shè)計。2.一個基于Protesus的單片機實例2.1軟件的編寫本例題采用8個LED,編寫程序使之閃爍起來。軟件的編寫是采用匯編語言,芯片的型號選擇AT89C51, 編寫LED.ASM文件,利用Proteus本
5、身的51匯編功能進行編譯,編譯成功后生成LED.hex文件。2.2繪制電路圖運行Proteus的ISIS,進入仿真軟件的主界面,如圖1所示。主界面分為菜單欄,工具欄,模型顯示窗口,模型選擇區(qū),元件列表區(qū)等。圖1ISIS啟動界面通過左側(cè)的工具欄區(qū)的P(從庫中選擇元件)命令,在Pickdevices窗口中選擇系統(tǒng)所需元器件,還可以選擇元件的類別,生產(chǎn)廠家等。本例所需主要元器件有:AT89C51芯片,電阻、電容、石英晶振和發(fā)光二極管,詳見表1。表1元器件清單選擇元器件后連接圖2所示電路。圖2電路原理圖MicroproccessorICs類的芯片的引腳與實際的芯片基本相同,唯一的差別是隱去了GND和V
6、CC引腳,系統(tǒng)默認(rèn)的是把它們分別連接到地和+5V直流電源。故在電路連線時可以不考慮電源和地的連接。電路連接完成后,選中AT89C51單擊鼠標(biāo)左鍵,打開“EditComponent”對話窗口如圖3所示,可以直接在“ClockFrequency”后進行頻率設(shè)定,設(shè)定單片機的時鐘頻率為12MHz。在“Add/remove source file”欄中選擇已經(jīng)編好的LED.asm文件,然后單擊“OK”按鈕保存設(shè)計。至此,就可以進行單片機的仿真。 圖3單片機屬性的設(shè)定2.3 Proteus仿真結(jié)果單片機的仿真結(jié)果圖如圖4,模擬信號經(jīng)A/D轉(zhuǎn)換后,結(jié)果送入單片機,再在數(shù)碼管上顯示;通過調(diào)節(jié)可調(diào)電阻的阻值,
7、可以得到不同的顯示結(jié)果。仿真結(jié)果表明,系統(tǒng)達到了預(yù)先的設(shè)計要求。在仿真的過程中每個管腳旁邊會出現(xiàn)一個小方塊,紅色的方快表示高電平,藍色的表示低電平。通過方快顏色的變化可以很方便地知道每個管腳電平的變化,從而能對系統(tǒng)的運行有更直觀的了解,這對程序的調(diào)試有很大的幫助。圖4仿真結(jié)果3總結(jié)本文結(jié)合一個LED閃爍的單片機電路詳細(xì)說明了Proteus在單片機開發(fā)中的應(yīng)用??梢钥闯?,Proteus功能十分強大,能仿真各種數(shù)字模擬電路,且操作簡單,使用方便。能快速地進行單片機仿真,加快系統(tǒng)開發(fā)的過程,降低開發(fā)成本。實驗1 PROTUES環(huán)境及LED閃爍綜合實驗1 實驗任務(wù) 做單一燈的左移右移,硬件電路如圖所示
8、,八個發(fā)光二極管L1L8分別接在單片機的P1.0P1.7接口上,輸出“0”時,發(fā)光二極管亮,開始時P1.0P1.1P1.2P1.3P1.7P1.6P1.0亮,重復(fù)循環(huán)。 2 電路原理圖 圖1 3 程序設(shè)計內(nèi)容 我們可以運用輸出端口指令MOVP1,A或MOVP1,DATA,只要給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達到輸出控制的動作。 每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表1所示 :P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0說明L8L7L6L5L4L3L2L111111110L1亮11111101L2亮11111011L3亮11110111L4亮11101111L5亮
9、11011111L6亮10111111L7亮01111111L8亮4 程序框圖 圖25 匯編源程序ORG 0START: MOV R2,#8MOV A,#0FEHSETB CLOOP: MOV P1,ALCALL DELAYRLC ADJNZ R2,LOOPMOV R2,#8LOOP1: MOV P1,ALCALL DELAYRRC ADJNZ R2,LOOP1LJMP STARTDELAY: MOV R5,#20 ;D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND實驗2 多路開關(guān)狀態(tài)指示 1 實驗任務(wù) 如圖1所示
10、,AT89S51單片機的P1.0P1.3接四個發(fā)光二極管L1L4,P1.4P1.7接了四個開關(guān)K1K4,編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。(開關(guān)閉合,對應(yīng)的燈亮,開關(guān)斷開,對應(yīng)的燈滅)。 2 電路原理圖 圖1 3 程序設(shè)計內(nèi)容 3.1 開關(guān)狀態(tài)檢測 對于開關(guān)狀態(tài)檢測,相對單片機來說,是輸入關(guān)系,我們可輪流檢測每個開關(guān)狀態(tài),根據(jù)每個開關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JBP1.X,REL或JNBP1.X,REL指令來完成;也可以一次性檢測四路開關(guān)狀態(tài),然后讓其指示,可以采用MOVA,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高4位的狀態(tài)來指示。 3.2 輸出控制 根據(jù)開關(guān)的狀態(tài),由發(fā)光
11、二極管L1L4來指示,我們可以用SETBP1.X和CLRP1.X指令來完成,也可以采用MOVP1,1111XXXXB方法一次指示。 4 程序框圖 讀P1口數(shù)據(jù)到ACC中 ACC內(nèi)容右移4次 ACC內(nèi)容與F0H相或 ACC內(nèi)容送入P1口 圖2 5 解決方案方法一(匯編源程序)ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP STARTEND方法二(匯編源程序)ORG 00HSTART: JB P1.4,NEXT1CLR P1.0SJMP NEX1NEXT1: SETB P1.0NEX1: JB P1.
12、5,NEXT2CLR P1.1SJMP NEX2NEXT2: SETB P1.1NEX2: JB P1.6,NEXT3CLR P1.2SJMP NEX3NEXT3: SETB P1.2NEX3: JB P1.7,NEXT4CLR P1.3SJMP NEX4NEXT4: SETB P1.3NEX4: SJMP STARTEND實驗3 報警產(chǎn)生器 1 實驗任務(wù) 用P1.0輸出1KHz和500Hz的音頻信號驅(qū)動揚聲器,作報警信號,要求1KHz信號響100ms,500Hz信號響200ms,交替進行,P1.7接一開關(guān)進行控制,當(dāng)開關(guān)合上響報警信號,當(dāng)開關(guān)斷開告警信號停止,編出程序。 2 電路原理圖 圖1
13、 3 程序設(shè)計內(nèi)容 3.1 信號產(chǎn)生的方法 500Hz信號周期為2ms,信號電平為每1ms變反1次,1KHz的信號周期為1ms,信號電平每500us變反1次; 4 程序框圖 圖2 5 匯編源程序FLAG BIT 00HORG 00HSTART: JB P1.7,STARTJNB FLAG,NEXTMOV R2,#200DV: CPL P1.0LCALL DELY500LCALL DELY500DJNZ R2,DVCPL FLAGNEXT: MOV R2,#200DV1: CPL P1.0LCALL DELY500DJNZ R2,DV1CPL FLAGSJMP STARTDELY500: MOV
14、 R7,#250LOOP: NOPDJNZ R7,LOOPRETEND實驗4 I/O并行口直接驅(qū)動LED顯示 1. 實驗任務(wù) 如圖1所示,利用AT89S51單片機的P0端口的P0.0P0.7連接到一個共陰數(shù)碼管的ah的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示09數(shù)字,時間間隔0.2秒。 2. 電路原理圖 圖1 3 程序設(shè)計內(nèi)容 (1) LED數(shù)碼顯示原理 七段LED顯示器內(nèi)部由七個條形發(fā)光二極管和一個小圓點發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽極型。 LED數(shù)碼管的ga七個發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合
15、稱之為字形碼,下面給出共陰極的字形碼見表2 “0”3FH“8”7FH“1”06H“9”6FH“2”5BH“A”77H“3”4FH“b”7CH“4”66H“C”39H“5”6DH“d”5EH“6”7DH“E”79H“7”07H“F”71H(2) 由于顯示的數(shù)字09的字形碼沒有規(guī)律可循,只能采用查表的方式來完成我們所需的要求了。這樣我們按著數(shù)字09的順序,把每個數(shù)字的筆段代碼按順序排好!建立的表格如下所示:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。4程序框圖 圖25 匯編源程序ORG 0START: MOV R1,#00HNEXT: MOV A,
16、R1MOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ALCALL DELAYINC R1CJNE R1,#10,NEXTLJMP STARTDELAY: MOV R5,#20D2: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND實驗5 按鍵識別方法之一1 實驗任務(wù) 每按下一次開關(guān)SP1,計數(shù)值加1,通過AT89S51單片機的P1端口的P1.0到P1.3顯示出其的二進制計數(shù)值。 2 電路原理圖 3程序設(shè)計
17、方法 (1)其實,作為一個按鍵從沒有按下到按下以及釋放是一個完整的過程,也就是說,當(dāng)我們按下一個按鍵時,總希望某個命令只執(zhí)行一次,而在按鍵按下的 過程中,不要有干擾進來,因為,在按下的過程中,一旦有干擾過來,可能造成誤觸發(fā)過程,這并不是我們所想要的。因此在按鍵按下的時候,圖2要把我們手上的干擾信號以及按鍵的機械接觸等干擾信號給濾除掉,一般情況下,我們可以采用電容來濾除掉這些干擾信號,但實際上,會增加硬件成本及硬件電路的體積,這是我們不希望,總得有個辦法解決這個問題,因此我們可以采用軟件濾波的方法去除這些干擾信號,一般情況下,一個按鍵按下的時候,總是在按下的時刻存在著一定的干擾信號,按下之后就基
18、本上進入了穩(wěn)定的狀態(tài)。具體的一個按鍵從按下到釋放的全過程的信號圖如上圖所示: 從圖中可以看出,我們在程序設(shè)計時,從按鍵被識別按下之后,延時5ms以上,從而避開了干擾信號區(qū)域,我們再來檢測一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時肯定輸出為低電平,若這時檢測到的是高電平,證明剛才是由于干擾信號引起的誤觸發(fā),CPU就認(rèn)為是誤觸發(fā)信號而舍棄這次的按鍵識別過程。從而提高了系統(tǒng)的可靠性。 由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時候,再執(zhí)行一次命令,因此從按鍵被識別出來之后,我們就可以執(zhí)行這次的命令,所以要有一個等待按鍵釋放的過程,顯然釋放的過程,就是使其恢復(fù)成高電平狀態(tài)。 (1)
19、對于按鍵識別的指令,我們依然選擇如下指令JBBIT,REL指令是用來檢測BIT是否為高電平,若BIT1,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。或者是JNBBIT,REL指令是用來檢測BIT是否為低電平,若BIT0,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。 (2)但對程序設(shè)計過程中按鍵識別過程的框圖如右圖所示:圖34 程序框圖 圖46 匯編源程序ORG 0START: MOV R1,#00H ;初始化R1為0,表示從0開始計數(shù)MOV A,R1 ;CPL A ;取反指令MOV P1,A ;送出P1端口由發(fā)光二極管顯示REL: JNB P3.7,REL ;判斷SP1是否按下
20、LCALL DELAY10MS ;若按下,則延時10ms左右JNB P3.7,REL ;再判斷SP1是否真得按下INC R1 ;若真得按下,則進行按鍵處理,使MOV A,R1 ;計數(shù)內(nèi)容加1,并送出P1端口由CPL A ;發(fā)光二極管顯示MOV P1,A ;JNB P3.7,$ ;等待SP1釋放SJMP REL ;繼續(xù)對K1按鍵掃描DELAY10MS: MOV R6,#20 ;延時10ms子程序L1: MOV R7,#248DJNZ R7,$DJNZ R6,L1RETEND實驗6 一鍵多功能按鍵識別技術(shù) 1實驗任務(wù) 如圖1所示,開關(guān)SP1接在P3.7/RD管腳上,在AT89S51單片機的P1端口
21、接有四個發(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程序設(shè)計方法 (1)設(shè)計思想由來 在我們生活中,我們很容易通過這個叫張三,那個叫李四,另外一個是王五;那是因為每個人有不同的名子,我們就很快認(rèn)出,同樣,對于要通過一個按鍵來識別每種不同的功能,我們給每個不同的功能模塊用不同的ID號標(biāo)識,這樣
22、,每按下一次按鍵,ID的值是不相同的,所以單片機就很容易識別不同功能的身份了。 (2)設(shè)計方法 從上面的要求我們可以看出,L1到L4發(fā)光二極管在每個時刻的閃爍的時間是受開關(guān)SP1來控制,我們給L1到L4閃爍的時段定義出不同的ID號,當(dāng)L1在閃爍時,ID0;當(dāng)L2在閃爍時,ID1;當(dāng)L3在閃爍時,ID2;當(dāng)L4在閃爍時,ID3;很顯然,只要每次按下開關(guān)K1時,分別給出不同的ID號我們就能夠完成上面的任務(wù)了。下面給出有關(guān)程序設(shè)計的框圖。 4程序框圖 圖25 匯編源程序ID EQU 30HSP1 BIT P3.7L1 BIT P1.0L2 BIT P1.1L3 BIT P1.2L4 BIT P1.3
23、ORG 0MOV ID,#00HSTART: JB K1,RELLCALL DELAY10MSJB K1,RELINC IDMOV A,IDCJNE A,#04,RELMOV ID,#00HREL: JNB K1,$MOV A,IDCJNE A,#00H,IS0CPL L1LCALL DELAYSJMP STARTIS0: CJNE A,#01H,IS1CPL L2LCALL DELAYSJMP STARTIS1: CJNE A,#02H,IS2CPL L3LCALL DELAYSJMP STARTIS2: CJNE A,#03H,IS3CPL L4LCALL DELAYSJMP STARTI
24、S3: LJMP STARTDELAY10MS: MOV R6,#20LOOP1: MOV R7,#248DJNZ R7,$DJNZ R6,LOOP1RETDELAY: MOV R5,#20LOOP2: LCALL DELAY10MSDJNZ R5,LOOP2RETEND實驗7 定時計數(shù)器T0作定時應(yīng)用技術(shù) 1 實驗任務(wù) 用AT89S51單片機的定時/計數(shù)器T0產(chǎn)生一秒的定時時間,作為秒計數(shù)時間,當(dāng)一秒產(chǎn)生時,秒計數(shù)加1,秒計數(shù)到60時,自動從0開始。硬件電路如下圖所示 2 電路原理圖 3程序設(shè)計內(nèi)容 AT89S51單片機的內(nèi)部16位定時/計數(shù)器是一個可編程定時/計數(shù)器,它既可以工作在13位定
25、時方式,也可以工作在16位定時方式和8位定時方式。只要通過設(shè)置特殊功能寄存器TMOD,即可完成。定時/計數(shù)器何時工作也是通過軟件來設(shè)定TCON特殊功能寄存器來完成的。 現(xiàn)在我們選擇16位定時工作方式,對于T0來說,最大定時也只有65536us,即65.536ms,無法達到我們所需要的1秒的定時,因此,我們必須通過軟件來處理這個問題,假設(shè)我們?nèi)0的最大定時為50ms,即要定時1秒需要經(jīng)過20次的50ms的定時。對于這20次我們就可以采用軟件的方法來統(tǒng)計了。 因此,我們設(shè)定TMODB,即TMOD01H 下面我們要給T0定時/計數(shù)器的TH0,TL0裝入預(yù)置初值,通過下面的公式可以計算出 TH0(2
26、1650000)/256 TL0(21650000)MOD256 當(dāng)T0在工作的時候,我們?nèi)绾蔚弥?0ms的定時時間已到,這回我們通過檢測TCON特殊功能寄存器中的TF0標(biāo)志位,如果TF01表示定時時間已到。 5 程序框圖 圖2 6 匯編源程序(查詢法)SECOND EQU 30HTCOUNT EQU 31HORG 00HSTART: MOV SECOND,#00HMOV TCOUNT,#00HMOV TMOD,#01HMOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256SETB TR0DISP: MOV A,SECONDMOV
27、B,#10DIV ABMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,BMOVC A,A+DPTRMOV P2,AWAIT: JNB TF0,WAITCLR TF0MOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256INC TCOUNTMOV A,TCOUNTCJNE A,#20,NEXTMOV TCOUNT,#00HINC SECONDMOV A,SECONDCJNE A,#60,NEXMOV SECOND,#00HNEX: LJMP DISPNEXT: LJMP WAITTABLE: DB
28、3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND實驗8定時計數(shù)器T0作定時應(yīng)用技術(shù) 1 實驗任務(wù) 用AT89S51的定時/計數(shù)器T0產(chǎn)生2秒鐘的定時,每當(dāng)2秒定時到來時,更換指示燈閃爍,每個指示閃爍的頻率為0.2秒,也就是說,開始L1指示燈以0.2秒的速率閃爍,當(dāng)2秒定時到來之后,L2開始以0.2秒的速率閃爍,如此循環(huán)下去。0.2秒的閃爍速率也由定時/計數(shù)器T0來完成。 2 電路原理圖 3.程序設(shè)計內(nèi)容 (1)由于采用中斷方式來完成,因此,對于中斷源必須它的中斷入口地址,對于定時/計數(shù)器T0來說,中斷入口地址為000BH,因此在中斷入口地方加入長跳轉(zhuǎn)指令來執(zhí)
29、行中斷服務(wù)程序。書寫匯編源程序格式如下所示:ORG00HLJMPSTARTORG0BH ;定時/計數(shù)器T0中斷入口地址LJMP INT_T0START: NOP ;主程序開始.INT_T0: PUSH ACC ;定時/計數(shù)器T0中斷服務(wù)程序PUSH PSWPOP PSWPOP ACCRETI ;中斷服務(wù)程序返回END (2)定時2秒,采用16位定時50ms,共定時40次才可達到2秒,每50ms產(chǎn)生一中斷,定時的40次數(shù)在中斷服務(wù)程序中完成,同樣0.2秒的定時,需要4次才可達到0.2秒。對于中斷程序,在主程序中要對中斷開中斷。 (3)由于每次2秒定時到時,L1L4要交替閃爍。采用ID來號來識別。
30、當(dāng)ID0時,L1在閃爍,當(dāng)ID1時,L2在閃爍;當(dāng)ID2時,L3在閃爍;當(dāng)ID3時,L4在閃爍 5 程序框圖 T0中斷服務(wù)程序框圖 主程序框圖 6.匯編源程序TCOUNT2S EQU 30HTCNT02S EQU 31HID EQU 32HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV TCOUNT2S,#00HMOV TCNT02S,#00HMOV ID,#00HMOV TMOD,#01HMOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256SETB TR0SETB ET0SETB EA
31、SJMP $INT_T0: MOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256INC TCOUNT2SMOV A,TCOUNT2SCJNE A,#40,NEXTMOV TCOUNT2S,#00HINC IDMOV A,IDCJNE A,#04H,NEXTMOV ID,#00HNEXT: INC TCNT02SMOV A,TCNT02SCJNE A,#4,DONEMOV TCNT02S,#00HMOV A,IDCJNE A,#00H,SID1CPL P1.0SJMP DONESID1: CJNE A,#01H,SID2CPL P1
32、.1SJMP DONESID2: CJNE A,#02H,SID3CPL P1.2SJMP DONESID3: CJNE A,#03H,SID4CPL P1.3SID4: SJMP DONEDONE: RETIEND實驗9 “嘀、嘀、”報警聲 1 實驗任務(wù) 用AT89S51單片機產(chǎn)生“嘀、嘀、”報警聲從P1.0端口輸出,產(chǎn)生頻率為1KHz,根據(jù)上面圖可知:1KHZ方波從P1.0輸出0.2秒,接著0.2秒從P1.0輸出電平信號,如此循環(huán)下去,就形成我們所需的報警聲了。 2 電路原理圖 圖1 3 程序設(shè)計方法 (1)生活中我們常常到各種各樣的報警聲,例如“嘀、嘀、”就是常見的一種聲音報警聲,但對于
33、這種報警聲,嘀0.2秒鐘,然后斷0.2秒鐘,如此循環(huán)下去,假設(shè)嘀聲的頻率為1KHz,則報警聲時序圖如下圖所示: 上述波形信號如何用單片機來產(chǎn)生呢? (2) 由于要產(chǎn)生上面的信號,我們把上面的信號分成兩部分,一部分為1KHZ方波,占用時間為0.2秒;另一部分為電平,也是占用0.2秒;因此,我們利用單片機的定時/計數(shù)器T0作為定時,可以定時0.2秒;同時,也要用單片機產(chǎn)生1KHZ的方波,對于1KHZ的方波信號周期為1ms,高電平占用0.5ms,低電平占用0.5ms,因此也采用定時器T0來完成0.5ms的定時;最后,可以選定定時/計數(shù)器T0的定時時間為0.5ms,而要定時0.2秒則是0.5ms的40
34、0倍,也就是說以0.5ms定時400次就達到0.2秒的定時時間了。 5 程序框圖 主程序框圖 中斷服務(wù)程序框圖 圖26 匯編源程序T02SA EQU 30HT02SB EQU 31HFLAG BIT 00HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV T02SA,#00HMOV T02SB,#00HCLR FLAGMOV TMOD,#01HMOV TH0,#(65536-500) / 256MOV TL0,#(65536-500) MOD 256SETB TR0SETB ET0SETB EASJMP $INT_T0:MOV TH0,#(65536-
35、500) / 256MOV TL0,#(65536-500) MOD 256INC T02SAMOV A,T02SACJNE A,#100,NEXTINC T02SBMOV A,T02SBCJNE A,#04H,NEXTMOV T02SA,#00HMOV T02SB,#00HCPL FLAGNEXT: JB FLAG,DONECPL P1.0DONE: RETIEND實驗10 8X8 LED點陣顯示技術(shù) 1 實驗任務(wù) 在8X8LED點陣上顯示柱形,讓其先從左到右平滑移動三次,其次從右到左平滑移動三次,再次從上到下平滑移動三次,最后從下到上平滑移動三次,如此循環(huán)下去。 2 電路原理圖 3 程序設(shè)
36、計內(nèi)容 (1) 8X8點陣LED工作原理說明 8X8點陣LED結(jié)構(gòu)如下圖所示: 圖2從圖2中可以看出,8X8點陣共需要64個發(fā)光二極管組成,且每個發(fā)光二極管是放置在行線和列線的交叉點上,當(dāng)對應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮;因此要實現(xiàn)一根柱形的亮法,如圖49所示,對應(yīng)的一列為一根豎柱,或者對應(yīng)的一行為一根橫柱,因此實現(xiàn)柱的亮的方法如下所述: 一根豎柱:對應(yīng)的列置1,而行則采用掃描的方法來實現(xiàn)。 一根橫柱:對應(yīng)的行置0,而列則采用掃描的方法來實現(xiàn)。 5匯編源程序ORG 00HSTART: NOPMOV R3,#3LOP2: MOV R4,#8MOV R2,#0LOP1: M
37、OV P1,#0FFHMOV DPTR,#TABAMOV A,R2MOVC A,A+DPTRMOV P3,AINC R2LCALL DELAYDJNZ R4,LOP1DJNZ R3,LOP2MOV R3,#3LOP4: MOV R4,#8MOV R2,#7LOP3: MOV P1,#0FFHMOV DPTR,#TABAMOV A,R2MOVC A,A+DPTRMOV P3,ADEC R2LCALL DELAYDJNZ R4,LOP3DJNZ R3,LOP4MOV R3,#3LOP6: MOV R4,#8MOV R2,#0LOP5: MOV P3,#00HMOV DPTR,#TABBMOV A,
38、R2MOVC A,A+DPTRMOV P1,AINC R2LCALL DELAYDJNZ R4,LOP5DJNZ R3,LOP6MOV R3,#3LOP8: MOV R4,#8MOV R2,#7LOP7: MOV P3,#00HMOV DPTR,#TABBMOV A,R2MOVC A,A+DPTRMOV P1,ADEC R2LCALL DELAYDJNZ R4,LOP7DJNZ R3,LOP8LJMP STARTDELAY: MOV R5,#10D2: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABA: DB 0FEH,
39、0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FHTABB: DB 01H,02H,04H,08H,10H,20H,40H,80HEND實驗11電子琴 1 實驗任務(wù) (1)由4X4組成16個按鈕矩陣,設(shè)計成16個音。 (2)可隨意彈奏想要表達的音樂。 2 電路原理圖 圖1 3 相關(guān)程序內(nèi)容 (1)4X4行列式鍵盤識別; (2)音樂產(chǎn)生的方法; 一首音樂是許多不同的音階組成的,而每個音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機來產(chǎn)生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來產(chǎn)生這樣方波頻率信號,因此,我們只
40、要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可。現(xiàn)在以單片機12MHZ晶振為例,例出高中低音符與單片機計數(shù)T0相關(guān)的計數(shù)值如下表所示 音符頻率(HZ)簡譜碼(T值)音符頻率(HZ)簡譜碼(T值)低1DO26263628# 4 FA#74064860#1DO#27763731中 5 SO78464898低2RE29463835# 5 SO#83164934#2 RE#31163928中 6 LA88064968低 3 M33064021# 693264994低 4 FA34964103中 7 SI98865030# 4 FA#37064185高 1 DO104665058低 5 SO39264260#
41、 1 DO#110965085# 5 SO#41564331高 2 RE117565110低 6 LA44064400# 2 RE#124565134# 646664463高 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 LA176065252中 3 M65964777# 6186565268中 4 FA69864820高 7 SI196765
42、283下面我們要為這個音符建立一個表格,有助于單片機通過查表的方式來獲得相應(yīng)的數(shù)據(jù)低音019之間,中音在2039之間,高音在4059之間 TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0 DW 0,63731,63928,0,64185,64331,64463,0,0,0 DW 0,64580,64684,64777,64820,64898,64968,65030,0,0 DW 0,64633,64732,0,64860,64934,64994,0,0,0 DW 0,65058,65110,65157,65178,65217,6
43、5252,65283,0,0 DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 0 2、音樂的音拍,一個節(jié)拍為單位(C調(diào)) 曲調(diào)值DELAY曲調(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對于不同的曲調(diào)我們也可以用單片機的另外一個定時/計數(shù)器來完成。 下面就用AT89S51單片機產(chǎn)生一首“生日快樂”歌曲來說明單片機如何產(chǎn)生的。 在這個程序中用到了兩個定時/計數(shù)器來完成的。其中T0用來產(chǎn)生音符頻率,T1用來產(chǎn)生音拍。 5 程序框圖 6 匯編源程序KEYBUF EQU 30HSTH0
44、EQU 31HSTL0 EQU 32HTEMP EQU 33HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV TMOD,#01HSETB ET0SETB EAWAIT:MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1MOV KEYBUF,#0LJMP DK1NK1: CJNE A,#0DH,NK2MOV KEYBUF,#
45、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,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 TR0DK1A: M
46、OV A,P3ANL A,#0FHXRL A,#0FHJNZ DK1ACLR TR0NOKEY1:MOV P3,#0FFHCLR P3.5MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2MOV A,P3ANL A,#0FHCJNE A,#0EH,NK5MOV KEYBUF,#4LJMP DK2NK5: CJNE A,#0DH,NK6MOV KEYBUF,#5LJMP DK2NK6: CJNE A,#0BH,NK7MOV KEYBUF,#6LJMP 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,#TABLE1M
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 離休人員服務(wù)管理辦法
- 引進教材選用管理辦法
- 如何編制工序管理辦法
- 育嬰員技能培訓(xùn)實操課件
- 藥店養(yǎng)護崗前培訓(xùn)課件
- 電氣焊培訓(xùn)課件
- 員工精神培訓(xùn)課件狼
- 肢體氣壓護理課件
- 磁共振在骨關(guān)節(jié)中的應(yīng)用
- 福州3年級期末數(shù)學(xué)試卷
- 陜西省安全生產(chǎn)條例
- 《不寧腿綜合征》課件
- 玻璃瓶裝飾行業(yè)前景分析
- 部編版道德與法治小升初一二三四五六年級全冊復(fù)習(xí)簡答題100道匯編(附答案)
- 頸腰椎病預(yù)防及診治
- 商業(yè)保理行業(yè)營銷策略方案
- YMO青少年數(shù)學(xué)思維28屆五年級全國總決賽試卷
- 《掃描電子顯微鏡》課件
- 水利水電工程施工截流設(shè)計說明書
- 維修電工高級技師論文-
- (完整版)新能源汽車充電樁工程施工方案
評論
0/150
提交評論