課程設計(論文)基于單片機音樂倒數定時器的設計_第1頁
課程設計(論文)基于單片機音樂倒數定時器的設計_第2頁
課程設計(論文)基于單片機音樂倒數定時器的設計_第3頁
課程設計(論文)基于單片機音樂倒數定時器的設計_第4頁
課程設計(論文)基于單片機音樂倒數定時器的設計_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、華北科技學院課程設計 目錄一、設計要求1二、設計目的1三、設計的具體實現21系統概述22單元電路設計33軟件程設計和調試7四、結論和展望24五、心得體會及建議25六、附錄26七、參考文獻27基于單片機音樂倒數定時器的設計報告一、 設計要求利用單片機結合lcd顯示器設計一個倒數計時器,可以放在家中使用,例如煮方便面、煮開水或小睡片刻等,做一小段時間計時。當倒數計時為0時,則發出一段音樂,通知倒數終了,該做重要的事情了。具體要求:文字型lcd(16*2)顯示目前倒數的時間;顯示格式為“time 分分:秒秒”;具有4個按鍵操作來設置現在想要倒數的時間;一旦按鍵后則開始倒數計時,當計時為零則發出一陣音

2、樂聲響,程序執行后工作指示燈led閃動,表示程序開始執行,七段顯示器顯示“0500”,按下操作鍵k1k4動作如下:操作鍵k1,可調整倒數時間1min60min;操作鍵k2,設置倒數計時時間為5min,顯示“0500”;操作鍵k3,設置倒數計時時間為10min,顯示“1000”;操作鍵k4,設置倒數計時時間為20min,顯示“2000”, reset后按下k1顯示如下:up down oktime 04:59倒數時間操作鍵k2:增加倒數計時1min;操作鍵k3,減少倒數計時1min,操作鍵k4:設置完成。一旦按鍵后則開始倒數計時,當計時為0時則發出一段音樂,同時繼電器啟動二、 設計目的1、通過該

3、設計能提高學生分析解決問題的能力。2、了解模擬電路及數字電路的相關知識。3、學習單片機定時器時間計時處理、按鍵掃描、lcd顯示及音樂旋律演奏的設計方法。 三、設計的具體實現 1系統概述1.1 總體方案論證要實現音樂倒數定時器可以用兩種方案實現。方案一:利用prog-110可編程控制器prog-110 可編程器,是一種用數字簡碼控制的產品,它的特點是:自帶一套用于輸入數碼的按鍵和顯示程序的數碼管,只要我們現場輸入一列2位數碼,編制的程序即能完成,即編,即用。每一種數字簡碼控制器,它都自帶一套系統軟件,每一套系統軟件都有一套相對應的指令表,配套的指令表表明,只要輸入什么樣的數,程序將去做什么事,輸

4、入一列數,它就會按次序去完成你要求它做的所有的事。但是首先prog-110模塊總共只有6個i/o端口,這就必須擴展模塊端口,用兩部以上模塊串聯,但花錢要多;其次是程序過長,prog-110模塊的e2prom存儲器24c01只可輸入128步程序;第三是受prog-110模塊跳轉指令步數的限制。方案二:利用單片機、lcd顯示器和壓電喇叭單片機具有性能高、速度快、體積小、價格低、穩定可靠、應用廣泛、通用性強等突出優點。它在硬件結構、指令系統、i/o端口、功率消耗及可靠性等方面均有其獨特之處,其最顯著的特點之一就是具有非常有效的控制功能。而lcd顯示器具有體積小、重量輕、工作電壓低、功耗極低、顯示內容

5、豐富、穩定可靠、成本低、控制驅動方便、接口簡單易用、模塊化結構緊湊等特點。綜上所述,按照設計要求我選擇第二種方案,即利用單片機和lcd顯示器來實現定時倒數,通過壓電喇叭來發出音樂。 1.2 單片機選擇方案采用8051單片機8051單片機內部包含一個8位cpu、一個片內振蕩器及時鐘電路、rom程序存儲器、ram數據存儲器、兩個16位定時器/計數器、可分別尋址64kb的程序存儲器空間和64kb的數據存儲器空間、32條可編程的i/o口線(4個8位并行i/o端口)、一個可編程全雙工串行口、具有5個中斷源和2個優先級的中斷結構。可以有效實現本次設計中要求的各項功能。具體的設計流程可見圖1:2單元電路設計

6、2.1控制電路主程序開始繼電器off初始化變量及lcd接口初始化定時器lcd閃動表示程序開始執行lcd掃描顯示器更新倒數時間數據,檢查鬧鈴時間是否到了是否按k1,k2,k3,k4鍵k1:調整倒數時間k2:倒數計時時間為5mink3:倒數計時時間為10mink4:倒數計時時間為20minyn圖1 設計流程圖2單元電路設計2.1控制電路倒數計數器的控制電路可以見附圖,其中主要分為以下幾部分單片機80518051 基本資料如下:圖2 8051引腳圖 8051主要使用引腳功能說明如下:l 8051的引腳40接+5v電源,引腳20接電源地線。l 傳統8051工作時鐘的最高為12mhz。l ea引腳低電平

7、動作用來存取外部程序rom控制。l ea接地,由外部程序rom來執行程序。l ea接高電平,由內部rom來執行程序。l 開機時必須加入芯片重置信號。(reset)l reset信號高電平動作,高電平時產生芯片重置。l reset信號低電平時,由程序rom地址0開始執行程序。在本次設計中采用的8051外接電路如圖3所示:圖3 8051外接電路圖8051系列的單片機的時鐘方式分為內部方式和外部方式。內部方式就是在單片機的引腳18、19外接晶振,就夠成了自激振蕩器在單片機內部產生時鐘脈沖信號。外部時鐘方式是把外部已經有的時鐘信號引入到單片機內部。時鐘電路在計算機系統中起著非常重要的作用,是保證系統正

8、常工作的基礎。在一個單片機應用系統中,時鐘有兩方面的含義:一是指為保障系統正常工作的基準振蕩定時信號,主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機系統工作的快慢;二是指系統的標準定時時鐘,即定時時間。用一個12mhz晶振和兩個30pf瓷片電容組成,為單片機提供標準時鐘,其中兩個瓷片電容可以增加電路的穩定性,可以抗噪聲增加穩定性,不容易死機。在8051中之所以采用高性能的振蕩電路,因為:1.單片機電子鐘的計時脈沖基準是由外部晶振的頻率經過12分頻后提供,采用內部的定時/計數器來實現計時功能。所以,外接晶振頻率精確度直接影響電子鐘計時的準確性。 2.單片機電子鐘利用內部定時/計數器溢出產生

9、中斷(12m晶振一般為50ms)再乘以相應的倍率來實現秒、分、時的轉換。大家都知道從定時/計數器產生中斷請求到響 應中斷需要3-8個機器周期,定時中斷子程序中的數據入棧和重裝定時/計數器的初值還需要占用數個機器周期,還有從中斷入口轉到中斷子程序也要占用一定的機器周期。工作指示燈led,送出低電平時,led點亮,高電平時則使led熄滅。即l 程序執行中有情況產生時,led閃動一下。l 用于狀態區分,如狀態1閃動一下,狀態2閃動兩下。l 程序執行中遇到特殊錯誤時,持續閃動。lcd顯示器圖4 lcd芯片接線圖本次設計使用的倒數計時lcd控制,使用的是16字*2行設計。圖4中為4位控制電路,以8051

10、 p0的6調輸出控制線來實現控制,p0還有提升電阻以增強其驅動能力,控制信號如下:r/w=0,lcd執行寫入的動作,rs寄存器選擇控制線。en啟用控制線。vo亮度調整控制引腳。d0d7雙向的數據總線。必須在有亮度照明的地方,才能看見時間,若使用lcd,選擇有背光顯示的模塊,則在夜晚或黑暗的場合也可以使用,有背光顯示的lcd模塊在引腳上,與無背光顯示的模塊兼容,指示價格較貴,一般顯示的背光顏色為黃光,與手機的背光顏色相似。按鍵控制按鍵控制室控制程序執行時數據的輸入或是特殊功能的設置及操作,使用8051端口2的4條輸入口,由程序來控制,平時輸入端為高電平,當有按鍵按下則相對位會呈現低電平,進過輪流

11、掃描判斷輸入端是否為低電平,便可知道按下的是哪一個按鈕。壓電喇叭圖5 壓電喇叭接線圖8051端口3的第4位是壓電喇叭的驅動位,持續送出工作脈沖可以推動喇叭發出嗶的聲響,當工作頻率越高時,聲音越清脆,工作頻率低時,聲音則較低沉。繼電器繼電器接點說明如下:nc:常閉點。以com為共同點,nc與com在平時是呈導通。com:共同點。輸出控制接點的共同接點。no:常開點。no與com平時呈開路的狀態,當繼電器動作時,no與com導通,nc與com則呈開路狀態。電源輸入j1為+5v電源輸入,當電源加入時電源指示燈led將亮起,用哪個以指示電源供給正常,定時器在倒數時間到后壓電喇叭會發出音樂旋律,并啟動繼

12、電器使其狀態為on,控制繼電器的on/off狀態,可以直接控制家電開關。2.2控制程序本課程設計中,可以學習利用單片機定時器設計時間計時處理,其時分秒控制,定時器0計時中斷程序每個5ms中斷一次當做一個計數,每中斷一次則計數加1,當計數200次時,表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了,若計數到了則將相關變量清除為0。單片機定時器負責定時的技術,不會因為案件處理而中斷時間描述的增加,時,分,秒數據是存在變量內并寫入lcd而顯示相關時間的。在主控程序循環中主要工作為掃描是否有按鍵,若有按鍵則做相應的功能處理,同時也檢查所倒數的時間是否為0,若為0表示倒數的時間

13、終了,應該執行想對應的工作了,圖為主程序控制工作流程。時間計時處理程序時等過了1s 后,則更新時間數據,將最新剩余倒數的分秒的時間數據轉換為數字數據,并顯示在lcd上。程序中如何判斷是否已過了1s?可以設一舊秒數變量,當新舊秒數變量不一樣時,則表示已過了1s,要做相關程序處理了。倒數計時鬧鈴的動作利用時間計時處理來做秒數倒數,當所設置的時間為0,壓電喇叭則不斷發出音樂聲,led持續閃動,啟動繼電器,有繼電器可以控制家電開啟或關閉。音樂聲的產生也是有定時器來產生固定頻率的方波信號推動壓電喇叭,發出旋律。而定時器原先已利用設計時間計時處理了,怎么能在設計來做音樂旋律的控制?在此設計定義一個音樂演奏

14、標志,若音樂演奏標志為0則執行中斷程序中計時程序的部分程序,若音樂演奏標志為1則執行音樂發生控制程序。因此只要適當的運用程序設計技巧,計時中斷程序中可以做許多種不同的工作,而這些工作是需要特定一段時間久必須要被觸發而被執行的程序。倒數計數器控制程序文件名為dsds.asm。注意:在程序中128行有以下的指令:sinclude (dsds1.asm); 加載程序一起來匯編及編譯表示在主程序dsds.asm中還會自動加載另一程序dsds1.asm程序一起進來匯編及編譯,只是為了方便程序編譯用,一些測試正確的程序代碼可以分別存檔好方便管理,此外整個程序源代碼長度也不至于太長,不方便編輯。dsds1.

15、asm主要的程序代碼功能為以定時器演奏歌曲旋律的控制。3軟件程設計和調試3.1延時時間的計算若我們想設計程序執行100ms時間延時,程序可以設計如下delay: mov r6, #50d1:mov r7,#100 djnz r7,$ djnz r6,d1 djnz r5,delay ret如果震蕩頻率為12mhz則執行時間按為t=1+50*(1+100*2)+2+2+2us =10.057ms如果執行10次此子程序,則延時時間約為100ms3.2工作方式設計本次設計中采用的定時器模式0來設計,在此方式中t0、t0可以進行13位的計時,其值保存在兩個8位的定時寄存器中。對于其中任一定時器,工作時

16、鐘可以由內部或是外部來提供,由c/t位來決定做定時器還是計數器。定時器的時鐘為系統工作時鐘除以12.此次試驗中采用12mhz石英震蕩器則產生1us的計數時間脈沖寬度。本次實驗的定時器計時時間為5ms,因此定時器0需計數5000次,其定時器初值的加載可以計算如下:tl0=(8191-5000).mod.32th0=(8191-5000)/32執行后的結果為,產生的脈沖寬度為t=5ms3.3有定時器產生各種頻率的聲音我們可以設定發音的頻率來改變聲音產生音樂,計時時間長短也是按照發音的頻率而定的。由頻率值推得定時器計數初值由下關系式得到:t=1/f(us) ;方波寬度co=(int)t/2 ;定時器

17、所得計數的次數lo=(8191-co)%32 ;計數初值低字節hi=(8191-co)/32 ;計數初值高字節軟件的編譯和調試使用的是keil軟件,文件格式是asm。3.4子程序說明dsds.asm 主要控制子程序說明如下:init:初始化控制變量。init_timer:初始化定時器接口,使用定時器0的模式0計時。t0_int:定時器0計時中斷程序每隔5ms中斷一次,或是做音樂演奏控制。show_dig:在lcd的第一行顯示數字。show_dig2: 在lcd的第二行顯示數字。set_lcd:對lcd做初始化工作。clr_line1:清除lcd的第一行顯示字符。clr_line2:清除lcd的

18、第二行顯示字符。lcd_print:在lcd的第一或第二行顯示字符。wcom:以4位控制方式將命令寫至lcd。wdata:以4位控制方式將數據寫入lcd。lcdp1:在lcd的第一行顯示字符。lcdp2: 在lcd的第二行顯示字符。conv1:將分秒的倒數數據轉換為數字數據系那是在lcd第二行。down_time:檢查是否計時終了。set_time:設置所要倒數的時間。bz:壓電喇叭發出嗶一聲。time_out:計時終止啟動音樂演奏。dsds1.asm主要控制子程序說明如下:music:以定時器0計時中斷程序做音樂演奏控制。play:演奏單音控制。play_song:測試演奏音樂。sound_

19、on:啟動定時器0開始計時,是喇叭發聲。sound_off:停止定時器0計時動作,喇叭靜音。load_value:一查表法由音階計數值來載入定時器計數初值。3.5具體程序解釋下面是對本次程序的說明解釋,定義使用軟件,文件名稱,每個鍵的作用。;-; dsds.asm 8051 count down timer with lcd+music;-; k1: set min 0-60 k2:up k3:downk4:ok; k2: 5 min k3:10 min k4:20 min;-; 5 ms ; mov tl0,#(8191-5000).mod.32; mov th0,#(8191-5000)/

20、32以下是開始對各個變量的具體定義,加載字節,確定時間常數,時間變量的存放,倒數的分鐘秒鐘的存放地址,各變量的含義。loaequ 24hiaequ 99coequ 200 ;5ms中斷計數時間常數,計數200次表示1smubequ 20h.0hourequ 30hminequ 31hsecequ 32hdedaequ 33h ; 5 ms計數值sec0equ 34h ;存放舊的秒數xequ 35h ;lcd 顯示的地址mmequ 36h ; 倒數時間分鐘數ssequ 37h ; 倒數時間秒鐘數loequ 38hhiequ 39htcequ 3ah以下是對四個按鍵的定義k1equ p2.4k2e

21、qu p2.5k3equ p2.6k4equ p2.7以下是對lcd、繼電器、喇叭、燈的定義rsequ p0.0enequ p0.1ry1equ p3.5ry2equ p3.6spkequ p3.4wledequ p3.7程序開始,代碼由地址0開始執行,使用的是定時器0中斷org 0h jmp start org 0bh ;t0中斷 jmp t0_intstart:setb mub ;測試音樂演奏; call music clr en ;lcd 的狀態設為off clr ry1 clr ry2 clr mub ;清除音樂演奏標志 call led_bl call set_lcd call bz

22、 call init call init_timer call menuloop:call down_time jb k1,l1 ;對按鍵進行檢測 jnb k1,$; 按鍵1按下:;mov mm,#3;mov ss,#1mov dptr,#madjmov a,#1call lcd_printcall set_timemov dptr,#mmenumov a,#1call lcd_printjmp loopl1:jb k2,l2jnb k2,$;按鍵2按下:call bzmov mm,#5mov ss,#1call led_bljmp loopl2:jb k3,l3jnb k3,$;按鍵3按下:

23、call bzcall bzmov mm,#10mov ss,#1call led_bljmp loopl3:jb k4,l4jnb k4,$; 按鍵4按下:call bzcall bzcall bzmov mm,#20mov ss,#1call led_bljmp loopl4:jmp loop ;繼續循環執行$include (dsds1.asm)以下是在顯示器上顯示的時間消息:;-lmess1: db lcd line 1 .,0lmess2: db time ,0title:db dsds.asm 8051 down count with lcd+music;-以下是初始化控制變量in

24、it:mov deda,#0 ;將所有時間計時清為0mov sec0,#0 mov sec,#0 mov min,#0 mov hour,#0;定義倒數時間: mov mm,#5 mov ss,#1 ret以下是初始化定時器接口,使用定時器0模式0計時init_timer: mov tmod,#00000000b mov ie, #10000010bmov tl0,#loamov th0,#hiasetb tr0rett0_int:jnb mub,w0 ;t0計時中斷程序每5ms中斷一次,音樂演奏標志為0時則執行計時程序mov tl0,lo ;對音樂的加載mov th0,hicpl spkre

25、tiw0:push acc ;對時間計數的初始化mov tl0,#loamov th0,#hiainc deda;判斷是否為1smov a,dedacjne a,#co,w1mov deda, #0cpl wledinc secmov a,seccjne a,#60,w1; 判斷是否1分到了inc minmov sec,#0mov a, mincjne a,#60,w1;判斷是否1小時到了inc hourmov min,#0mov a, hourcjne a,#24,w1mov sec,#0 ;清除時間變量為0mov min,#0mov hour,#0w1: pop acc ;將累加器有堆棧取

26、出reti以下是使lcd第一行顯示; a:dig x: lcd x pos; show on lcd line1show_dig:mov b,#10 div ab add a,#30h push b mov b,x call lcdp1 pop b mov a,b add a,#30h inc x mov b,x call lcdp1 ret以下是使lcd第二行顯示; a:dig x: lcd x pos; show on lcd line2show_dig2: mov b,#10div ab add a,#30hpush bmov b,xcall lcdp2pop bmov a,badd a

27、,#30h inc x mov b,x call lcdp2 ret以下是lcd的控制程序設計:set_lcd:clr en ;啟動失效 call init_lcd ;初始化lcd mov r5,#10call delaymov dptr,#lmess1mov a,#1 ;顯示在第一行call lcd_printmov dptr,#lmess2mov a,#2 ;顯示在第二行call lcd_printretlcd控制指令初始化:init_lcd1:mov a,#28hcall wcommov a,#0chcall wcommov a,#0ehcall wcommov a,#01hcall w

28、comret清除lcd的第一行字符:clr_line1:mov a,#80hcall wcommov r0,#24clr1:mov a,# call wdatadjnz r0,clr1ret在lcd的第一行或第二行顯示字符:lcd_print:cjne a,#1,line2 ;判斷是否為第一行line1:mov a,#80hcall wcomcall clr_linemov a,#80hcall wcomjmp fillline2:mov a,#0c0hcall wcomcall clr_linemov a,#0c0hcall wcomfill: ;填入字符clr amovc a,a+dptr

29、cjne a,#0,lc1retlc1: ;寫入數據call wdatainc dptrjmp fillretclr_line: ;清除該行的lcd字符mov r0,#24cl1: mov a,# call wdatadjnz r0,cl1retde:mov r7, #5 ;短暫延時djnz r7,$reten1: ;短脈沖產生啟用信號setb encall declr encall deretinit_lcd: ;4位i/o控制lcd接口初始化mov p0, #30hcall en1mov p0, #30hcall en1mov p0, #30hcall en1mov p0, #20hcal

30、l en1call init_lcd1retwcom: ;以4位控制方式將命令寫入lcd; 高4位數據的寫入mov p0, aclr rs ;設置寫入命令call en1rlc arlc arlc arlc a; 低4位數據的寫入mov p0, aclr rscall en1retwdata: ;以4位控制方式將數據寫入lcd; 高4位數據的寫入mov p0, asetb rs ;設置寫入數據call en1rlc arlc arlc arlc a; 高4位數據的寫入mov p0, asetb rscall en1ret在lcd的第一行寫入字符lcdp1:push accmov a,badd

31、a,#80hcall wcompop acccall wdataret在lcd的第二行寫入字符lcdp2:push accmov a,badd a,#0c0hcall wcompop acccall wdataret延遲子程序:總延遲時間為r5*10msdelay:mov r6,#50d1:mov r7,#100djnz r7,$djnz r6,d1djnz r5,delayretled_bl: ;工作指示燈閃爍mov r4,#4le1:cpl wledmov r5,#5call delaydjnz r4, le1ret以下是lcd顯示的關于菜單和按鍵的消息mmenu:db set 5 10

32、20 min,0madj:db up down ok,0menu:mov dptr,#mmenumov a,#1call lcd_printret在lcd上顯示倒數的時間在第二行:conv1:mov a,mm ;倒數的分鐘數顯示mov x,#5call show_dig2inc xmov a,#: ;顯示:符號mov b,xcall lcdp2mov a,ss ;倒數的秒數顯示inc xcall show_dig2ret以下為倒數的終止程序1:time_out1:setb ry1 ;繼電器oni1:call led_blcall bzjmp i1ret過了1s后則更新倒數時間并檢查是否倒數終止

33、:down_time:mov a,sec ;加載現在時間mov b,sec0 ;加載舊時間cjne a,b,do1 ;是否過了1sretdo1:mov sec0,sec ;記錄舊秒數dec ssmov a,sscjne a,#0,d2 ;判斷秒數和分鐘數是否為0mov a,mmcjne a,#0,d12call time_out ;當秒數和分鐘數為0時則停止倒數計時retd12:mov ss,#59 ;秒數=59 分鐘數減1dec mmd2:call conv1 ;更新顯示倒數的時間ret設置倒數的時間,k2為加,k3為減,k4為設置成功:set_time:clr tr0mov ss,#1ca

34、ll conv1以下程序為掃描按下的為哪個鍵s0: jb k2,s1 ;未按下k2則繼續掃描call bz ;調整分鐘數增加inc mmmov a, mmcjne a,#60,s11mov mm,#0s11:call conv1 ;顯示倒數的時間mov r5,#20call delayjmp s0s1:jb k3,s2 ;未按下k3則繼續掃描; k2 keyed adj down min.call bzdec mmmov a, mmcjne a,#0,s21mov mm,#60s21:call conv1 mov r5,#20call delayjmp s0s2:jb k4,s0 ;為按下k4

35、則繼續掃描jnb k4,$ ;有按下則等待放開來call bz ;設置完成壓電喇叭發出聲音,led call bz 閃動,定時器啟動call led_blsetb tr0retbz: mov r6,#0 ;壓電喇叭發出聲音b1:call dexcpl spkdjnz r6,b1mov r5,#10call delayretdex: mov r7,#180 ;短暫延遲de1: nopdjnz r7,de1rettime_out:setb ry1 ;倒數終了處理程序,繼電器onti1:call led_blcall bzsetb mubcall music ;設置音樂jmp ti1retend到此

36、主程序完成可以實現本次設計中要求的主要功能。對于要喇叭發出音樂聲,則需要下面的dsds1.asm程序的介入。主要為音樂程序。dsds1.asm的程序清單如下:music: ;音樂的設置 mov tmod,#00000000b mov ie, #10000010bm0: call sound_on ;喇叭打開 mov r4,#1 ;發出“do”一拍 mov r3,#1 call play call led_blmov r4,#2 ;發出“re”一拍 mov r3,#1 call play call led_bl mov r4,#3 ;發出“me”一拍 mov r3,#3 call play ca

37、ll led_bl call sound_off ;喇叭關閉沒有聲音 mov r5,#50 ;靜音0.5s call delay下面是一段旋律演奏的程序 call sound_on call play_song call sound_off jmp m0r4音階指針,r3拍數play:call load_value ;單音演奏pl:mov r5,#10 call delay djnz r3, pl實現暫停: call sound_off mov r5,#3 call delay call sound_on ;喇叭開啟 ret演奏一段旋律:play_song: mov tc,#0pp0: ;指向

38、旋律音階數據列表地址 mov dptr, #song mov a,tc movc a,a+dptr mov r4,a cjne a,#0ffh,pp1 retpp1: ;指向旋律拍數數據列表地址 mov dptr, #len mov a,tc movc a,a+dptr mov r3,a call play inc tc jmp pp0 retsound_on: ;喇叭打開 setb tr0 retsound_off: ;喇叭關閉 clr tr0 ret以查表法由音階計數值來載入計數初值,r4表示音階計數值load_value: mov dptr,#hi_list ;指向數據列表地址 mov

39、a,r4 movc a,a+dptr mov hi,a mov dptr,#lo_list mov a,r4 movc a,a+dptr mov lo,a ret定時器的設置用來設置音樂聲音:hi_list: ;音階對應定時器0計數初值高字節數據列表 db 0,226,229,232,233,236,238,240 db 241,242,244,244,246,247,248lo_list: ;音階對應定時器0計數初值低字節數據列表 db 0,4,13,10,20,3,8,6 db 2,23,5,26,1,4,3以下為旋律數據:song: db 2,6,2,2,3,1,4,3,2,2,1,6,7,1,3,3,5,3,2,7,6,1,0ffhlen: db 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0ffh四、 結論和展望本次設計比較復雜,而且設計的基礎知識很多,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論