版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、音樂音符發(fā)生器的制造實驗報告第五組課程名稱 微機(jī)原理及應(yīng)用課程設(shè)計學(xué)院專業(yè) 信息工程卓越工程師 年級班別 2013級2班 學(xué) 號 3113002780 學(xué)生姓名 黃健鵬 合作者 陳曉明 吳仁偉 指導(dǎo)老師 張巧芬 報告頁數(shù) 32 2015 年 6 月 29日目錄課程設(shè)計報告1第一章 緒論:3第二章 設(shè)計要求:3第三章 原理說明:3第四章 程序原理:4第五章 硬件設(shè)計:5AT89C51:551單片機(jī)與按鍵,蜂鳴器的連接:6第六章 程序設(shè)計:7主程序的設(shè)計:7子程序的設(shè)計:9中斷子程序:15第七章 仿真與調(diào)試:19軟件介紹:19仿真過程:19第八章 產(chǎn)品制作20第九章 總結(jié):21附錄 程序代碼:21
2、第一章 緒論:現(xiàn)在各種各樣的音樂播放器呈現(xiàn)在我們面前,外觀越來越精美,功能越來越多,體積越來越小,重量也越來越小、價格越來越便宜。同時,隨著當(dāng)代手機(jī)行業(yè)的快速發(fā)展,許多手機(jī)廠商為了能夠吸引廣大的客戶受到消費(fèi)者的青睞,致此他們開始研究在手機(jī)上實現(xiàn)音樂和視頻的播放,因此現(xiàn)在的手機(jī)都能夠輕松的播放音樂了。這樣人們就更很容易攜帶,隨時隨地都可以聽,以便來緩解人們的疲勞、壓抑、愉快人們的心情等,甚至有時還可以借著音樂來抒發(fā)自己的感情,傳達(dá)我們對朋友的祝福。因此,在不知不覺中它成為了人們生活的一樣必需品,無論到哪里、無論什么時候都可以聽到我們想聽的音樂。除了PC和大型計算機(jī)系統(tǒng)以外,今天每一個人都很熟悉的
3、嵌入式電子設(shè)備如電飯褒、空調(diào)、洗衣機(jī)、熱水器、遙控多功能風(fēng)扇、冰箱、電視、DVD播放機(jī)、MP3播放機(jī)、充電器、手機(jī)、汽車、電動自行車、電梯、飛機(jī)、火車等都采用了不同性能檔次、不同溫度范圍和不同成本等級的單片機(jī)。基于單片機(jī)的設(shè)計創(chuàng)新和產(chǎn)品創(chuàng)新看起來似乎永無止境,而且它們也的的確確在方方面面日益完善和豐富著我們每個人的日常生活和工作。 音樂音符制造器是現(xiàn)代電子科技與音樂結(jié)合的產(chǎn)物,它在現(xiàn)代音樂扮演者重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實現(xiàn)特性,它已融入現(xiàn)代人們的生活中,成為不可替代的一部分第二章 設(shè)計要求:設(shè)計一個音樂音符發(fā)生器。利用鍵盤的1,2,3,4,5,6,7,8,的8個鍵,能夠
4、發(fā)出8個不同的音樂音符聲音,即發(fā)出“哆”、“唻”、“咪”、“發(fā)”、“嗦”、“拉”、“西”、“哆”(高音)的音符聲音。并要求按下按鍵發(fā)聲,松開后延遲一段時間停止,如果再按別的鍵則發(fā)出另一個音符的聲音。第三章 原理說明:1, 當(dāng)系統(tǒng)掃描到鍵盤上有鍵被按下,則快速檢測出是哪一個鍵被按下,然后單片機(jī)的定時器被啟動,發(fā)出一定頻率的脈沖,該頻率的脈沖輸入蜂鳴器后,就會發(fā)出相應(yīng)的音調(diào)。如果在前一個按下的鍵發(fā)聲的同時有另一個鍵被按下,則啟動中斷系統(tǒng),前面的鍵發(fā)音停止,轉(zhuǎn)到后按的鍵的發(fā)音程序,發(fā)出后按的鍵的音調(diào)。2, 發(fā)生原理:音樂的產(chǎn)生主要是通過單片機(jī)的I/O口輸出高低不同的脈沖信號來控制蜂鳴器發(fā)音,要想產(chǎn)生
5、音頻脈沖信號,需要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時間。利用單片機(jī)定時器計時這個半個周期時間,每當(dāng)計時到后就將輸出脈沖的I/O口反相,然后重復(fù)計時此半周期時間再對I/O口反相,這樣就能在此I/O口上得到此頻率的脈沖。 通常,利用單片機(jī)的內(nèi)部定時器0,工作在方式1下,改變計數(shù)初始值THO和TLO來產(chǎn)生不同的率。 例如,若單片機(jī)采用12MHz晶振,要產(chǎn)生頻率為587Hz的音頻脈沖時,其音頻信號的脈沖周期 T=1/587=1703.5775s,半周期的時間為852s,因此只要令計數(shù)器計數(shù)=852s/1s=852,在每計數(shù)852時將I/O口
6、反相,就可得到C調(diào)中音Re。 計數(shù)脈沖值與頻率的關(guān)系如下: 第四章 程序原理: 本設(shè)計的硬件電路只要包括最小系統(tǒng)、蜂鳴器、控制電路三大部分。最小系統(tǒng)只要是為了使單片機(jī)正常工作??刂齐娐吠ㄟ^按鍵控制音樂音符的聲調(diào)。蜂鳴器是將單片機(jī)輸出的脈沖信號轉(zhuǎn)化為音樂音符。AT89C51單片機(jī)設(shè)計流程圖如下: 按鍵蜂鳴器 第五章 硬件設(shè)計:AT89C51:AT89C51是一種帶4K字節(jié)FLASH存儲器(FPEROMFlash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2
7、K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃速存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示。管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程
8、序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為低八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳
9、被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如下表所示:口管腳 備選功能
10、P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 /INT0(外部中斷0)P3.3 /INT1(外部中斷1)P3.4 T0(計時器0外部輸入)P3.5 T1(計時器1外部輸入)P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的
11、1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA
12、將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。51單片機(jī)與按鍵,蜂鳴器的連接: 第六章 程序設(shè)計:主程序的設(shè)計:主程序主程序流程圖:啟
13、動中斷子程序是否是否有其它按鍵按下?執(zhí)行該按鍵跳轉(zhuǎn)的子程序判斷哪個按鍵被按下P1,P3口置高電平對T1溢出中斷標(biāo)志清零主程序:;主程序開始START0:MOV P3,#0FFH ;對P3端口全置高電平MOV P1,#0FFH ;對P1端口全置高電平CLR TF1 ;對T1溢出中斷標(biāo)志清零KEY: ;判斷按鍵是否按下程序段JNB P1.0,LL0 ;判斷按鍵1是否按下,按下跳到LL0,沒按下轉(zhuǎn)判斷按鍵2JNB P1.1,LL1 ;判斷按鍵2是否按下,按下跳到LL1,沒按下轉(zhuǎn)判斷按鍵3JNB P1.2,LL2 ;判斷按鍵3是否按下,按下跳到LL2,沒按下轉(zhuǎn)判斷按鍵4JNB P1.3,LL3 ;判斷
14、按鍵4是否按下,按下跳到LL3,沒按下轉(zhuǎn)判斷按鍵5JNB P1.4,LL4;判斷按鍵5是否按下,按下跳到LL4,沒按下轉(zhuǎn)判斷按鍵6JNB P1.5,LL5;判斷按鍵6是否按下,按下跳到LL5,沒按下轉(zhuǎn)判斷按鍵7JNB P1.6,LL6;判斷按鍵7是否按下,按下跳到LL6,沒按下轉(zhuǎn)判斷按鍵8JNB P1.7,LL7;判斷按鍵8是否按下,按下跳到LL7,沒按下跳到START0LJMP START0;跳到START0-;主要功能為判斷有一個按鍵按下沒松開的情況下第二次按下的是第幾個按鍵,然后給A賦相應(yīng)的值L00:MOV A,#01H ;按下的是第一個按鍵,A賦值1LJMP ZD ;跳到ZDL11:M
15、OV A,#02HLJMP ZDL22:MOV A,#04HLJMP ZDL33:MOV A,#08HLJMP ZDL44:MOV A,#10HLJMP ZDL55:MOV A,#20HLJMP ZDL66:MOV A,#40HLJMP ZDL77:MOV A,#80HLJMP ZDZD:MOV TMOD,#01H ;定時器初始化SETB EA ;開總中斷SETB ET0 ;T0溢出允許MOV TH0,#0FFH ;賦初值MOV TL0,#0FEHSETB TR0 ;啟動T0LOOP000:LJMP LOOP000 ;等待中斷LJMP START0;返回START0子程序的設(shè)計:子程序流程圖:
16、按鍵子程序定時器1初始化方式1裝入能產(chǎn)生特定頻率的初值等待溢出對T1溢出中斷標(biāo)志清零對P3.3口取反重新裝入初值否按鍵是否松開?是返回主程序 子程序: ;按鍵1L0:MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FCH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#44HSETB TR1 ;啟動T1LOOP0:JNB TF1,LOOP0;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FCH ;重新裝入初值MOV TL1,#44H;以下為判斷按鍵1按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按
17、下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.1,LL11 ;按鍵2,按下則跳轉(zhuǎn)至LL11,否則轉(zhuǎn)查按鍵3JNB P1.2,LL22 ;按鍵3,按下則跳轉(zhuǎn)至LL22,否則轉(zhuǎn)查按鍵4JNB P1.3,LL33 ;按鍵4,按下則跳轉(zhuǎn)至LL33,否則轉(zhuǎn)查按鍵5JNB P1.4,LL44 ;按鍵5,按下則跳轉(zhuǎn)至LL44,否則轉(zhuǎn)查按鍵6JNB P1.5,LL55 ;按鍵6,按下則跳轉(zhuǎn)至LL55,否則轉(zhuǎn)查按鍵7JNB P1.6,LL66 ;按鍵7,按下則跳轉(zhuǎn)至LL66,否則轉(zhuǎn)查按鍵8JNB P1.7,LL77 ;按鍵8,按下則跳轉(zhuǎn)至LL77,否則轉(zhuǎn)查按鍵1JNB P1.0,L
18、OOP0;判斷按鍵1是否松開,松開則跳轉(zhuǎn)START0,不松開則循環(huán)LOOP0LJMP START0 ;跳轉(zhuǎn)START0;以下相當(dāng)于指令跳轉(zhuǎn)中轉(zhuǎn)站LL11:LJMP L11LL22:LJMP L22LL33:LJMP L33LL44:LJMP L44LL55:LJMP L55LL66:LJMP L66LL77:LJMP L77LL00:LJMP L00;按鍵2發(fā)聲程序L1:MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FCH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#0ACHSETB TR1 ;啟動T1LOOP1:JNB TF1,LOOP1;等待溢出CLR TF1 ;對
19、T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FCH ;重新裝入初值MOV TL1,#0ACH;以下為判斷按鍵2按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.0,LL00JNB P1.2,LL22JNB P1.3,LL33JNB P1.4,LL44JNB P1.5,LL55JNB P1.6,LL66JNB P1.7,LL77JNB P1.1,LOOP1LJMP START0 ;跳到START0;按鍵3L2:MOV TMOD,#10H ;定時器1初始化方式1MOV T
20、H1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#09HSETB TR1 ;啟動T1LOOP2:JNB TF1,LOOP2;等待溢出CLR TF1;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#09H;以下為判斷按鍵3按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.0,LLL00JNB P1.1,LLL11JNB P1.3,LLL33JNB P1.4,LLL44JNB P1.5,LLL55JNB P1.6,LLL6
21、6JNB P1.7,LLL77JNB P1.2,LOOP2LJMP START0;跳轉(zhuǎn)START0;以下相當(dāng)于指令跳轉(zhuǎn)中轉(zhuǎn)站LLL11:LJMP L11LLL22:LJMP L22LLL33:LJMP L33LLL44:LJMP L44LLL55:LJMP L55LLL66:LJMP L66LLL77:LJMP L77LLL00:LJMP L00;按鍵4L3:MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#34HSETB TR1 ;啟動T1LOOP3:JNB TF1,LOOP3;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)
22、志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#34H;以下為判斷按鍵4按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.0,LLL00JNB P1.1,LLL11JNB P1.2,LLL22JNB P1.4,LLL44JNB P1.5,LLL55JNB P1.6,LLL66JNB P1.7,LLL77JNB P1.3,LOOP3LJMP START0;跳轉(zhuǎn)START0;按鍵5L4:MOV TMOD,#10H ;定時器1初始化方式1MOV TH1
23、,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#82HSETB TR1 ;啟動T1LOOP4:JNB TF1,LOOP4;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#82H;以下為判斷按鍵5按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.0,LLLL00JNB P1.1,LLLL11JNB P1.2,LLLL22JNB P1.3,LLLL33JNB P1.5,LLLL55JNB P1.6,
24、LLLL66JNB P1.7,LLLL77JNB P1.4,LOOP4LJMP START0 ;跳轉(zhuǎn)START0;以下相當(dāng)于指令跳轉(zhuǎn)中轉(zhuǎn)站LLLL11:LJMP L11LLLL22:LJMP L22LLLL33:LJMP L33LLLL44:LJMP L44LLLL55:LJMP L55LLLL66:LJMP L66LLLL77:LJMP L77LLLL00:LJMP L00;按鍵6L5:MOV TMOD,#10H;定時器1初始化方式1MOV TH1,#0FDH;裝入能產(chǎn)生特定頻率的初值MOV TL1,#0C8HSETB TR1 ;啟動T1LOOP5:JNB TF1,LOOP5;等待溢出CLR
25、 TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#0C8H;以下為判斷按鍵6按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.0,LLLL00JNB P1.1,LLLL11JNB P1.2,LLLL22JNB P1.3,LLLL33JNB P1.4,LLLL44JNB P1.6,LLLL66JNB P1.7,LLLL77JNB P1.5,LOOP5LJMP START0 ;跳轉(zhuǎn)START0;按鍵7L6:MOV TMOD,
26、#10H;定時器1初始化方式1MOV TH1,#0FEH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#06HSETB TR1 ;啟動T1LOOP6:JNB TF1,LOOP6 ;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FEH ;重新裝入初值MOV TL1,#06H;以下為判斷按鍵7按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.0,LLL000JNB P1.1,LLL111JNB P1.2,LLL222JNB P1.3,LLL333J
27、NB P1.4,LLL444JNB P1.5,LLL555JNB P1.7,LLL777JNB P1.6,LOOP6LJMP START0;跳轉(zhuǎn)START0;以下相當(dāng)于指令跳轉(zhuǎn)中轉(zhuǎn)站LLL111:LJMP L11LLL222:LJMP L22LLL333:LJMP L33LLL444:LJMP L44LLL555:LJMP L55LLL666:LJMP L66LLL777:LJMP L77LLL000:LJMP L00;按鍵8L7:MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FEH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#22HSETB TR1 ;啟動T1LOOP
28、7:JNB TF1,LOOP7 ;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FEH ;重新裝入初值MOV TL1,#22H;以下為判斷按鍵8按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.0,LLL000JNB P1.1,LLL111JNB P1.2,LLL222JNB P1.3,LLL333JNB P1.4,LLL444JNB P1.5,LLL555JNB P1.6,LLL666JNB P1.7,LOOP7LJMP START0;跳轉(zhuǎn)
29、START0中斷子程序:當(dāng)在按一個鍵是同時按下另一個鍵,則啟動中斷子程序,其原理如同按鍵子程序。中斷子程序:音樂盒源程序:ORG 0000HLJMP START0;跳到開始ORG 000BH;中斷入口LJMP H0 ;調(diào)到中斷子程序ORG 3000H;以下為中斷子程序H0:CJNE A,#01H,H1 ;判斷是不是按鍵1按下,是則順序執(zhí)行,否則跳至H1查詢按鍵2MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FCH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#44HSETB TR1;啟動T1LOOP00:JNB TF1,LOOP00;等待溢出CLR TF1 ;對T1溢出中
30、斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FCH ;重新裝入初值MOV TL1,#44HJNB P1.0,LOOP00 ;判斷是否松開RETI ;返回中斷H1:CJNE A,#02H,H2;判斷是不是按鍵2按下,是則順序執(zhí)行,否則跳至H1查詢按鍵3MOV TMOD,#10H;定時器1初始化方式1MOV TH1,#0FCH;裝入能產(chǎn)生特定頻率的初值MOV TL1,#0ACHSETB TR1;啟動T1LOOP11:JNB TF1,LOOP11;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3;對P3.3口取反MOV TH1,#0FCH;重新裝入初值MOV T
31、L1,#0ACHJNB P1.1,LOOP11 ;判斷是否松開RETI ;返回中斷H2:CJNE A,#04H,H3 ;判斷是不是按鍵3按下,是則順序執(zhí)行,否則跳至H1查詢按鍵4MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#09HSETB TR1;啟動T1LOOP22:JNB TF1,LOOP22;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3;對P3.3口取反MOV TH1,#0FDH;重新裝入初值MOV TL1,#09HJNB P1.2,LOOP22 ;判斷是否松開RETI ;返回中斷H3:CJN
32、E A,#08H,H4 ;判斷是不是按鍵4按下,是則順序執(zhí)行,否則跳至H1查詢按鍵5MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#34HSETB TR1;啟動T1LOOP33:JNB TF1,LOOP33;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#34HJNB P1.3,LOOP33;判斷是否松開RETI ;返回中斷H4:CJNE A,#10H,H5;判斷是不是按鍵5按下,是則順序執(zhí)行,否則跳至H1查詢按鍵6MOV T
33、MOD,#10H;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#82HSETB TR1;啟動T1LOOP44:JNB TF1,LOOP44;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#82HJNB P1.4,LOOP44;判斷是否松開RETI ;返回中斷H5:CJNE A,#20H,H6 ;判斷是不是按鍵6按下,是則順序執(zhí)行,否則跳至H1查詢按鍵7MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值
34、MOV TL1,#0C8HSETB TR1 ;啟動T1LOOP55:JNB TF1,LOOP55;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH;重新裝入初值MOV TL1,#0C8HJNB P1.5,LOOP55 ;判斷是否松開RETI ;返回中斷H6:CJNE A,#040H,H7 ;判斷是不是按鍵7按下,是則順序執(zhí)行,否則跳至H1查詢按鍵8MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FEH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#06HSETB TR1 ;啟動T1LOOP66:JNB TF1,L
35、OOP66 ;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FEH ;重新裝入初值MOV TL1,#06HJNB P1.6,LOOP66 ;判斷是否松開RETI;返回中斷H7:CJNE A,#080H,START0 ;判斷是不是按鍵8按下,是則順序執(zhí)行,否則跳至START0MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FEH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#22HSETB TR1;啟動T1LOOP77:JNB TF1,LOOP77 ;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3;對
36、P3.3口取反MOV TH1,#0FEH ;重新裝入初值MOV TL1,#22HJNB P1.7,LOOP77;判斷是否松開RETI;返回中斷第七章 仿真與調(diào)試:軟件介紹:(1)Proteus軟件介紹Proteus(海神)的ISIS是一款Labcenter出品的電路分析實物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機(jī),元件庫齊全,使用方便,是不可多得的專業(yè)的單片機(jī)軟件仿真系統(tǒng)。 全部滿足我們提出的單片機(jī)軟件仿真系統(tǒng)的標(biāo)準(zhǔn),并在同類產(chǎn)品中具有明顯的優(yōu)勢。 具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS一232動態(tài)仿真、1 C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功
37、能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。 目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。 支持大量的存儲器和外圍芯片??傊撥浖且豢罴瘑纹瑱C(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大 ,可仿真51、AVR、PIC。 (2)keil軟件介紹 Keil 軟件是目前最流行開發(fā) MCS-51 系列單片 機(jī)的軟件,這從近年來各仿真機(jī)廠商紛紛宣布全面支持 Keil 即可看出。Keil 提供了包括 C 編譯器、宏匯編、連接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案
38、,通 過一個集成開發(fā)環(huán)境(uVision)將這些部份組合在一起。仿真過程:操作如下:在Protues中畫出系統(tǒng)電路圖 將程序在keil中編譯并生成hex文件。把在keil中編譯生成的HEX文件載入AT89C51芯片中,運(yùn)行仿真。第八章 產(chǎn)品制作因為線路簡單,為了制造方便,故使用萬用板焊接電路。第九章 總結(jié):課程設(shè)計誠然是一門專業(yè)課,給我很多專業(yè)知識以及專業(yè)技能上的提升,同時又是一門講道課,一門辯思課,給了我許多道,給了我很多思,給了我莫大的空間。同時,設(shè)計讓我感觸很深。使我對抽象的理論有了具體的認(rèn)識。通過這次課程設(shè)計,我掌握了單片機(jī)方面的知識;熟悉了匯編編程;了解了定時,中斷方法;以及如何提高
39、寫代碼的能力等等。 我認(rèn)為,在這學(xué)期的實驗中,不僅培養(yǎng)了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,在實驗課上,我們學(xué)會了很多學(xué)習(xí)的方法。而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰(zhàn),只有不斷的學(xué)習(xí)、實踐,再學(xué)習(xí)、再實踐。這對于我們的將來也有很大的幫助。以后,不管有多苦,我想我們都能變苦為樂,找尋有趣的事情,發(fā)現(xiàn)其中珍貴的事情。就像中國提倡的艱苦奮斗一樣,我們都可以在實驗結(jié)束之后變的更加成熟,會面對需要面對的事情。 回顧起此課程設(shè)計,至今我仍感慨頗多,從理論到實踐,在這段日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的東西,同時不僅可以鞏固
40、了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,但可喜的是最終都得到了解決。 實驗過程中,也對團(tuán)隊精神的進(jìn)行了考察,讓我們在合作起來更加默契,在成功后一起體會喜悅的心情。果然是團(tuán)結(jié)就是力量,只有互相之間默契融洽的配合才能換來最終完美的結(jié)果。附錄 程序代碼:音樂音符制造器源程序:ORG 0000HLJMP START0;
41、跳到開始ORG 000BH;中斷入口LJMP H0 ;調(diào)到中斷子程序ORG 3000H;以下為中斷子程序H0:CJNE A,#01H,H1 ;判斷是不是按鍵1按下,是則順序執(zhí)行,否則跳至H1查詢按鍵2MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FCH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#44HSETB TR1;啟動T1LOOP00:JNB TF1,LOOP00;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FCH ;重新裝入初值MOV TL1,#44HJNB P1.0,LOOP00 ;判斷是否松開RET
42、I ;返回中斷H1:CJNE A,#02H,H2;判斷是不是按鍵2按下,是則順序執(zhí)行,否則跳至H1查詢按鍵3MOV TMOD,#10H;定時器1初始化方式1MOV TH1,#0FCH;裝入能產(chǎn)生特定頻率的初值MOV TL1,#0ACHSETB TR1;啟動T1LOOP11:JNB TF1,LOOP11;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3;對P3.3口取反MOV TH1,#0FCH;重新裝入初值MOV TL1,#0ACHJNB P1.1,LOOP11 ;判斷是否松開RETI ;返回中斷H2:CJNE A,#04H,H3 ;判斷是不是按鍵3按下,是則順序執(zhí)行,否則跳至
43、H1查詢按鍵4MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#09HSETB TR1;啟動T1LOOP22:JNB TF1,LOOP22;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3;對P3.3口取反MOV TH1,#0FDH;重新裝入初值MOV TL1,#09HJNB P1.2,LOOP22 ;判斷是否松開RETI ;返回中斷H3:CJNE A,#08H,H4 ;判斷是不是按鍵4按下,是則順序執(zhí)行,否則跳至H1查詢按鍵5MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FDH ;
44、裝入能產(chǎn)生特定頻率的初值MOV TL1,#34HSETB TR1;啟動T1LOOP33:JNB TF1,LOOP33;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#34HJNB P1.3,LOOP33;判斷是否松開RETI ;返回中斷H4:CJNE A,#10H,H5;判斷是不是按鍵5按下,是則順序執(zhí)行,否則跳至H1查詢按鍵6MOV TMOD,#10H;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#82HSETB TR1;啟動T1LOOP44:JNB
45、TF1,LOOP44;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FDH ;重新裝入初值MOV TL1,#82HJNB P1.4,LOOP44;判斷是否松開RETI ;返回中斷H5:CJNE A,#20H,H6 ;判斷是不是按鍵6按下,是則順序執(zhí)行,否則跳至H1查詢按鍵7MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FDH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#0C8HSETB TR1 ;啟動T1LOOP55:JNB TF1,LOOP55;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3
46、;對P3.3口取反MOV TH1,#0FDH;重新裝入初值MOV TL1,#0C8HJNB P1.5,LOOP55 ;判斷是否松開RETI ;返回中斷H6:CJNE A,#040H,H7 ;判斷是不是按鍵7按下,是則順序執(zhí)行,否則跳至H1查詢按鍵8MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FEH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#06HSETB TR1 ;啟動T1LOOP66:JNB TF1,LOOP66 ;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FEH ;重新裝入初值MOV TL1,#06H
47、JNB P1.6,LOOP66 ;判斷是否松開RETI;返回中斷H7:CJNE A,#080H,START0 ;判斷是不是按鍵8按下,是則順序執(zhí)行,否則跳至START0MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FEH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#22HSETB TR1;啟動T1LOOP77:JNB TF1,LOOP77 ;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3;對P3.3口取反MOV TH1,#0FEH ;重新裝入初值MOV TL1,#22HJNB P1.7,LOOP77;判斷是否松開RETI;返回中斷;主程序開始START
48、0:MOV P3,#0FFH ;對P3端口全置高電平MOV P1,#0FFH ;對P1端口全置高電平CLR TF1 ;對T1溢出中斷標(biāo)志清零KEY: ;判斷按鍵是否按下程序段JNB P1.0,LL0 ;判斷按鍵1是否按下,按下跳到LL0,沒按下轉(zhuǎn)判斷按鍵2JNB P1.1,LL1 ;判斷按鍵2是否按下,按下跳到LL1,沒按下轉(zhuǎn)判斷按鍵3JNB P1.2,LL2 ;判斷按鍵3是否按下,按下跳到LL2,沒按下轉(zhuǎn)判斷按鍵4JNB P1.3,LL3 ;判斷按鍵4是否按下,按下跳到LL3,沒按下轉(zhuǎn)判斷按鍵5 JNB P1.4,LL4;判斷按鍵5是否按下,按下跳到LL4,沒按下轉(zhuǎn)判斷按鍵6JNB P1.5
49、,LL5;判斷按鍵6是否按下,按下跳到LL5,沒按下轉(zhuǎn)判斷按鍵7 JNB P1.6,LL6;判斷按鍵7是否按下,按下跳到LL6,沒按下轉(zhuǎn)判斷按鍵8JNB P1.7,LL7;判斷按鍵8是否按下,按下跳到LL7,沒按下跳到START0LJMP START0;跳到START0;以下相當(dāng)于指令跳轉(zhuǎn)的中轉(zhuǎn)站LL0:LJMP L0;跳到L0LL1:LJMP L1;跳到L1LL2:LJMP L2;跳到L2LL3:LJMP L3;跳到L3LL4:LJMP L4;跳到L4LL5:LJMP L5;跳到L5LL6:LJMP L6;跳到L6LL7:LJMP L7;跳到L7;按鍵1L0:MOV TMOD,#10H ;定
50、時器1初始化方式1MOV TH1,#0FCH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#44HSETB TR1 ;啟動T1LOOP0:JNB TF1,LOOP0;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FCH ;重新裝入初值MOV TL1,#44H;以下為判斷按鍵1按下的同時其他的按鍵有沒有按下,有則跳轉(zhuǎn),主要是實現(xiàn)功能:當(dāng)一個按鍵按下且沒松開時,另一個按鍵按下則進(jìn)入中斷,發(fā)出最后按下按鍵的聲音JNB P1.1,LL11 ;按鍵2,按下則跳轉(zhuǎn)至LL11,否則轉(zhuǎn)查按鍵3JNB P1.2,LL22 ;按鍵3,按下則跳轉(zhuǎn)至LL22,否
51、則轉(zhuǎn)查按鍵4JNB P1.3,LL33 ;按鍵4,按下則跳轉(zhuǎn)至LL33,否則轉(zhuǎn)查按鍵5JNB P1.4,LL44 ;按鍵5,按下則跳轉(zhuǎn)至LL44,否則轉(zhuǎn)查按鍵6JNB P1.5,LL55 ;按鍵6,按下則跳轉(zhuǎn)至LL55,否則轉(zhuǎn)查按鍵7JNB P1.6,LL66 ;按鍵7,按下則跳轉(zhuǎn)至LL66,否則轉(zhuǎn)查按鍵8JNB P1.7,LL77 ;按鍵8,按下則跳轉(zhuǎn)至LL77,否則轉(zhuǎn)查按鍵1JNB P1.0,LOOP0;判斷按鍵1是否松開,松開則跳轉(zhuǎn)START0,不松開則循環(huán)LOOP0LJMP START0 ;跳轉(zhuǎn)START0;以下相當(dāng)于指令跳轉(zhuǎn)中轉(zhuǎn)站LL11:LJMP L11LL22:LJMP L22LL33:LJMP L33LL44:LJMP L44LL55:LJMP L55LL66:LJMP L66LL77:LJMP L77LL00:LJMP L00;按鍵2發(fā)聲程序L1:MOV TMOD,#10H ;定時器1初始化方式1MOV TH1,#0FCH ;裝入能產(chǎn)生特定頻率的初值MOV TL1,#0ACHSETB TR1 ;啟動T1LOOP1:JNB TF1,LOOP1;等待溢出CLR TF1 ;對T1溢出中斷標(biāo)志清零CPL P3.3 ;對P3.3口取反MOV TH1,#0FCH ;重新裝入初值MOV TL1,#0ACH;以下為判斷按鍵2按下的同時
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆高考英語讀后續(xù)寫說課稿 追車人
- 2025SRV汽化煙道熱噴涂合金防護(hù)層施工合同
- 2025民間融資合同范本
- 14《母雞》(說課稿)-2023-2024學(xué)年語文四年級下冊統(tǒng)編版
- 2025年駕校培訓(xùn)合同范本
- 2025商品購銷合同(超市類)
- 2024年五年級數(shù)學(xué)下冊 一 圖形的運(yùn)動(二)1.2畫對稱圖形說課稿 冀教版
- 2024-2025學(xué)年高中歷史 第一單元 第一次世界大戰(zhàn) 第2課 慘烈的四年戰(zhàn)事教學(xué)說課稿 岳麓版選修3
- 陶土板幕墻施工方案
- 游樂場植物墻施工方案
- 消防器材與消防設(shè)施的維護(hù)與檢查
- 2024年度碳陶剎車盤分析報告
- 四川省綿陽市2025屆高三上學(xué)期第二次診斷性考試語文試題(含答案)
- 2025年1月 浙江首考英語試卷
- 2025年1月廣西2025屆高三調(diào)研考試英語試卷(含答案詳解)
- 質(zhì)檢工作計劃書2025質(zhì)檢部工作計劃范文
- 《復(fù)旦大學(xué)》課件
- 《纏論的實戰(zhàn)技法》課件
- 承包魚塘維修施工合同范例
- 耶魯綜合抽動嚴(yán)重程度量表正式版
- 2024年浙江省公務(wù)員錄用考試《行測》題(A類)
評論
0/150
提交評論