Proteus仿真單片機(jī)實(shí)驗(yàn)[共47頁]
《Proteus仿真單片機(jī)實(shí)驗(yàn)[共47頁]》由會(huì)員分享,可在線閱讀,更多相關(guān)《Proteus仿真單片機(jī)實(shí)驗(yàn)[共47頁](47頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 目錄 引言 1 實(shí)驗(yàn)1 PROTUES環(huán)境及LED閃爍綜合實(shí)驗(yàn) 6 實(shí)驗(yàn)2 多路開關(guān)狀態(tài)指示 9 實(shí)驗(yàn)3 報(bào)警產(chǎn)生器 12 實(shí)驗(yàn)4 I/O并行口直接驅(qū)動(dòng)LED顯示 15 實(shí)驗(yàn)5 按鍵識(shí)別方法之一 18 實(shí)驗(yàn)6 一鍵多功能按鍵識(shí)別技術(shù) 21 實(shí)驗(yàn)7 定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù) 24 實(shí)驗(yàn)8定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù) 27 實(shí)驗(yàn)9 “嘀、嘀、……”報(bào)警聲 31 實(shí)驗(yàn)10 8X8 LED點(diǎn)陣顯示技術(shù) 35 實(shí)驗(yàn)11電子琴 39 引言? 單片機(jī)體積小,重量輕,具有很強(qiáng)的靈活性而且價(jià)格便宜,具有邏輯判斷,定時(shí)計(jì)數(shù)等多種功能,廣泛應(yīng)用于儀器儀表,家用電器,
2、醫(yī)用設(shè)備的智能化管理和過程控制等領(lǐng)域。以單片機(jī)為核心的嵌入式系統(tǒng)已經(jīng)成為目前電子設(shè)計(jì)最活躍的領(lǐng)域之一。在嵌入式系統(tǒng)的中,開發(fā)板成本高,特別是對于大量的初學(xué)者而言,還可能由于設(shè)計(jì)的錯(cuò)誤導(dǎo)致開發(fā)板損壞。利用Proteus我們可以很好地解決這個(gè)問題,由此我們可以快速地建立一個(gè)單片機(jī)仿真系統(tǒng)。 1. Proteus介紹 Proteus是英國Labcenter?Electronics公司開發(fā)的一款電路仿真軟件,軟件由兩部分組成:一部分是智能原理圖輸入系統(tǒng)ISIS(Intelligent?Schematic?Input?System)和虛擬系統(tǒng)模型VSM(Virtual?Model?Syste
3、m);另一部分是高級布線及編輯軟件ARES (Advanced??Routing?and?Editing?Software)也就是PCB。 1.1?Proteus?VSM的仿真 Proteus可以仿真模擬電路及數(shù)字電路,也可以仿真模擬數(shù)字混合電路。? Proteus可提供30多種元件庫,超過8000種模擬、數(shù)字元器件??梢园凑赵O(shè)計(jì)的要求選擇不同生產(chǎn)廠家的元器件。此外,對于元器件庫中沒有的元件,設(shè)計(jì)者也可以通過軟件自己創(chuàng)建。 除擁有豐富的元器件外,Proteus還提供了各種虛擬儀器,如常用的電流表,電壓表,示波器,計(jì)數(shù)/定時(shí)/頻率計(jì),SPI調(diào)試器等虛擬終端。支持圖形化的分析功能等。
4、 Proteus特別適合對嵌入式系統(tǒng)進(jìn)行軟硬件協(xié)同設(shè)計(jì)與仿真,其最大的特點(diǎn)是可以仿真8051,PIA,AVR,ARM等多種系列的處理器。Protues包含強(qiáng)大的調(diào)試工具,具有對寄存器和存儲(chǔ)器、斷點(diǎn)和單步模式IAR?C-SPY, Keil, MPLAB等開發(fā)工具的源程序進(jìn)行調(diào)試的功能;能夠觀察代碼在仿真硬件上的實(shí)時(shí)運(yùn)行效果;對顯示,按鈕,鍵盤等外設(shè)的交互可視化進(jìn)行仿真。 1.2?Proteus?PCB Proteus?的PCB設(shè)計(jì)除了有自動(dòng)布線仿真功能外,還集成了PCB設(shè)計(jì),支持多達(dá)16個(gè)布線層,可以任意角度放置元件和焊接連線;集成了高智能的布線算法,可以方便地進(jìn)行PCB設(shè)計(jì)。 2.?
5、一個(gè)基于Protesus的單片機(jī)實(shí)例 2.1?軟件的編寫 本例題采用8個(gè)LED,編寫程序使之閃爍起來。 軟件的編寫是采用匯編語言,芯片的型號(hào)選擇AT89C51, 編寫LED.ASM文件,利用Proteus本身的51匯編功能進(jìn)行編譯,編譯成功后生成LED.hex文件。 2.2?繪制電路圖 運(yùn)行Proteus的ISIS,進(jìn)入仿真軟件的主界面,如圖1所示。主界面分為菜單欄,工具欄,模型顯示窗口,模型選擇區(qū),元件列表區(qū)等。 圖1?ISIS啟動(dòng)界面 通過左側(cè)的工具欄區(qū)的P(從庫中選擇元件)命令,在Pick?devices窗口中選擇系統(tǒng)所需元器件,還可以選擇元件的類別,生產(chǎn)廠家等。本例所需主
6、要元器件有:AT89C51芯片,電阻、電容、石英晶振和發(fā)光二極管,詳見表1。 表1?元器件清單 選擇元器件后連接圖2所示電路。 圖2??電路原理圖 Microproccessor?ICs類的芯片的引腳與實(shí)際的芯片基本相同,?唯一的差別是隱去了GND和VCC引腳,系統(tǒng)默認(rèn)的是把它們分別連接到地和+5V直流電源。故在電路連線時(shí)可以不考慮電源和地的連接。 電路連接完成后,選中AT89C51單擊鼠標(biāo)左鍵,打開“Edit?Component”對話窗口如圖3所示,可以直接在“Clock?Frequency”后進(jìn)行頻率設(shè)定,設(shè)定單片機(jī)的時(shí)鐘頻率為12MHz。在“Add/remove sourc
7、e file”欄中選擇已經(jīng)編好的LED.asm文件,然后單擊“OK”按鈕保存設(shè)計(jì)。至此,就可以進(jìn)行單片機(jī)的仿真。 圖?3???單片機(jī)屬性的設(shè)定 2.3 Proteus仿真結(jié)果 單片機(jī)的仿真結(jié)果圖如圖4,模擬信號(hào)經(jīng)A/D轉(zhuǎn)換后,結(jié)果送入單片機(jī),再在數(shù)碼管上顯示;通過調(diào)節(jié)可調(diào)電阻的阻值,可以得到不同的顯示結(jié)果。仿真結(jié)果表明,系統(tǒng)達(dá)到了預(yù)先的設(shè)計(jì)要求。 在仿真的過程中每個(gè)管腳旁邊會(huì)出現(xiàn)一個(gè)小方塊,紅色的方快表示高電平,藍(lán)色的表示低電平。?通過方快顏色的變化可以很方便地知道每個(gè)管腳電平的變化,從而能對系統(tǒng)的運(yùn)行有更直觀的了解,這對程序的調(diào)試有很大的幫助。? 圖4?仿真結(jié)果 3.總
8、結(jié) 本文結(jié)合一個(gè)LED閃爍的單片機(jī)電路詳細(xì)說明了Proteus在單片機(jī)開發(fā)中的應(yīng)用。可以看出,Proteus功能十分強(qiáng)大,能仿真各種數(shù)字模擬電路,且操作簡單,使用方便。能快速地進(jìn)行單片機(jī)仿真,加快系統(tǒng)開發(fā)的過程,降低開發(fā)成本。 47 實(shí)驗(yàn)1 PROTUES環(huán)境及LED閃爍綜合實(shí)驗(yàn) 1. 實(shí)驗(yàn)任務(wù) 做單一燈的左移右移,硬件電路如圖所示,八個(gè)發(fā)光二極管L1-L8分別接在單片機(jī)的P1.0-P1.7接口上,輸出“0”時(shí),發(fā)光二極管亮,開始時(shí)P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重復(fù)循環(huán)。 2. 電路原理圖 圖1 3.
9、程序設(shè)計(jì)內(nèi)容 我們可以運(yùn)用輸出端口指令MOV P1,A或MOV P1,#DATA,只要給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達(dá)到輸出控制的動(dòng)作。 每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表1所示 : P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 說明 L8 L7 L6 L5 L4 L3 L2 L1 1 1 1 1 1 1 1 0 L1亮 1 1 1 1 1 1 0 1 L2亮 1 1 1 1 1 0 1 1 L3亮 1 1 1 1 0 1 1
10、 1 L4亮 1 1 1 0 1 1 1 1 L5亮 1 1 0 1 1 1 1 1 L6亮 1 0 1 1 1 1 1 1 L7亮 0 1 1 1 1 1 1 1 L8亮 4. 程序框圖 圖2 5. 匯編源程序 ORG 0 START: MOV R2,#8 MOV A,#0FEH SETB C LOOP: MOV P1,A LCALL DELAY RLC A DJNZ R2,LOOP MOV R2,#8 LOOP1: MOV P1,
11、A LCALL DELAY RRC A DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#20 ; D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END 實(shí)驗(yàn)2 多路開關(guān)狀態(tài)指示 1. 實(shí)驗(yàn)任務(wù) 如圖1所示,AT89S51單片機(jī)的P1.0-P1.3接四個(gè)發(fā)光二極管L1-L4,P1.4-P1.7接了四個(gè)開關(guān)K1-K4,編程將開關(guān)的狀態(tài)反映到發(fā)光二極管上。(開關(guān)閉合,對應(yīng)的燈亮,開關(guān)斷開,對應(yīng)的燈滅)。 2. 電路原理圖 圖1
12、 3. 程序設(shè)計(jì)內(nèi)容 3.1 開關(guān)狀態(tài)檢測 對于開關(guān)狀態(tài)檢測,相對單片機(jī)來說,是輸入關(guān)系,我們可輪流檢測每個(gè)開關(guān)狀態(tài),根據(jù)每個(gè)開關(guān)的狀態(tài)讓相應(yīng)的發(fā)光二極管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令來完成;也可以一次性檢測四路開關(guān)狀態(tài),然后讓其指示,可以采用MOV A,P1指令一次把P1端口的狀態(tài)全部讀入,然后取高4位的狀態(tài)來指示。 3.2 輸出控制 根據(jù)開關(guān)的狀態(tài),由發(fā)光二極管L1-L4來指示,我們可以用SETB P1.X和CLR P1.X指令來完成,也可以采用MOV P1,#1111XXXXB方法一次指示。 4. 程序框圖 讀P1口數(shù)據(jù)
13、到ACC中 ACC內(nèi)容右移4次 ACC內(nèi)容與F0H相或 ACC內(nèi)容送入P1口 圖2 5. 解決方案 方法一(匯編源程序) ORG 00H START: MOV A,P1 ANL A,#0F0H RR A RR A RR A RR A ORl A,#0F0H MOV P1,A SJMP START END 方法二(匯編源程序) ORG 00H START: JB P1.4,NEXT1 CLR P1.0 SJMP NEX1 NEXT1: SETB P1.0 NEX1: JB P1.5,NEXT2 CLR P1.1 S
14、JMP NEX2 NEXT2: SETB P1.1 NEX2: JB P1.6,NEXT3 CLR P1.2 SJMP NEX3 NEXT3: SETB P1.2 NEX3: JB P1.7,NEXT4 CLR P1.3 SJMP NEX4 NEXT4: SETB P1.3 NEX4: SJMP START END 實(shí)驗(yàn)3 報(bào)警產(chǎn)生器 1. 實(shí)驗(yàn)任務(wù) 用P1.0輸出1KHz和500Hz的音頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器,作報(bào)警信號(hào),要求1KHz信號(hào)響100ms,500Hz信號(hào)響200ms,交替進(jìn)行,P1.7接一開關(guān)進(jìn)行控制,當(dāng)開關(guān)合上響報(bào)警信號(hào),當(dāng)開關(guān)斷開告警
15、信號(hào)停止,編出程序。 2. 電路原理圖 圖1 3. 程序設(shè)計(jì)內(nèi)容 3.1 信號(hào)產(chǎn)生的方法 500Hz信號(hào)周期為2ms,信號(hào)電平為每1ms變反1次,1KHz的信號(hào)周期為1ms,信號(hào)電平每500us變反1次; 4. 程序框圖 圖2 5. 匯編源程序 FLAG BIT 00H ORG 00H START: JB P1.7,START JNB FLAG,NEXT MOV R2,#200 DV: CPL P1.0 LCALL DELY500 LCALL DELY500 DJNZ R2,DV CPL FLAG NEXT: MOV
16、R2,#200 DV1: CPL P1.0 LCALL DELY500 DJNZ R2,DV1 CPL FLAG SJMP START DELY500: MOV R7,#250 LOOP: NOP DJNZ R7,LOOP RET END 實(shí)驗(yàn)4 I/O并行口直接驅(qū)動(dòng)LED顯示 1. 實(shí)驗(yàn)任務(wù) 如圖1所示,利用AT89S51單片機(jī)的P0端口的P0.0-P0.7連接到一個(gè)共陰數(shù)碼管的a-h(huán)的筆段上,數(shù)碼管的公共端接地。在數(shù)碼管上循環(huán)顯示0-9數(shù)字,時(shí)間間隔0.2秒。 2. 電路原理圖 圖1 3 程序設(shè)計(jì)內(nèi)容 (1) LED數(shù)碼顯示原理
17、 七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽極型。 LED數(shù)碼管的g~a七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼見表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
18、” 71H (2) 由于顯示的數(shù)字0-9的字形碼沒有規(guī)律可循,只能采用查表的方式來完成我們所需的要求了。這樣我們按著數(shù)字0-9的順序,把每個(gè)數(shù)字的筆段代碼按順序排好!建立的表格如下所示:TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。 4.程序框圖 圖2 5. 匯編源程序 ORG 0 START: MOV R1,#00H NEXT: MOV A,R1 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A LCALL DEL
19、AY INC R1 CJNE R1,#10,NEXT LJMP START DELAY: MOV R5,#20 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 實(shí)驗(yàn)5 按鍵識(shí)別方法之一 1. 實(shí)驗(yàn)任務(wù) 每按下一次開關(guān)SP1,計(jì)數(shù)值加1,通過AT89S51單片機(jī)的P1端口的P1.0到P1.3顯示出其的二進(jìn)制計(jì)數(shù)值。 2. 電路原理圖 3程序設(shè)計(jì)方
20、法 (1)其實(shí),作為一個(gè)按鍵從沒有按下到按下以及釋放是一個(gè)完整的過程,也就是說,當(dāng)我們按下一個(gè)按鍵時(shí),總希望某個(gè)命令只執(zhí)行一次,而在按鍵按下的 過程中,不要有干擾進(jìn)來,因?yàn)?,在按下的過程中,一旦有干擾過來,可能造成誤觸發(fā)過程,這并不是我們所想要的。因此在按鍵按下的時(shí)候, 圖2 要把我們手上的干擾信號(hào)以及按鍵的機(jī)械接觸等干擾信號(hào)給濾除掉,一般情況下,我們可以采用電容來濾除掉這些干擾信號(hào),但實(shí)際上,會(huì)增加硬件成本及硬件電路的體積,這是我們不希望,總得有個(gè)辦法解決這個(gè)問題,因此我們可以采用軟件濾波的方法去除這些干擾 信號(hào),一般情況下,一個(gè)按鍵按下的時(shí)候,總是在按下的時(shí)
21、刻存在著一定的干擾信號(hào),按下之后就基本上進(jìn)入了穩(wěn)定的狀態(tài)。具體的一個(gè)按鍵從按下到釋放的全過程的信號(hào)圖如上圖所示: 從圖中可以看出,我們在程序設(shè)計(jì)時(shí),從按鍵被識(shí)別按下之后,延時(shí)5ms以上,從而避開了干擾信號(hào)區(qū)域,我們再來檢測一次,看按鍵是否真得已經(jīng)按下,若真得已經(jīng)按下,這時(shí)肯定輸出為低電平,若這時(shí)檢測到的是高電平,證明剛才是由于干擾信號(hào)引起的誤觸發(fā),CPU就認(rèn)為是誤觸發(fā)信號(hào)而舍棄這次的按鍵識(shí)別過程。從而提高了系統(tǒng)的可靠性。 由于要求每按下一次,命令被執(zhí)行一次,直到下一次再按下的時(shí)候,再執(zhí)行一次命令,因此從按鍵被識(shí)別出來之后,我們就可以執(zhí)行這次的命令,所以要有一個(gè)等待按鍵釋放的過程,顯然釋
22、放的過程,就是使其恢復(fù)成高電平狀態(tài)。 (1)對于按鍵識(shí)別的指令,我們依然選擇如下指令JB BIT,REL指令是用來檢測BIT是否為高電平,若BIT=1,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序?;蛘呤恰NB BIT,REL指令是用來檢測BIT是否為低電平,若BIT=0,則程序轉(zhuǎn)向REL處執(zhí)行程序,否則就繼續(xù)向下執(zhí)行程序。 (2)但對程序設(shè)計(jì)過程中按鍵識(shí)別過程的框圖如右圖所示: 圖3 4. 程序框圖 圖4 6. 匯編源程序 ORG 0 START: MOV R1,#00H ;初始化R1為0,表示從0開始計(jì)數(shù) MOV
23、A,R1 ; CPL A ;取反指令 MOV P1,A ;送出P1端口由發(fā)光二極管顯示 REL: JNB P3.7,REL ;判斷SP1是否按下 LCALL DELAY10MS ;若按下,則延時(shí)10ms左右 JNB P3.7,REL ;再判斷SP1是否真得按下 INC R1 ;若真得按下,則進(jìn)行按鍵處理,使 MOV A,R1 ;計(jì)數(shù)內(nèi)容加1,并送出P1端口由 CPL A ;發(fā)光二極管顯示 MOV P1,A ; JNB P3.7,$ ;等待SP1釋放 SJMP REL ;繼續(xù)對K1按鍵掃描 DELAY
24、10MS: MOV R6,#20 ;延時(shí)10ms子程序 L1: MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RET END 實(shí)驗(yàn)6 一鍵多功能按鍵識(shí)別技術(shù) 1.實(shí)驗(yàn)任務(wù) 如圖1所示,開關(guān)SP1接在P3.7/RD管腳上,在AT89S51單片機(jī)的P1端口接有四個(gè)發(fā)光二極管,上電的時(shí)候,L1接在P1.0管腳上的發(fā)光二極管在閃爍,當(dāng)每一次按下開關(guān)SP1的時(shí)候,L2接在P1.1管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時(shí)候,L3接在P1.2管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時(shí)候,L4接在P1.3管腳上的發(fā)光二極管在閃爍,再按下開關(guān)SP1的時(shí)候,又
25、輪到L1在閃爍了,如此輪流下去。 2.電路原理圖 圖1 3.程序設(shè)計(jì)方法 (1)設(shè)計(jì)思想由來 在我們生活中,我們很容易通過這個(gè)叫張三,那個(gè)叫李四,另外一個(gè)是王五;那是因?yàn)槊總€(gè)人有不同的名子,我們就很快認(rèn)出,同樣,對于要通過一個(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在閃
26、爍時(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ì)的框圖。 4.程序框圖 圖2 5. 匯編源程序 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
27、,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: LJ
28、MP 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 實(shí)驗(yàn)7 定時(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開始。硬件電路如下圖所示 2. 電路原理圖 3.程序設(shè)計(jì)內(nèi)容 AT89S51單片機(jī)
29、的內(nèi)部16位定時(shí)/計(jì)數(shù)器是一個(gè)可編程定時(shí)/計(jì)數(shù)器,它既可以工作在13位定時(shí)方式,也可以工作在16位定時(shí)方式和8位定時(shí)方式。只要通過設(shè)置特殊功能寄存器TMOD,即可完成。定時(shí)/計(jì)數(shù)器何時(shí)工作也是通過軟件來設(shè)定TCON特殊功能寄存器來完成的。 現(xiàn)在我們選擇16位定時(shí)工作方式,對于T0來說,最大定時(shí)也只有65536us,即65.536ms,無法達(dá)到我們所需要的1秒的定時(shí),因此,我們必須通過軟件來處理這個(gè)問題,假設(shè)我們?nèi)0的最大定時(shí)為50ms,即要定時(shí)1秒需要經(jīng)過20次的50ms的定時(shí)。對于這20次我們就可以采用軟件的方法來統(tǒng)計(jì)了。 因此,我們設(shè)定TMOD=00000001B,即TMOD=0
30、1H 下面我們要給T0定時(shí)/計(jì)數(shù)器的TH0,TL0裝入預(yù)置初值,通過下面的公式可以計(jì)算出 TH0=(216-50000) / 256 TL0=(216-50000) MOD 256 當(dāng)T0在工作的時(shí)候,我們?nèi)绾蔚弥?0ms的定時(shí)時(shí)間已到,這回我們通過檢測TCON特殊功能寄存器中的TF0標(biāo)志位,如果TF0=1表示定時(shí)時(shí)間已到。 5. 程序框圖 圖2 6. 匯編源程序(查詢法) SECOND EQU 30H TCOUNT EQU 31H ORG 00H START
31、: MOV SECOND,#00H MOV TCOUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 DISP: MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOVC A,@A+DPTR MOV P2,A WAIT: JNB TF0,WAIT CLR TF0 MOV TH0,#(65536-50000) / 256 M
32、OV TL0,#(65536-50000) MOD 256 INC TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT MOV TCOUNT,#00H INC SECOND MOV A,SECOND CJNE A,#60,NEX MOV SECOND,#00H NEX: LJMP DISP NEXT: LJMP WAIT TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 實(shí)驗(yàn)8定時(shí)計(jì)數(shù)器T0作定時(shí)應(yīng)用技術(shù) 1. 實(shí)驗(yàn)任務(wù) 用AT89S51的定時(shí)/計(jì)數(shù)器T0產(chǎn)生2秒鐘的定時(shí),每當(dāng)
33、2秒定時(shí)到來時(shí),更換指示燈閃爍,每個(gè)指示閃爍的頻率為0.2秒,也就是說,開始L1指示燈以0.2秒的速率閃爍,當(dāng)2秒定時(shí)到來之后,L2開始以0.2秒的速率閃爍,如此循環(huán)下去。0.2秒的閃爍速率也由定時(shí)/計(jì)數(shù)器T0來完成。 2. 電路原理圖 3.程序設(shè)計(jì)內(nèi)容 (1)由于采用中斷方式來完成,因此,對于中斷源必須它的中斷入口地址,對于定時(shí)/計(jì)數(shù)器T0來說,中斷入口地址為000BH,因此在中斷入口地方加入長跳轉(zhuǎn)指令來執(zhí)行中斷服務(wù)程序。書寫匯編源程序格式如下所示: ORG 00H LJMP START ORG 0BH? ;定時(shí)/計(jì)數(shù)器T0中斷入口地址 LJMP INT_T0 ST
34、ART: NOP? ;主程序開始 . INT_T0: PUSH ACC? ;定時(shí)/計(jì)數(shù)器T0中斷服務(wù)程序 PUSH PSW POP PSW POP ACC RETI? ;中斷服務(wù)程序返回 END (2)定時(shí)2秒,采用16位定時(shí)50ms,共定時(shí)40次才可達(dá)到2秒,每50ms產(chǎn)生一中斷,定時(shí)的40次數(shù)在中斷服務(wù)程序中完成,同樣0.2秒的定時(shí),需要4次才可達(dá)到0.2秒。對于中斷程序,在主程序中要對中斷開中斷。 (3)由于每次2秒定時(shí)到時(shí),L1-L4要交替閃爍。采用ID來號(hào)來識(shí)別。當(dāng)ID=0時(shí),L1在閃爍,當(dāng)ID=1時(shí),L2在閃爍;當(dāng)ID=2時(shí),L3在閃爍;當(dāng)ID=3時(shí),L4在閃
35、爍 5. 程序框圖 T0中斷服務(wù)程序框圖 主程序框圖 6.匯編源程序 TCOUNT2S EQU 30H TCNT02S EQU 31H ID EQU 32H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV TCOUNT2S,#00H MOV TCNT02S,#00H MOV ID,#00H MOV TMOD,#01H MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 SETB ET0 S
36、ETB EA SJMP $ INT_T0: MOV TH0,#(65536-50000) / 256 MOV TL0,#(65536-50000) MOD 256 INC TCOUNT2S MOV A,TCOUNT2S CJNE A,#40,NEXT MOV TCOUNT2S,#00H INC ID MOV A,ID CJNE A,#04H,NEXT MOV ID,#00H NEXT: INC TCNT02S MOV A,TCNT02S CJNE A,#4,DONE MOV TCNT02S,#00H MOV A,ID CJNE A,#00H,SID1 CPL
37、 P1.0 SJMP DONE SID1: CJNE A,#01H,SID2 CPL P1.1 SJMP DONE SID2: CJNE A,#02H,SID3 CPL P1.2 SJMP DONE SID3: CJNE A,#03H,SID4 CPL P1.3 SID4: SJMP DONE DONE: RETI END 實(shí)驗(yàn)9 “嘀、嘀、……”報(bào)警聲 1. 實(shí)驗(yàn)任務(wù) 用AT89S51單片機(jī)產(chǎn)生“嘀、嘀、…”報(bào)警聲從P1.0端口輸出,產(chǎn)生頻率為1KHz,根據(jù)上面圖可知:1KHZ方波從P1.0輸出0.2秒,接著0.2秒從P1.0輸出電平信號(hào),如此循環(huán)下去,
38、就形成我們所需的報(bào)警聲了。 2. 電路原理圖 圖1 3. 程序設(shè)計(jì)方法 (1)生活中我們常常到各種各樣的報(bào)警聲,例如“嘀、嘀、…”就是常見的一種聲音報(bào)警聲,但對于這種報(bào)警聲,嘀0.2秒鐘,然后斷0.2秒鐘,如此循環(huán)下去,假設(shè)嘀聲的頻率為1KHz,則報(bào)警聲時(shí)序圖如下圖所示: 上述波形信號(hào)如何用單片機(jī)來產(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的方波,對于1KHZ的方波信
39、號(hào)周期為1ms,高電平占用0.5ms,低電平占用0.5ms,因此也采用定時(shí)器T0來完成0.5ms的定時(shí);最后,可以選定定時(shí)/計(jì)數(shù)器T0的定時(shí)時(shí)間為0.5ms,而要定時(shí)0.2秒則是0.5ms的400倍,也就是說以0.5ms定時(shí)400次就達(dá)到0.2秒的定時(shí)時(shí)間了。 5. 程序框圖 主程序框圖 中斷服務(wù)程序框圖 圖2 6. 匯編源程序 T02SA EQU 30H T02SB EQU 31H FLAG BIT 00H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV T02SA,#00H MOV T02SB,
40、#00H CLR FLAG MOV TMOD,#01H MOV TH0,#(65536-500) / 256 MOV TL0,#(65536-500) MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ INT_T0: MOV TH0,#(65536-500) / 256 MOV TL0,#(65536-500) MOD 256 INC T02SA MOV A,T02SA CJNE A,#100,NEXT INC T02SB MOV A,T02SB CJNE A,#04H,NEXT MOV T02SA,#00H MOV T02
41、SB,#00H CPL FLAG NEXT: JB FLAG,DONE CPL P1.0 DONE: RETI END 實(shí)驗(yàn)10 8X8 LED點(diǎn)陣顯示技術(shù) 1. 實(shí)驗(yàn)任務(wù) 在8X8 LED點(diǎn)陣上顯示柱形,讓其先從左到右平滑移動(dòng)三次,其次從右到左平滑移動(dòng)三次,再次從上到下平滑移動(dòng)三次,最后從下到上平滑移動(dòng)三次,如此循環(huán)下去。 2. 電路原理圖 3. 程序設(shè)計(jì)內(nèi)容 (1). 8X8 點(diǎn)陣LED工作原理說明 8X8點(diǎn)陣LED結(jié)構(gòu)如下圖所示: 圖2 從圖2中可以看出,8X8點(diǎn)陣共需要64個(gè)發(fā)光二極管組成,且每個(gè)發(fā)光二極管是放置在行線和列線的交叉點(diǎn)
42、上,當(dāng)對應(yīng)的某一列置1電平,某一行置0電平,則相應(yīng)的二極管就亮;因此要實(shí)現(xiàn)一根柱形的亮法,如圖49所示,對應(yīng)的一列為一根豎柱,或者對應(yīng)的一行為一根橫柱,因此實(shí)現(xiàn)柱的亮的方法如下所述: 一根豎柱:對應(yīng)的列置1,而行則采用掃描的方法來實(shí)現(xiàn)。 一根橫柱:對應(yīng)的行置0,而列則采用掃描的方法來實(shí)現(xiàn)。 5.匯編源程序 ORG 00H START: NOP MOV R3,#3 LOP2: MOV R4,#8 MOV R2,#0 LOP1: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,@A+DPTR MOV P3,A INC R2
43、 LCALL DELAY DJNZ R4,LOP1 DJNZ R3,LOP2 MOV R3,#3 LOP4: MOV R4,#8 MOV R2,#7 LOP3: MOV P1,#0FFH MOV DPTR,#TABA MOV A,R2 MOVC A,@A+DPTR MOV P3,A DEC R2 LCALL DELAY DJNZ R4,LOP3 DJNZ R3,LOP4 MOV R3,#3 LOP6: MOV R4,#8 MOV R2,#0 LOP5: MOV P3,#00H MOV DPTR,#TABB MOV A,R2 MOVC A,@A
44、+DPTR MOV P1,A INC R2 LCALL DELAY DJNZ R4,LOP5 DJNZ R3,LOP6 MOV R3,#3 LOP8: MOV R4,#8 MOV R2,#7 LOP7: MOV P3,#00H MOV DPTR,#TABB MOV A,R2 MOVC A,@A+DPTR MOV P1,A DEC R2 LCALL DELAY DJNZ R4,LOP7 DJNZ R3,LOP8 LJMP START DELAY: MOV R5,#10 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7
45、,$ DJNZ R6,D1 DJNZ R5,D2 RET TABA: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH TABB: DB 01H,02H,04H,08H,10H,20H,40H,80H END 實(shí)驗(yàn)11電子琴 1. 實(shí)驗(yàn)任務(wù) (1)由4X4組成16個(gè)按鈕矩陣,設(shè)計(jì)成16個(gè)音。 (2)可隨意彈奏想要表達(dá)的音樂。 2. 電路原理圖 圖1 3. 相關(guān)程序內(nèi)容 (1)4X4行列式鍵盤識(shí)別; (2)音樂產(chǎn)生的方法; 一首音樂是許多不同的音階組成的,而每個(gè)音階對應(yīng)著不同的頻率,這樣我們就可以利用
46、不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機(jī)來產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可?,F(xiàn)在以單片機(jī)12MHZ晶振為例,例出高中低音符與單片機(jī)計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如下表所示 音符 頻率(HZ) 簡譜碼(T值) 音符 頻率(HZ) 簡譜碼(T值) 低1 DO 262 63628 # 4 FA# 740 64860 #1 DO# 277 63731 中 5 SO 784 64898 低2 RE 294 63835 # 5 SO# 831
47、 64934 #2 RE# 311 63928 中 6 LA 880 64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6
48、466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中 1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高
49、7 SI 1967 65283 下面我們要為這個(gè)音符建立一個(gè)表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù) 低音0-19之間,中音在20-39之間,高音在40-59之間 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,
50、65058,65110,65157,65178,65217,65252,65283,0,0 DW 0,65085,65134,0,65198,65235,65268,0,0,0 DW 0 2、音樂的音拍,一個(gè)節(jié)拍為單位(C調(diào)) 曲調(diào)值 DELAY 曲調(diào)值 DELAY 調(diào)4/4 125ms 調(diào)4/4 62ms 調(diào)3/4 187ms 調(diào)3/4 94ms 調(diào)2/4 250ms 調(diào)2/4 125ms 對于不同的曲調(diào)我們也可以用單片機(jī)的另外一個(gè)定時(shí)/計(jì)數(shù)器來完成。 下面就用AT89S51單片機(jī)產(chǎn)生一首“生日快樂”歌曲來說明單片機(jī)如何產(chǎn)生
51、的。 在這個(gè)程序中用到了兩個(gè)定時(shí)/計(jì)數(shù)器來完成的。其中T0用來產(chǎn)生音符頻率,T1用來產(chǎn)生音拍。 5. 程序框圖 6. 匯編源程序 KEYBUF EQU 30H STH0 EQU 31H STL0 EQU 32H TEMP EQU 33H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV TMOD,#01H SETB ET0 SETB EA WAIT: MOV P3,#0FFH CLR P3.4 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 LCALL DE
52、LY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK1 MOV KEYBUF,#0 LJMP DK1 NK1: CJNE A,#0DH,NK2 MOV KEYBUF,#1 LJMP DK1 NK2: CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1 NK3: CJNE A,#07H,NK4 MOV KEYBUF,#3 LJMP DK1 NK4: NOP DK1: MOV A,KEYBUF MOV DPTR,#TA
53、BLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,@A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK1A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK1A CLR TR0 NOKEY1: MOV P3,#0FFH CLR P3.5 MOV
54、 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,#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 LJ
55、MP DK2 NK8: NOP DK2: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,@A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK2A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ D
56、K2A CLR TR0 NOKEY2: MOV P3,#0FFH CLR P3.6 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,NK9 MOV KEYBUF,#8 LJMP DK3 NK9: CJNE A,#0DH,NK10 MOV KEYBUF,#9 LJMP DK3 NK10: CJNE A,#0BH,NK11 MOV KEYBUF,
57、#10 LJMP DK3 NK11: CJNE A,#07H,NK12 MOV KEYBUF,#11 LJMP DK3 NK12: NOP DK3: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV STH0,A MOV TH0,A INC TEMP MOV A,TEMP MOVC A,@A+DPTR MOV STL0,A MOV TL0,A
58、 SETB TR0 DK3A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK3A CLR TR0 NOKEY3: MOV P3,#0FFH CLR P3.7 MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 LCALL DELY10MS MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 MOV A,P3 ANL A,#0FH CJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4 NK13: CJNE A,#0DH,NK14
59、 MOV KEYBUF,#13 LJMP DK4 NK14: CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4 NK15: CJNE A,#07H,NK16 MOV KEYBUF,#15 LJMP DK4 NK16: NOP DK4: MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,KEYBUF MOV B,#2 MUL AB MOV TEMP,A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV STH0,A MOV TH0,A
60、 INC TEMP MOV A,TEMP MOVC A,@A+DPTR MOV STL0,A MOV TL0,A SETB TR0 DK4A: MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK4A CLR TR0 NOKEY4: LJMP WAIT DELY10MS: MOV R6,#10 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET INT_T0: MOV TH0,STH0 MOV TL0,STL0 CPL P1.0 RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H TABLE1: DW 64021,64103,64260,64400 DW 64524,64580,64684,64777 DW 64820,64898,64968,65030 DW 65058,65110,65157,65178 END
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當(dāng)頭廉字入心爭當(dāng)公安隊(duì)伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅(jiān)守廉潔底線
- 2025做擔(dān)當(dāng)時(shí)代大任的中國青年P(guān)PT青年思想教育微黨課
- 2025新年工作部署會(huì)圍繞六個(gè)干字提要求
- XX地區(qū)中小學(xué)期末考試經(jīng)驗(yàn)總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展?fàn)I造風(fēng)清氣正的環(huán)境
- 冬季消防安全知識(shí)培訓(xùn)冬季用電防火安全
- 2025加強(qiáng)政治引領(lǐng)(政治引領(lǐng)是現(xiàn)代政黨的重要功能)
- 主播直播培訓(xùn)直播技巧與方法
- 2025六廉六進(jìn)持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個(gè)人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領(lǐng)鄉(xiāng)村振興工作總結(jié)
- XX中小學(xué)期末考試經(jīng)驗(yàn)總結(jié)(認(rèn)真復(fù)習(xí)輕松應(yīng)考)
- 幼兒園期末家長會(huì)長長的路慢慢地走