版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 隨著科學(xué)技術(shù)的不斷發(fā)展,單片機的應(yīng)用日益成熟。單片機集成度高、處理功能強大、價格低廉使其在各個領(lǐng)域得到廣泛應(yīng)用。同時電子琴作科學(xué)技術(shù)與音樂共同發(fā)展的產(chǎn)物,在這個電子信息化的時代,為音樂的大眾化做出了不可代替的貢獻。</p><p> 本文主要介紹一種基于51單片機的簡易電子琴設(shè)計方案。它采用了STC公司
2、出品的一款低功耗、高性能單片機STC89C52芯片作為主控單元,與4*4矩陣鍵盤、復(fù)位電路、LED雙位數(shù)碼顯示器、揚聲器等組成主控核心模塊。文章詳細論述了電子琴硬件設(shè)計和軟件結(jié)構(gòu)設(shè)計流程,采用了Altium Designer 09畫出原理圖、PCB圖,通過Keil編程軟件對電子琴進行軟件編程,然后進行軟硬件的調(diào)試運行并將程序燒錄到STC89C52芯片中。此系統(tǒng)運行比較穩(wěn)定,具有硬件設(shè)計電路簡單、清晰,成本低,軟件功能完善,控制系統(tǒng)牢靠,
3、性價比高等優(yōu)點,具有一定的實用和參考價值。</p><p> 關(guān)鍵詞:STC89C52;電子琴;矩陣鍵盤</p><p><b> Abstract</b></p><p> Along with the development of science and technology, the application of SCM incre
4、asingly mature. Single chip microcomputer high level of integration, processing powerful, low prices make it is widely used in various fields. At the same time the keyboards for science and technology and music common de
5、velopment of the product, in the electronic information era, for music's popular do can't replace contribution. </p><p> This paper mainly introduces a kind of simple keyboard based on 51 SCM design
6、 scheme. It uses the STC product of our company a low power consumption, high performance microprocessor STC89C52 chips as the master unit, and 4 * 4 matrix keyboard and reset circuit, LED digital display, a double maste
7、r core module and other components of the speaker. This paper discusses the design of hardware and software structure keyboard design process, the use of a Altium Designer 09 draw a diagram, PCB figure, </p><p
8、> Key words : stc89c52; keyboard; matrix keyboard</p><p><b> 目錄</b></p><p><b> 摘要I</b></p><p> AbstractII</p><p><b> 1 緒論1</
9、b></p><p> 1.1 設(shè)計的目的和意義1</p><p> 1.2 設(shè)計的主要內(nèi)容1</p><p><b> 2 系統(tǒng)概述1</b></p><p> 2.1 系統(tǒng)工作原理1</p><p> 2.2 系統(tǒng)結(jié)構(gòu)組成1</p><p>
10、 2.2.1 電源電路2</p><p> 2.2.2 控制部分2</p><p> 2.2.3 顯示部分2</p><p> 2.2.4 發(fā)聲部分2</p><p> 2.3 主要芯片及元件的介紹2</p><p> 2.3.1 STC89C52單片機簡介2</p><p&g
11、t; 2.3.2 芯片引腳介紹4</p><p> 2.3.3 STC89C52時鐘介紹7</p><p> 2.3.4 雙位LED數(shù)碼顯示器簡介7</p><p> 3 硬件電路的設(shè)計9</p><p> 3.1 電源電路的設(shè)計9</p><p> 3.2 復(fù)位電路的設(shè)計10</p>
12、;<p> 3.2.1 復(fù)位操作10</p><p> 3.2.2 復(fù)位信號及其產(chǎn)生11</p><p> 3.3 鍵盤控制電路12</p><p> 3.3.1 矩陣式鍵盤的概述12</p><p> 3.3.2 矩陣式鍵盤按鍵識別原理及方法12</p><p> 3.4 顯示電路
13、13</p><p> 4 系統(tǒng)軟件設(shè)計14</p><p> 4.1 如何利用單片機實現(xiàn)音樂節(jié)拍14</p><p> 4.2 如何用單片機產(chǎn)生音頻脈沖15</p><p> 4.2.1 音符和頻率的關(guān)系15</p><p> 4.2.2 定義初值16</p><p>
14、 4.3 音樂發(fā)生程序流程圖18</p><p><b> 結(jié) 論19</b></p><p><b> 參考文獻20</b></p><p> 附錄一 電子琴源程序21</p><p> 附錄二 原理圖25</p><p> 附錄三 PCB圖26<
15、;/p><p> 附錄四 實物圖27</p><p><b> 致 謝28</b></p><p><b> 1 緒論</b></p><p> 1.1 設(shè)計的目的和意義</p><p> 單片機又稱單片微型計算機,英文字母的縮寫MCU。自上世紀70年代問世以來
16、,因其較高的性價比備受人們的親睞,單片機廣泛應(yīng)用于工業(yè)自動化,自動檢測系統(tǒng)、汽車電子設(shè)備、家用電器和各種終端及計算機外部設(shè)備等等。單片機芯片具有體積小、攜帶方便、低功耗、速度快、可靠性能高、抗干擾能力強和價格低廉等等等優(yōu)點,通常在其外部配置一些外圍電路就可構(gòu)成一整套完整的控制系統(tǒng)。</p><p> 單片機(Microcontroller,又嵌入式微控制器),就是在一塊硅片上集成了各種部件的微型計算機。這些部件
17、包括中央處理單元 (CPU),數(shù)據(jù)存儲器(RAM),程序存儲器(ROM), 定時器/計數(shù)器,多種I/O接口電路和中斷系統(tǒng)等等。</p><p> 本文設(shè)計是以STC89C52單片機為核心的簡易電子琴,重點用到了單片機定時器可以產(chǎn)生不同的脈沖,不同的脈沖經(jīng)驅(qū)動電路放大后可以產(chǎn)生不同頻率音階,從而可以彈出美妙的音樂。本系統(tǒng)是簡易的電子琴,運用4*4矩陣鍵盤充當(dāng)電子琴的按鍵,一個按鍵代表一個音階,并采用矩陣鍵盤行掃描
18、法,通過程序來控制音階的發(fā)生。</p><p> 1.2 設(shè)計的主要內(nèi)容</p><p> 本文介紹了簡易電子琴的設(shè)計和制作方案的確定以及設(shè)計流程,詳細闡述了簡易電子琴的硬件設(shè)計和軟件設(shè)計。本設(shè)計主要包括:電源電路、復(fù)位電路、顯示單元和4*4矩陣鍵盤。該系統(tǒng)具有運行穩(wěn)定性好、可靠度高等優(yōu)點,具有一定的參考價值。</p><p><b> 2 系統(tǒng)
19、概述</b></p><p> 2.1 系統(tǒng)工作原理</p><p> 根據(jù)方案的要求,將程序?qū)懭隨TC89C52單片機芯片。利用不同的音階的頻率不一樣,用單片機來模擬電子琴,可以使單片機的定時器工作在計數(shù)器模式下,工作方式設(shè)為方式1,改變TH0和TH1來產(chǎn)生不同的頻率,從而產(chǎn)生不同的音階。 P1口接4*4矩陣鍵盤行和列,用行掃描法讀取P1口外接的鍵盤,若有鍵按下:雙位數(shù)
20、碼顯示管顯示01~16;若沒有鍵按下則顯示00,當(dāng)按下復(fù)位鍵的開關(guān)后,雙位數(shù)碼顯示管顯示00。單片機P3.7作為音頻放大電路的輸入。</p><p> 2.2 系統(tǒng)結(jié)構(gòu)組成</p><p> 如圖1所示該系統(tǒng)主要包括電源電路、控制部分、顯示部分和發(fā)聲部分</p><p> 圖1 系統(tǒng)結(jié)構(gòu)組成</p><p> 2.2.1 電源電
21、路</p><p> 由于電子制作一般都是用直流電源,故做此電源將220V的市交流電轉(zhuǎn)為所需要的直流電壓。220V市電先經(jīng)變壓器降壓,然后經(jīng)過二極管橋式整流,電容濾波后送入LM317的輸入端,在LM317的輸出端直流電壓,當(dāng)調(diào)節(jié)滑動變阻器的時候可以調(diào)節(jié)輸出的直流電壓的大小。</p><p> 2.2.2 控制部分</p><p> 控制部分主要由4*4矩陣鍵
22、盤組成。電子琴需要16個鍵,為了減少占用I/O端口,通常采用矩陣型鍵盤。將按鍵排成行和列,按鍵位于行和列的交叉點上。這樣一個端口就可以連接4*4的矩陣鍵盤了。</p><p> 2.2.3 顯示部分</p><p> 顯示部分是一個雙位數(shù)碼顯示管,可以顯示00~16。當(dāng)有按鍵按下的時候,數(shù)碼顯示管就會顯示相應(yīng)的數(shù)字。復(fù)位時為00。</p><p> 2.2.
23、4 發(fā)聲部分</p><p> 用喇叭來作為發(fā)聲元件,用8550三極管來驅(qū)動喇叭發(fā)聲。</p><p> 2.3 主要芯片及元件的介紹</p><p> 2.3.1 STC89C52單片機簡介</p><p> STC89C52是由STC公司生產(chǎn)一款功耗低、性能高的8位微控制器,兼容MSC51指令系統(tǒng),8K可反復(fù)擦寫Flash
24、ROM。在單塊芯片上,具有8位CPU和可編程的Flash,使得STC89C52能為大多數(shù)嵌入式控制體統(tǒng)提供靈活度且有效的解決方案。STC89C52具有以下功能部件和特征:</p><p> ?。?)8位微處理器(CPU)。</p><p> (2)數(shù)據(jù)存儲器(512B RAM)。</p><p> ?。?)程序存儲器(4K EEPROM)。</p>
25、<p> ?。?)4個可編程并行I/O口,256*8bit內(nèi)部RAM。</p><p> ?。?)一個全雙工串行口。</p><p> (6)三個16位定時器/計數(shù)器,時鐘頻率為0~24MHZ。</p><p> ?。?)MAX810復(fù)位電路。</p><p> ?。?)兩個串行中斷,可編程UART串行通道。</p>
26、<p> ?。?)兩個外部中斷,共有6個中斷源。</p><p> (10)兩個讀寫中斷串口,3級加密位。</p><p> ?。?1)一個看門狗定時器。</p><p> ?。?2)低功耗空閑和掉電模式,可以軟件設(shè)置睡眠和喚醒功能。</p><p> ?。?3)工作電壓為5.5V~3.3V(5V單片機)。</p>
27、<p> ?。?4)工作頻率0~40MHz,相當(dāng)于普通8051的0~80MHZ,實際的頻率可以達到48MHZ。</p><p> ?。?5)工作溫度為:-40~85℃(工業(yè)級),0~75℃(商業(yè)級)。</p><p> ?。?6)封裝:LQFP-44,PDIP-40,PQFP-44。</p><p> 圖2 SCT89C52雙列直插式引腳圖</
28、p><p> 2.3.2 芯片引腳介紹</p><p><b> (1)電源引腳 </b></p><p> 電源引腳用于是接入單片機的工作電源。</p><p> Vcc(pin 40):電源接入,接+5V電源。</p><p> Vss(pin 20):接數(shù)字地。</p>
29、<p><b> ?。?)時鐘引腳</b></p><p> XTAL1(pin 19):片內(nèi)振蕩電路的輸入端。當(dāng)使用片內(nèi)振蕩器時,此引腳接微調(diào)電容和石英晶體;當(dāng)采用外接時鐘源時,引腳接振蕩器信號。</p><p> XTAL2(pin 20):片內(nèi)振蕩電路的輸出端。當(dāng)使用片內(nèi)振蕩器時,和pin 19的接法一樣;當(dāng)采用外部時鐘源時,此引腳懸空。<
30、/p><p><b> ?。?)控制引腳</b></p><p> RST (pin 9):復(fù)位信號輸入端,引腳上出現(xiàn)2個機器周期的高電平時單片機復(fù)位。Vpp具有第二引腳功能,當(dāng)對片內(nèi)Flash進行編程時,此引腳接入編程電壓。</p><p> ALE/PROG(pin 30):用于地址鎖存。若訪問外部程序存儲器(ROM)和數(shù)據(jù)存儲器(RAM)
31、,ALE將用于鎖存低8位的地址。此時,ALE仍會以時鐘振蕩頻率的1/6輸出一個固定的脈沖信號,因此它可用于對外輸出時鐘或定時。但是要注意:每次訪問外部數(shù)據(jù)存儲器(RAM)時需要跳過一個ALE脈沖。 進行Flash存儲器編程時,此引腳還可用于輸入編程脈沖(PROG)。此外,還可通過對特殊功能寄存器(SFR)中的8EH單元的D0位置位,可以禁止ALE操作。該位置位后,只有MOVX和MOVC指令才能把ALE激活。此外,該引腳將會被拉高,單片機
32、執(zhí)行外部程序時,應(yīng)設(shè)置ALE禁止位無效。</p><p> PSEN(pin 29):片外存儲器讀選通信號,低電平有效。</p><p> EA/Vpp(pin 31):程序存儲器的內(nèi)部讀選通。接低電平從外部存儲器讀取指令,若接高電平從內(nèi)部程序存儲器讀取指令。</p><p> ?。?)并行I/O口引腳(32根)</p><p> ST
33、C89C52有4組8位可編程的I/O口,分別為P0、P1、P2、P3口,共32根。</p><p> P0口(pin 39~pin 32):8位雙向I/O口線,分別為P0.0~P0.7。P0口是一個漏極開路的I/O口。作為輸出口,每一位均可以驅(qū)動8個TTL負載。當(dāng)對P0端口寫入“1”的時侯,該引腳可以用作高阻抗輸入。當(dāng)訪問外部程序存儲器或者數(shù)據(jù)存儲器時,P0口也被作為地址總線(低8位)和數(shù)據(jù)分時復(fù)用。在這種模式
34、下,P0不需要外加上拉電阻。P0口也可以作為I/O口使用,也可以用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié),此時需要加10K~4.7K的外部上拉電阻。</p><p> P1口(pin 1~pin 8):8位準(zhǔn)雙向I/O口線,分別為P1.0-P1.7?!1 口內(nèi)部具有上拉電阻,P1口輸出緩沖器能夠驅(qū)動4個TTL邏輯電平。若對P1 口寫入“1”的時候,內(nèi)部上拉電阻就會把端口拉高,此時可以用作輸入口。當(dāng)作為輸入
35、口使用時,被外部拉低的引腳因為其內(nèi)部電阻,將輸出電流。</p><p> 此外,P1.0和P1.2分別可以作定時器/計數(shù)器2的外部計數(shù)輸入和定時器/計數(shù)器2 的觸發(fā)輸入。具體如下表1所示。 在Flash編程和校驗時,P1口用于接收低8位地址。</p><p> 表1 P1口引腳第二功能</p><p> P2 口(pin 21~pin 28):8位雙向I/O
36、口線,分別為P2.0~P2.7。P2 輸出緩沖器能夠驅(qū)動4個TTL邏輯電平。當(dāng)對P2 端口寫入“1”的時候,內(nèi)部上拉電阻就會把端口拉高,此時就可以作為輸入口使用。當(dāng)作為輸入使用時,被外部拉低的引腳因為其內(nèi)部電阻, 就會輸出電流。</p><p> 在訪問其外部ROM或用16位地址讀取外部RAM時,P2 口就會送出高八位地址。此時,P2 口利用內(nèi)部上拉發(fā)送“1”。當(dāng)使用 8位地址,訪問其外部數(shù)據(jù)存儲器(RAM)時
37、,P2口將會輸出P2鎖存器的內(nèi)容。在Flash編程或者校驗時,P2口也用于接收高8位地址和某些控制信號。</p><p> P3口(pin 10~pin 17): 8位雙向I/O口線,分別為P3.0~P3.7。P3口其內(nèi)部具有上拉電阻,P2口輸出緩沖器能夠驅(qū)動4 個 TTL 邏輯電平。當(dāng)對P3 口寫入“1”的時候,內(nèi)部上拉電阻就會把端口拉高,此時就可以作為輸入口使用。當(dāng)作為輸入使用時,被外部拉低的引腳因為其內(nèi)部
38、電阻,將會輸出電流。P3口也作為STC8C52具有第二功能的引腳使用,如下表2所示。當(dāng)然,在Flash編程和校驗時,P3口也接收某些控制信號。</p><p> 表2 P3口引腳第二功能</p><p> 2.3.3 STC89C52時鐘介紹</p><p> STC89C52內(nèi)部有一個高增益的反相放大器,此放大器用于構(gòu)成振蕩器,其引腳TXD和RXD分別是
39、這個放大器的輸出端和輸入端。STC89C52的時鐘可以由內(nèi)部方式產(chǎn)生,也可以由外部方式產(chǎn)生。其內(nèi)部方式的時鐘電路如圖3(a)所示,在TXD和RXD引腳上接定時元件,其內(nèi)部振蕩器就會產(chǎn)生自激振蕩。定時元器件一般采用石英晶體和電容組成并聯(lián)諧振回路。晶體振蕩頻率選擇范圍為:1.2~12MHz,電容值范圍為:5~30pF,電容頻率起到微調(diào)的作用。</p><p> 時鐘采用外部方式連接的電路如圖3(b)所示,TXD接外
40、部振蕩器,RXD接地。對外部振蕩信號沒有特殊要求,只需要保證脈沖的寬度,所以一般采用頻率低于12MHz的方波信號。片內(nèi)時鐘發(fā)生器把振蕩頻率兩分頻,產(chǎn)生一個兩相時鐘P1和P2,供STC89C52單片機使用。</p><p> ?。╝)內(nèi)部方式時鐘電路 (b)外部方式時鐘電路</p><p><b> 圖3 時鐘電路</b></p><
41、;p> 2.3.4 雙位LED數(shù)碼顯示器簡介</p><p> 數(shù)碼管能在低電壓、小電流驅(qū)動下發(fā)光,能夠與CMOS、TTL電路兼容。它的發(fā)光響應(yīng)時間非常短,通常小于0.1s,其高頻特性好,單色性好,亮度比較高。LED使用壽命很長,通常在10萬小時以上,甚至可以達到100萬小時以上,且其成本很低。LED數(shù)碼管已被廣泛運用于計算機的數(shù)顯器件、數(shù)控裝置等等。</p><p> 根據(jù)
42、LED數(shù)碼管顯示位數(shù)的多少,可以把數(shù)碼管劃分為一位、雙位、多位LED數(shù)碼管顯示器。一位的LED我們通常稱為LED數(shù)碼管,兩位以上(包括兩位)我們一般稱為顯示器。雙位LED顯示器是把兩只數(shù)碼管封裝成一體,它亮度均勻,一致性好,光衰低,可靠性高而且結(jié)構(gòu)緊湊、成本比較低(與兩只一位的數(shù)碼管相比較)。本系統(tǒng)采用的是七段雙位的數(shù)碼顯示器,7段數(shù)碼顯示器由7段發(fā)光二極管的線段組成,并且按照“日”字形排列。管腳排列如圖4所示。若將7個LED的陽極連在
43、一起,稱之為共陽極接法,反之為共陰極接法。雙位數(shù)碼顯示器將共陽極用作片選,而在a~g各段上加上不同的電壓,各段的發(fā)光情況將會不同,從而會形成不同的發(fā)光字符。加在引腳上的電壓可以用數(shù)字量來表示,若某一段的陽極為數(shù)字量為“1”,則這個段就會發(fā)光;若為0,就不會發(fā)光。數(shù)字量與段的對應(yīng)關(guān)系如表3所示。</p><p> 表3 七段共陽LED字形碼</p><p> 圖 4 七段結(jié)構(gòu)及外形圖
44、 </p><p> 3 硬件電路的設(shè)計</p><p> 3.1 電源電路的設(shè)計</p><p> 本系統(tǒng)采用的是小功率可調(diào)直流穩(wěn)壓電源。這種電源是用穩(wěn)壓器件LM317制作成的直流穩(wěn)壓電源,它的效果很好,而且輸出的是可調(diào)的電壓,故它的適應(yīng)范圍也很廣。如圖5所示,它是由電源變壓器T1,二極管橋式整流電路,濾波電容和一個LM317組成的。220V交流市電
45、經(jīng)過電源變壓器T1降壓,變成電壓較低的交流電,再經(jīng)過二極管橋式整流電路,電容濾波后送入LM317的輸入端,則LM317的輸出端將輸出穩(wěn)定的直流電壓。LM317還有一個腳是調(diào)整端,通常情況下,為了保證穩(wěn)壓器的輸出性能,的阻值一般應(yīng)小于240Ω。此電源為可調(diào)電源,故我們在調(diào)整端和地之間接一個可調(diào)電阻,當(dāng)我們改變的電阻阻值時就可以改變輸出電壓的值了。輸出電壓的計算公式如下:</p><p> U0=1.25(1+R3
46、/R2)</p><p> C1是用于濾除由市交流電引入的高頻干擾,通常選用的是瓷片電容。C2是一個電容濾波電路,C3則用于旁路基準(zhǔn)電壓的紋波電壓,它主要用于提高穩(wěn)壓電源的紋波抑制性能。在使用的過程當(dāng)中,如果負載是500~500pF的容性負載,穩(wěn)壓器的輸出端就會發(fā)生自激現(xiàn)象,電解電容C4就是用來進一步改善輸出電壓的波紋而設(shè)置的。D3D4都是保護二極管,當(dāng)輸入電路發(fā)生短路的時候,C4會放電電流反向流經(jīng)LM317,
47、有可能會被沖擊損壞,D3可以旁路反向電流,從而保護了LM317。同樣的道理,如果輸出端短路的話,C3上的放電電流就會被D4短路,從而起到保護的作用。圖5中的R2與D2是用來指示工作的,當(dāng)插上220V的交流電時,經(jīng)過變壓 、整流、濾波、穩(wěn)壓等正常工作時,發(fā)光二級管D2就會發(fā)光,而R1用來為D2限流。</p><p><b> 圖5 電源電路圖</b></p><p>
48、; 3.2 復(fù)位電路的設(shè)計</p><p> 3.2.1 復(fù)位操作</p><p> 復(fù)位是單片機初始化的操作。它的主要功能就是把PC初始為0000H,從而使單片機從0000H單元開始執(zhí)行程序。除此之外,當(dāng)由于程序運行出現(xiàn)出錯或操作錯誤致使系統(tǒng)處于死鎖狀態(tài)時,為了擺脫困境,可以按復(fù)位鍵重新啟動。</p><p> 復(fù)位操作除PC有影響外,還對其他一些寄存
49、器存在影響,它們的復(fù)位狀態(tài)如表4所示。</p><p> 表4 些寄存器的復(fù)位狀態(tài)</p><p> 3.2.2 復(fù)位信號及其產(chǎn)生</p><p> RST(pin 9)引腳是復(fù)位信號的輸入端。此引腳高電平有效,其有效時間應(yīng)為二個機器周期(即24個振蕩周期)以上。如果使用頗率為6MHz的晶振,那么復(fù)位信號需要持續(xù)時間超過4us才能完成復(fù)位操作。產(chǎn)生復(fù)位信號
50、的電路邏輯圖如圖6所示:</p><p> 圖6 復(fù)位信號的電路邏輯圖</p><p> 單片機的整個復(fù)位電路包括芯片內(nèi)、外兩個部分。RST通過一個施密特觸發(fā)器與復(fù)位電路連接在一起,而片內(nèi)復(fù)位電路則在每個機器周期的S5P2時對施密特觸發(fā)器的輸出進行采樣,這樣才能得到內(nèi)部復(fù)位操作所需要的信號。</p><p> 復(fù)位操作一般有上電自動復(fù)位和按鍵手動復(fù)位兩種。將
51、外部復(fù)位電路的電容充電就可以實現(xiàn)上電自動復(fù)位了,如圖7(a)所示。因此,接通電源就可以實現(xiàn)系統(tǒng)的復(fù)位初始化了。</p><p> 按鍵手動復(fù)位有電平方式和脈沖兩種方式。其中,按鍵電平復(fù)位是通過RST端經(jīng)電阻與電源Vcc接通而實現(xiàn)的,其電路如圖7(b)所示;利用RC微分電路產(chǎn)生的正脈沖來實現(xiàn)按鍵脈沖復(fù)位,如圖7(c)所示:</p><p> ?。╝)上電復(fù)位 (b)按鍵電
52、平復(fù)位 (c)按鍵脈沖復(fù)位</p><p><b> 圖7 復(fù)位電路</b></p><p> 上述電路圖中的電阻、電容參數(shù)適用于6MHz的晶振,能夠保證復(fù)位信號的高電平持續(xù)時間在2個機器周期以上。</p><p> 本系統(tǒng)的復(fù)位電路采用的是圖7(b)上電復(fù)位方式。電阻為2.2K,電容為10uF、晶振為12MHz。&
53、lt;/p><p> 3.3 鍵盤控制電路</p><p> 3.3.1 矩陣式鍵盤的概述</p><p> 本系統(tǒng)采用的是非編碼鍵盤中的矩陣鍵盤。矩陣鍵盤也稱為行列式鍵盤,一般用于按鍵數(shù)目較多的場合。它是由行和列組合而成,一組是行線,另一組是列線,按鍵就位于行和列的交叉點。如圖8所示,一個4*4的矩陣鍵盤,有16個按鍵,我們分別用著16個鍵來模擬電子琴的按鍵
54、:低音 3、 4、 5、 6、 7;中音 1、 2、 3、 4、 5、 6、 7 ;高音 1、 2、 3、 4 ??梢院苊黠@地看出,較獨立鍵盤而言,矩陣式鍵盤節(jié)省了I/O口線。 </p><p> 圖8 4*4矩陣式鍵盤接口</p><p> 3.3.2 矩陣式鍵盤按鍵識別原理及方法</p><p> 若矩陣鍵盤中沒有按鍵按下,那么鍵盤的行線就會處于高電
55、平;若有鍵按下時,行線電平的狀態(tài)由和它相連的列線的電平?jīng)Q定。假設(shè)列線電平為低電平那么行線電平則為低電平;反之,同理。這一點就是識別矩陣式鍵盤哪個按鍵按下的關(guān)鍵所在。由于矩陣式鍵盤的行線和列線被多鍵共用,所以各按鍵會相互影響,因此必須將行線和列線的信號配合,才能確定閉合鍵的位置所在。矩陣式鍵盤一般有兩種識別方法,它們分別是掃描法和線反轉(zhuǎn)法。</p><p> 首先,我們來介紹一下掃描法。它識別按鍵可以分為兩步:第
56、一步,識別有沒有按鍵按下;第二步,若有鍵按下,確定按下鍵的具體位置。舉個簡單的例子來說明這個過程。</p><p> 第一步,識別有沒有按鍵按下。先將所有的列線都置為0電平,接著檢查各行線是不是都是高電平,若不全是高電平,說明有按鍵按下,否則就沒有。例如,當(dāng)按鍵2被按下,第一行的行線為低電平,但是我們不能確定是哪個鍵被按下了,若是同一行的1、3、4鍵被按下,第一行也會呈現(xiàn)低電平,因此我們只能得出第一行有鍵被按下
57、。</p><p> 第二步,確定哪個鍵被按下。采用掃描法,在某個時刻只讓一條列線處于低電平,其他所有列線都處于高電平。當(dāng)?shù)?列為低電平的時候,其他各列均處于高電平時,因為是2鍵被按下,所以第1行仍高電平。而當(dāng)?shù)诙袨榈碗娖降臅r候,其他各列均為高電平,第1行的行處于低電平,故可以判斷第1行第二列的交叉處有鍵被按下,即2號鍵被按下。</p><p> 綜上所述,掃描法的思想就是,先把某一
58、列置為低電平,其他的各列均為高電平,然后檢查各行線的變化,若某行線為低電平,則可以確定被按下的鍵處于此行此列的交叉點上。本系統(tǒng)采用的就是掃描法。</p><p> 其次,我們再簡單的介紹一下線反轉(zhuǎn)法。掃描法要一列一列的去掃描查詢,若被按下的鍵處于最后一列時,需要經(jīng)過多次才能獲得正確的行列值。而線反轉(zhuǎn)法則很簡練,不論是哪個鍵被按下,均只需要兩步就可以知道是哪個鍵被按下了。具體操作步驟如下:</p>
59、<p> 第一步,讓行線編程為輸入線,列線均為輸出線,并使輸出線全部為低電平,那么行線中電平由高變?yōu)榈偷男?,就是按鍵所在的行。</p><p> 第二部,把行線全部變成為輸出線,列線編程為輸入線,并使輸出線全部為低電平,則列線中由高電平變?yōu)榈碗娖降牧?,就是按鍵所在的列。</p><p> 綜上所述,可以確定按鍵所在的行和列,從而得出按鍵所在位置。因此,線反轉(zhuǎn)法非常的簡單適用
60、,但是在實際的編程中不要忘記還要進行按鍵去抖動處理。</p><p><b> 3.4 顯示電路</b></p><p> 本系統(tǒng)采用的顯示電路是LED數(shù)碼顯示器,由于LED屬于電流控制器件,使用時需要加限流電阻,本次設(shè)計中只用了一個雙位數(shù)碼顯示器,外加兩個9012三極管驅(qū)動數(shù)碼管,此電路比較簡單不于詳細闡,具體電路圖如圖9。</p><p&
61、gt;<b> 圖9 顯示電路</b></p><p><b> 4 系統(tǒng)軟件設(shè)計</b></p><p> 本系統(tǒng)主要是要實現(xiàn)由單片機控制的簡單的音樂發(fā)生器,矩陣鍵盤代表16個不同的音階,用戶可以根據(jù)樂譜在鍵盤上彈奏出音樂,通過喇叭將音樂播放出來。</p><p> 4.1 如何利用單片機實現(xiàn)音樂節(jié)拍<
62、/p><p> 物體規(guī)則震動發(fā)出的聲音稱為樂音,音樂聽起來有高、有低,這就是音高,發(fā)聲物體的振動頻率決定著音高。頻率低聲音就會低,頻率高聲音就會高。不同的音高的樂音分別用1、2、3、4、5、6、7來表示,這七個樂音名分別念成:DO、RE、ME、FA、SO、LA、SI,這就是唱曲時樂音的發(fā)音,我們把它稱作唱名。音持續(xù)的時間長短,通常用節(jié)拍來表示。一首歌通常有不同的音符表示,不同的音符對應(yīng)著不同的頻率,不同頻率的組合加
63、上節(jié)拍就構(gòu)成了音樂。</p><p> 除了音符以外,節(jié)拍也是音樂中非常重要的一部分。</p><p> 節(jié)拍實際上就是音持續(xù)時間的長短,在單片機中我們可以利用延時來實現(xiàn)。如果是四分之一節(jié)拍就延時0.4s,那么一拍就延時1.6s。只需要知道四分之一節(jié)拍需要延時多久,其他的節(jié)拍就是它延時的倍數(shù)了。如果要單片機自己放音樂就要在程序中設(shè)置節(jié)拍的延時時間,但是此系統(tǒng)是簡易的電子琴,只需要用戶自
64、己彈奏時把握節(jié)拍就可以了,不需要程序設(shè)置。對于不同的曲調(diào)我們可以由單片機的定時器/計數(shù)器來實現(xiàn)音樂,一個節(jié)拍為單位(C調(diào)),如表5所示:</p><p><b> 表5 音樂節(jié)拍表</b></p><p> 4.2 如何用單片機產(chǎn)生音頻脈沖</p><p> 4.2.1 音符和頻率的關(guān)系</p><p> 用
65、單片機播放音樂亦或是彈奏電子琴,實際上就是按照一定的頻率,輸出一連串的方波。為了輸出適合的方波,首先我們應(yīng)該知道音符與頻率之間的關(guān)系。注意觀察一下幾個6(LA)的頻率,它們都是整數(shù),很容易看出成2倍的關(guān)系。其它的音符也是一樣的。如220、440等這些頻率,它們在琴鍵上的位置是統(tǒng)一的,不論是電子琴、鋼琴還是手風(fēng)琴,都是一樣的。包含黑鍵和白鍵在內(nèi)的所有音符的頻率數(shù)值都是成“等比數(shù)列”的關(guān)系,因此它們之間有一個公比q,可以按照“2倍”的規(guī)律推
66、算出來。例如:已知最低音的6(LA)的頻率是220Hz,我們設(shè)它的公比為q,則可以推出7(SI)的頻率為220*q*q 。因為6(LA)、7(SI)之間隔了一個黑鍵,所以要乘以兩個q。以此類推,兩個6之間,一共有12個琴鍵,可以得出:</p><p> 220*q*q*q*q*q*q*q*q*q*q*q*q = 440。</p><p> 馬上就可以得出,12個q相乘,等于:</
67、p><p> 440 ÷ 220 = 2。</p><p> 可以求出q = 2,q的12次方根 為:1.059463094。用這個公比q,和已知的220進行計算,我們就可以得出全部琴鍵所對應(yīng)的頻率,如表6所示</p><p> 表6 音符和頻率的關(guān)系</p><p> 4.2.2 定義初值</p><
68、p> 用單片機來模擬產(chǎn)生音符,只需要計算出音頻的周期T=1/f,利用音頻的變化來產(chǎn)生不同的電平,從而驅(qū)動喇叭發(fā)聲。</p><p> 利用STC89C52的內(nèi)部定時器使它工作在計數(shù)器的模式下,工作方式設(shè)為“1”,改變TH0和TH1來產(chǎn)生不同的頻率,從而產(chǎn)生不同的音階。比如:頻率為中音DO(532Hz),它的周期為:T=1/532=1912us,所以計數(shù)器只需要計數(shù):956us/1us=956次,每一次計
69、數(shù)956次時將I/O口反向,我們就可以得到我們所需要的音階中音(DO)了。計數(shù)脈沖和頻率的關(guān)系式:</p><p><b> N=fi÷2÷fr</b></p><p> 上式中的N為計數(shù)值,fi為機器頻率,fr為想要產(chǎn)生的頻率。</p><p> 計數(shù)的初值T求法如下:</p><p> T
70、=65536-N=65536-fi÷2÷fr</p><p> 例如:K=65536,fi=1MHz,求低音DO(261Hz),中音DO(523Hz),高音DO(1046Hz)的計數(shù)值。</p><p> T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-50000/fr<
71、/p><p> 低音DO(261Hz)的T=65536-50000/261=63627</p><p> 中音DO(523Hz)的T=65536-50000/523=64580</p><p> 高音DO(1046Hz)的T=65536-50000/1046=65059</p><p> 采用12MHz的晶振,音符與計數(shù)值T0的關(guān)系如表6
72、所示。本系統(tǒng)主要用到的音符為低音:3、4、5、6、7,中音:1、2、3、4、5、6、7,高音1、2、3、4;用到頻率分別為:64021,64103,64260,64400, 64524, 64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178。 </p><p> 4.3 音樂發(fā)聲程序流程圖 </p><p&
73、gt; 主程序流程圖和T0中斷服務(wù)程序流程圖如圖10所示</p><p><b> 結(jié) 論</b></p><p> 經(jīng)過這幾個月的努力,終于按照畢業(yè)設(shè)計進度要求如期完成了基于單片機的簡易電子琴制作的硬件設(shè)計和軟件編寫任務(wù)。在整個畢業(yè)設(shè)計完成的過程當(dāng)中,碰到了不少的困難,但在老師的細心指導(dǎo)以及自己的不懈努力下,最終還是取得了一定的成果。</p>&
74、lt;p> 這段時間制作這個畢業(yè)設(shè)計,首先使我對STC89C52單片機有更深入的了解,,一開始設(shè)計整個系統(tǒng)的時候沒有具體的思路,就上網(wǎng)找了好多關(guān)于電子琴設(shè)計的資料,查閱后開始自己設(shè)計。電路圖設(shè)計完成后,就是焊電路板了,在焊接的時候遇到了好多的困難,總是把有些線搞混,錯綜復(fù)雜的導(dǎo)線使我暈頭轉(zhuǎn)向,從而增加我焊接的難度。 焊完之后發(fā)現(xiàn)自己元器件的排布的不是很合適,使電路板上有許多的飛線。最后就是編寫程序調(diào)試了,本來還以為編程會很簡單的
75、,等到實際操作起來才知道很復(fù)雜,沒有想像中的那么得心應(yīng)手,理解流程是有思維的前提.不過經(jīng)過自己的不懈努力,老師的精心指導(dǎo)下和同學(xué)的悉心幫助,花費的時間與精力終于沒有白費,效果漸漸地出現(xiàn)了。程序編完之后并不意味著可以實現(xiàn)系統(tǒng)的功能,還要繼續(xù)調(diào)試。在這個過程中遇到了一個非常棘手的問題,一開始數(shù)碼顯示管的驅(qū)動三極管用的是8550,怎么都不能使數(shù)碼顯示管顯示數(shù)值,測試它的引腳全部正常。最后沒辦法了就一個一個元件測試,都沒問題,就一個一個元件替換
76、,最終發(fā)現(xiàn)是三極管的問題,最后把8550換成了9012。</p><p> 經(jīng)過這次的畢業(yè)設(shè)計,我在理論的基礎(chǔ)上更深刻的掌握了單片機的深層內(nèi)容和單片機在實際生活中的應(yīng)用,加強了自己的動手能力和思維能力,還有在軟件方面的編程能力,也讓我受益匪淺。這些問題的發(fā)現(xiàn)將為我以后的工作找明道路,經(jīng)過這次的畢業(yè)設(shè)計,使我對本專業(yè)的學(xué)習(xí)更加充滿了信心。</p><p><b> 參考文獻&l
77、t;/b></p><p> [1] 張毅剛.單片機原理及應(yīng)用[M].北京:高等教育出版社,2009.</p><p> [2] 王港元.電子電工實踐指導(dǎo)[M].江西:科學(xué)技術(shù)出版社,2005.</p><p> [3] 何立民.MCS-51單片機應(yīng)用系統(tǒng)設(shè)計[M].北京:航空航天大學(xué)出版社,1998.</p><p> [4]
78、 曹玲芝.電子信息工程專業(yè)英語[M].武漢:華中科技大學(xué)出版社,2007.</p><p> [5] 王俊峰.理工科學(xué)生怎樣搞畢業(yè)設(shè)計[M].北京:電子工業(yè)出版社,2004.</p><p> [6] 史久規(guī).基于Altium Designer 的原理圖與PCB設(shè)計[M].北京:機械工業(yè)出版社,2011.</p><p> [7] 高鋒編.單片微機應(yīng)用系統(tǒng)設(shè)計
79、及使用技術(shù)[M].北京:機械工業(yè)出版社,2004.</p><p> [8] 胡漢才.單片機原理及系統(tǒng)設(shè)計[M].北京:清華大學(xué)出版社,2002.</p><p> [9] 胡漢才.單片機原理及其接口技術(shù)[M].北京:清華大學(xué)出版社, 2004.</p><p> [10] 馬忠梅.單片機C語言應(yīng)用程序設(shè)計[M]. 北京:航空航天大學(xué)出版社 ,2007.<
80、;/p><p> [11] 徐愛軍.單片機高級語言C51應(yīng)用程序設(shè)計[M].北京:電子工業(yè)出版社,1997.</p><p> 附錄一 電子琴源程序</p><p> #include <reg52.h> </p><p> #include <intrins.h></p><p> #
81、define uint unsigned int </p><p> #define uchar unsigned char</p><p> sbit SPK = P3^7; /*P3.7外接揚聲器*/</p><p> sbit shiwei = P2^7;</p><p> sbit gewei
82、= P2^6;</p><p> uint FreqTemp;</p><p> char Key_Value=-1;</p><p> uchar code tabledu[]={</p><p> ~0x3f,~0x06,~0x5b,~0x4f,</p><p> ~0x66,~0x6d,~0x7d,~0
83、x07,</p><p> ~0x7f,~0x6f,~0x77,~0x7c,</p><p> ~0x39,~0x5e,~0x79,~0x71};</p><p> unsigned int code Freqtab[] = { /*定時半周期的初始值*/</p><p> 64021,64103,64260,64400,
84、 /*低音3 4 5 6*/</p><p> 64524,64580,64684,64777, /*低音7,中音1 2 3*/</p><p> 64820,64898,64968,65030, /*中音4 5 6 7*/</p><p> 65058,65110,65157,65178}; /*高音1 2 3 4*/</p
85、><p> void delay_ms(uint z)</p><p> {uint x,y;</p><p> for(x=z;x>0;x--)</p><p> for(y=123;y>0;y--);</p><p> } </p>
86、<p> /*函數(shù)功能 : 用掃描法讀 P1 外接 4×4 鍵盤*/</p><p> /*函數(shù)返回 : 有按下鍵:返回1~15、如無鍵按下:返回00*/</p><p> uchar Keyscan(void) </p><p><b> { </b></p><p> uchar i,
87、 j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7}; </p><p> for(j = 0; j < 4; j++) /*循環(huán)四次,掃描四行*/</p><p><b> { </b></p><p> P1 = Buffer[j]; /
88、*在低四位分別輸出一個低電平*/</p><p><b> _nop_(); </b></p><p> temp = 0x80; /*計劃先讀出P1.7位*/</p><p> for(i = 0; i < 4; i++) /*循環(huán)四次,檢查四列*/</p>&l
89、t;p><b> { </b></p><p> if(!(P1 & temp)) /*從高四位,截取1位*/</p><p><b> { </b></p><p> return (i + j * 4); /*返回取得的按鍵*/</
90、p><p><b> }</b></p><p> temp >>= 1; </p><p><b> }</b></p><p><b> }</b></p><p> return 16;
91、 /*沒有鍵按下就返回00*/</p><p><b> } </b></p><p> /*函數(shù)功能 : 將參數(shù)分成十位、個位,分別顯示到P2 */ </p><p> void Display()</p><p><b> {</b></p><p> shi
92、wei=0;P0=tabledu[(Key_Value+1)/10];delay_ms(5);shiwei=1;P0=0x00;</p><p> gewei=0;P0=tabledu[(Key_Value+1)%10];delay_ms(5);gewei=1;P0=0x00;</p><p><b> }</b></p><p> vo
93、id shaomiao()</p><p><b> {</b></p><p> uchar Key_Temp1, Key_Temp2; /*讀出的鍵值*/</p><p> Key_Temp1 = Keyscan(); /*讀入按鍵*/</p><p> if(Key_Temp1
94、 != 16) /*有鍵按下*/</p><p><b> { </b></p><p> delay_ms(5); /*延時消抖*/</p><p> Key_Temp2 = Keyscan(); /*再讀一次*/</p><p> i
95、f (Key_Temp1 == Key_Temp2) /*兩次相等*/</p><p> { Key_Value = Key_Temp1; /*就確認下來*/</p><p> FreqTemp = Freqtab[Key_Value]; /*根據(jù)鍵值,取出定時半周期的初始值*/</p><p> TR0 = 1;
96、 /*啟動定時器,發(fā)音*/</p><p> while (Keyscan() < 16); /*等待釋放*/</p><p> SPK = 1; /*停止發(fā)音*/</p><p><b> } </b></p><p&
97、gt;<b> }</b></p><p> TR0 = 0; /*暫不發(fā)音*/</p><p><b> }</b></p><p> void init()</p><p><b> {</b></p>
98、<p> TMOD = 0x01; /*T0定時方式1*/</p><p> ET0 = 1; /*允許T0中斷*/</p><p> TR0 = 0; /*暫不發(fā)音*/</p><p> EX0 = 1;
99、 /*允許X0中斷*/</p><p><b> EA = 1;</b></p><p><b> }</b></p><p> /* 主函數(shù) */ </p><p> void main(void) </p><p><b>
100、 {</b></p><p><b> init(); </b></p><p><b> while(1) </b></p><p><b> {</b></p><p> Display(); /*
101、顯示*/ </p><p> shaomiao();</p><p><b> } </b></p><p><b> }</b></p><p> void T0_INT(void) interrupt 1</p><p><b> {</b>
102、;</p><p> TL0 = FreqTemp; /*載入定時半周期的初始值*/</p><p> TH0 = FreqTemp >> 8;</p><p> SPK = ~SPK; /*發(fā)音*/</p><p><b> }</b>&
103、lt;/p><p><b> 附錄二 原理圖</b></p><p><b> 附錄三 PCB圖</b></p><p><b> 附錄四 實物圖</b></p><p><b> 致 謝</b></p><p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課設(shè)設(shè)計論文基于stc89c51單片機的簡易電子琴設(shè)計
- 基于89c51單片機的簡易電子琴設(shè)計
- 基于89c51單片機的簡易電子琴設(shè)計
- 計算機硬件課程設(shè)計 電子琴
- 畢業(yè)設(shè)計—基于stc89c52單片機的電子琴
- 基于stc89c51單片機智能小車控制
- 基于51單片機簡易電子琴設(shè)計
- 基于51單片機的電子琴設(shè)計
- 基于STC89C51單片機的數(shù)字電壓表設(shè)計.pdf
- c51單片機課程設(shè)計——電子琴
- c51單片機課程設(shè)計——電子琴
- stc89c51
- 基于at89c52單片機的簡易電子琴設(shè)計
- 基于stc89c51單片機作息時間控制鐘控制系統(tǒng)
- 單片機課程設(shè)計--基于51單片機的簡易電子琴
- 58.基于c51單片機電子琴設(shè)計
- 51單片機課程設(shè)計--簡易電子琴
- 聲光電子琴畢業(yè)論文--基于51單片機簡易電子琴設(shè)計
- 基于單片機stc89c51制作的電子萬年歷 畢業(yè)論文
- 基于51單片機的液晶顯示電子琴設(shè)計
評論
0/150
提交評論