|
1 引言
1.1 目的和意義
單片微型計(jì)算機(jī)是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,屬第四代電子計(jì)算機(jī),它具有高性能、高速度、體積小、價(jià)格低廉、穩(wěn)定可靠、應(yīng)用廣泛的特點(diǎn)。它的應(yīng)用必定導(dǎo)致傳統(tǒng)的控制技術(shù)從根本上發(fā)生變革。因此,單片機(jī)的開(kāi)發(fā)應(yīng)用已成為高科技和工程領(lǐng)域的一項(xiàng)重大課題。
電子琴是現(xiàn)代電子科技與音樂(lè)結(jié)合的產(chǎn)物,是一種新型的鍵盤(pán)樂(lè)器。它在現(xiàn)代音樂(lè)扮演著重要的角色,單片機(jī)具有強(qiáng)大的控制功能和靈活的編程實(shí)現(xiàn)特性,它已經(jīng)溶入現(xiàn)代人們的生活中,成為不可替代的一部分。本文的主要內(nèi)容是用AT89S51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)電子琴。以單片機(jī)作為主控核心,與鍵盤(pán)、揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個(gè)按鍵和揚(yáng)聲器。
本文主要對(duì)使用單片機(jī)設(shè)計(jì)簡(jiǎn)易電子琴進(jìn)行了分析,并介紹了基于單片機(jī)電子琴統(tǒng)硬件組成。利用單片機(jī)產(chǎn)生不同頻率來(lái)獲得我們要求的音階,最終可隨意彈奏想要表達(dá)的音樂(lè)。并且本文分別從原理圖,主要芯片,各模塊原理及各模塊的程序的調(diào)試來(lái)詳細(xì)闡述。本系統(tǒng)是簡(jiǎn)易電子琴的設(shè)計(jì),按下鍵盤(pán)矩陣中的按鍵會(huì)使揚(yáng)聲器播放對(duì)應(yīng)的音符。通過(guò)設(shè)計(jì)本系統(tǒng)可了解單片機(jī)的基本功能。對(duì)單片機(jī)的了解有一個(gè)小的飛躍。
1.2 本系統(tǒng)主要研究?jī)?nèi)容
1.由4X4組成16個(gè)按鈕矩陣,設(shè)計(jì)成16個(gè)音對(duì)應(yīng)音樂(lè)音符。
2.每按一個(gè)鍵,單片機(jī)檢測(cè)按下的那個(gè)鍵并查表查找相應(yīng)的音符,輸出到音頻處理模塊驅(qū)動(dòng)喇叭發(fā)出音符。
3.設(shè)計(jì)控制器的硬件電路原理圖,合理選擇元器件;編寫(xiě)使用說(shuō)明書(shū),說(shuō)明使用方法。
4.設(shè)計(jì)在實(shí)驗(yàn)板上實(shí)現(xiàn)該功能的程序并進(jìn)行調(diào)試。
1.3 主要芯片簡(jiǎn)介
AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫(xiě)1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。
AT89S51具有如下特點(diǎn):40個(gè)引腳(引腳圖如圖1-2所示),4k Bytes Flash片內(nèi)程序存儲(chǔ)器,128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門(mén)狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。
此外,AT89S51設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過(guò)軟件設(shè)置省電模式。空閑模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
2 系統(tǒng)分析
2.1 系統(tǒng)組成
本系統(tǒng)只要以51單片機(jī)為主控核心,與矩陣鍵盤(pán)、揚(yáng)聲器一起組合而成。具體如下:
圖一電路方框圖
2.2 系統(tǒng)工作原理
本系統(tǒng)掃描鍵盤(pán)矩陣、顯示按鍵、揚(yáng)聲器發(fā)出對(duì)應(yīng)音符。
4X4行列式鍵盤(pán)識(shí)別及顯示原理如下:
組成鍵盤(pán)的按鍵有機(jī)械式、電容式、導(dǎo)電橡膠式、薄膜式多種,但不管什么形式,其作用都是一個(gè)使電路接通與斷開(kāi)的開(kāi)關(guān)。目前微機(jī)系統(tǒng)中使用的鍵盤(pán)按其功能不同,通常可分為編碼鍵盤(pán)和非編碼鍵盤(pán)兩種基本類型。
編碼鍵盤(pán):鍵盤(pán)本身帶有實(shí)現(xiàn)接口主要功能所需的硬件電路。不僅能自動(dòng)檢測(cè)被按下的鍵,并完成去抖動(dòng)、防串鍵等功能,而且能提供與被按鍵功能對(duì)應(yīng)的鍵碼(如ASCII碼)送往CPU。所以,編碼鍵盤(pán)接口簡(jiǎn)單、使用方便。但由于硬件電路較復(fù)雜,因而價(jià)格較貴。
非編碼鍵盤(pán):鍵盤(pán)只簡(jiǎn)單地提供按鍵開(kāi)關(guān)的行列矩陣。有關(guān)按鍵的識(shí)別、鍵碼的確定與輸入、去抖動(dòng)等功能均由軟件完成。目前微機(jī)系統(tǒng)中,一般為了降低成本大多數(shù)采用非編碼鍵盤(pán)。
鍵盤(pán)接口必須具有去抖動(dòng)、防串鍵、按鍵識(shí)別和鍵碼產(chǎn)生4個(gè)基本功能。
(1)去抖動(dòng):每個(gè)按鍵在按下或松開(kāi)時(shí),都會(huì)產(chǎn)生短時(shí)間的抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間與鍵的質(zhì)量相關(guān),一般為5—20ms。所謂抖動(dòng)是指在識(shí)別被按鍵是必須避開(kāi)抖動(dòng)狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開(kāi)狀態(tài)才能保證識(shí)別正確無(wú)誤。去抖問(wèn)
題可通過(guò)軟件延時(shí)或硬件電路解決。
(2)防串鍵:防串鍵是為了解決多個(gè)鍵同時(shí)按下或者前一按鍵沒(méi)有釋放又有新的按鍵按下時(shí)產(chǎn)生的問(wèn)題。常用的方法有雙鍵鎖定和N鍵輪回兩種方法。雙鍵鎖定,是當(dāng)有兩個(gè)或兩個(gè)以上的按鍵按下時(shí),只把最后釋放的鍵當(dāng)作有效鍵并產(chǎn)生相應(yīng)的鍵碼。N鍵輪回,是當(dāng)檢測(cè)到有多個(gè)鍵被按下時(shí),能根據(jù)發(fā)現(xiàn)它們的順序依次產(chǎn)生相應(yīng)鍵的鍵碼。
(3)被按鍵識(shí)別:如何識(shí)別被按鍵是接口解決的主要問(wèn)題,一般可通過(guò)軟硬結(jié)合的方法完成。常用的方法有行掃描法和線反轉(zhuǎn)法兩種。行掃描法的基本思想是,由程序?qū)︽I盤(pán)逐行掃描,通過(guò)檢測(cè)到的列輸出狀態(tài)來(lái)確定閉合鍵,為此,需要設(shè)置入口、輸出口一個(gè),該方法在微機(jī)系統(tǒng)中被廣泛使用。線反轉(zhuǎn)法的基本思想是通過(guò)行列顛倒兩次掃描來(lái)識(shí)別閉合鍵,為此需要提供兩個(gè)可編程的雙向輸入/輸出端口。
(4)鍵碼產(chǎn)生:為了從鍵的行列坐標(biāo)編碼得到反映鍵功能的鍵碼,一般在內(nèi)存區(qū)中建立一個(gè)鍵盤(pán)編碼表,通過(guò)查表獲得被按鍵的鍵碼。
用AT89S51的并行口P3接4×4矩陣鍵盤(pán),以P3.0-P3.3作輸入線,以P3.4-P3.7作輸出線.
3 系統(tǒng)硬件設(shè)計(jì)
3.1 系統(tǒng)硬件總體設(shè)計(jì)
本系統(tǒng)由鍵盤(pán)矩陣、揚(yáng)聲器這幾個(gè)部分組成,揚(yáng)聲器發(fā)出對(duì)應(yīng)音符。硬件總體設(shè)計(jì)圖如下:
圖二電路原理圖
3.2子系統(tǒng)(模塊)一
矩陣掃描揚(yáng)聲器發(fā)出對(duì)應(yīng)音符模塊如下:
圖三矩陣掃描揚(yáng)聲器
3.3子系統(tǒng)(模塊)二
矩陣鍵盤(pán)模塊圖如下:
圖四矩陣鍵盤(pán)
4 系統(tǒng)軟件設(shè)計(jì)
4.1 系統(tǒng)軟件總體設(shè)計(jì)
本系統(tǒng)的軟件流程圖如下:
圖五軟件流程圖
4.2子系統(tǒng)
一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系正確即可。
利用AT89C51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計(jì)數(shù)器計(jì)時(shí)956μs/1μs=956,每計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO(523Hz)。
計(jì)數(shù)脈沖值與頻率的關(guān)系式(如式2-1所示)是:
N=fi÷2÷fr 2-1
式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。
其計(jì)數(shù)初值T的求法如下:
T=65536-N=65536-fi÷2÷fr
例如:設(shè)K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計(jì)數(shù)值。
T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1046=65059
本系統(tǒng)按鍵發(fā)出對(duì)應(yīng)音符模塊軟件流程圖如下:
圖六音符模塊軟件流程圖
5 系統(tǒng)使用說(shuō)明
5.1 系統(tǒng)安裝及配置說(shuō)明
5.1.1 系統(tǒng)運(yùn)行環(huán)境
WINDOWS XP PROTEUS 7.1 SP2 Keil uv3 2.12
5.1.2 系統(tǒng)安裝及配置
安裝Protues 和keil uVsision3。
5.2 系統(tǒng)操作說(shuō)明
(1)Keil下編譯,產(chǎn)生目標(biāo)HEX文件,Proteus下Programme Files選擇產(chǎn)生的HEX文件,點(diǎn)擊運(yùn)行開(kāi)始模擬。
(2)按任意鍵盤(pán),揚(yáng)聲器發(fā)出相應(yīng)的音符。
6 結(jié)論
本次的課程設(shè)計(jì),使關(guān)于51系列單片機(jī)的,在平時(shí)課程的學(xué)習(xí)中,我們僅限于理論知識(shí)的講解,即使知識(shí)是很扎實(shí)的,實(shí)際應(yīng)用并不是這樣的。開(kāi)始時(shí)我也覺(jué)得自己的理論知識(shí)已經(jīng)夠了,但當(dāng)我拿到課題時(shí),在腦海里想的是非常好的,但真正編程和控制時(shí),理論和實(shí)際結(jié)合不到一起,甚至于51芯片的使用我都感覺(jué)很迷茫,還是經(jīng)過(guò)搜集大量資料才將理論與實(shí)際結(jié)合到一起了。通過(guò)這次課程設(shè)計(jì),我們學(xué)到了不少課本上沒(méi)有的知識(shí),也鍛煉了自己的動(dòng)手能力,將以前學(xué)過(guò)的零散的知識(shí)串到一起。經(jīng)過(guò)我們長(zhǎng)時(shí)間的設(shè)計(jì)及調(diào)試,本系統(tǒng)基本能實(shí)現(xiàn)按下鍵盤(pán)矩陣中的按鍵會(huì)使數(shù)碼管顯示當(dāng)前按鍵,揚(yáng)聲器播放對(duì)應(yīng)的音符。但由于仿真系統(tǒng)原因,本設(shè)計(jì)音頻效果不是很好。不足之處有:1.可彈奏的音符數(shù)較少,只能在一定范圍內(nèi)滿足用戶需要。可通過(guò)改進(jìn)鍵盤(pán)識(shí)別模塊和發(fā)生模塊來(lái)增加其復(fù)雜度。2.音量不可調(diào)。
通過(guò)這次課程設(shè)計(jì)——電子琴設(shè)計(jì),使我又重新開(kāi)始復(fù)習(xí)了匯編語(yǔ)言,因?yàn)閰R編語(yǔ)言是前段時(shí)間學(xué)習(xí)的,從學(xué)完就再也沒(méi)用過(guò),所以開(kāi)始很陌生,我又找了有關(guān)資料來(lái)了解,才有了一點(diǎn)眉目。剛開(kāi)始以為可以用匯編很容易就寫(xiě)出來(lái),但是用匯編時(shí)才發(fā)現(xiàn)原來(lái)都不怎么熟練,編了一會(huì)程序發(fā)現(xiàn)只有一種感覺(jué)——舉步維艱啊!對(duì)于單片機(jī),我們課本學(xué)習(xí)的是80C51,但是這次做課程設(shè)計(jì)用的是89C51,這樣不僅使我們掌握了80C51,而且對(duì)89C51也有了一定的了解了,在課堂上學(xué)習(xí)的都理論的,跟實(shí)際永遠(yuǎn)有一定的差距,不實(shí)踐就不會(huì)發(fā)現(xiàn)問(wèn)題。通過(guò)這次課程設(shè)計(jì)使我把課堂上學(xué)習(xí)的東西都用到了實(shí)踐中,例如:定時(shí)/計(jì)數(shù)器的應(yīng)用與中斷。學(xué)習(xí)的時(shí)候不怎么理解,但是在實(shí)踐中應(yīng)用了以后就自然了解了。這次課程設(shè)計(jì)使我受益匪淺,而且都是實(shí)際的東西。
通過(guò)本次設(shè)計(jì)實(shí)驗(yàn),使我對(duì)所學(xué)51系列的單片機(jī)從理論知識(shí)到實(shí)踐硬件的應(yīng)用以及匯編語(yǔ)言知識(shí)的回顧,更加熟悉了89C51單片機(jī)的每一個(gè)引腳的輸出和各項(xiàng)功能,而且對(duì)硬件電路的布線以及焊接能力有了很大的進(jìn)步。我們的綜合設(shè)計(jì)主要涉及硬件和軟件兩方面的內(nèi)容,通過(guò)這些我們的硬件和軟件開(kāi)發(fā)能力都獲得了提高。首先硬件方面,基本了解了電子產(chǎn)品的開(kāi)發(fā)流程和所要做的工作;基本掌握了Proteus繪制原理圖的方法,并設(shè)計(jì)了一個(gè)單片機(jī)最小系統(tǒng)。通過(guò)開(kāi)發(fā)板的設(shè)計(jì)和硬件搭建的過(guò)程,使我們對(duì)51系單片機(jī)的接口有了更深層次的理解,熟悉了一些單片機(jī)常用的外圍電路引腳和連接方法,如LED數(shù)碼管,鍵盤(pán)等。并且我們學(xué)會(huì)了分析問(wèn)題解決問(wèn)題的能力,加深了對(duì)所學(xué)理論知識(shí)的理解和運(yùn)用。我們的動(dòng)手能力得到了很大的提高,創(chuàng)新意識(shí)得到了鍛煉。
參考文獻(xiàn)
[1] 彭偉.單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例.電子工業(yè)出版社.2009
[2] 吳運(yùn)昌.模擬電子線路基礎(chǔ).廣州:華南理工大學(xué)出版社,2004
[3] 閻石.?dāng)?shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,1997
[4] 張曉麗等.?dāng)?shù)據(jù)結(jié)構(gòu)與算法.北京:機(jī)械工業(yè)出版社,2002
[5] 馬忠梅等. ARM&Linux嵌入式系統(tǒng)教程.北京:北京航空航天大學(xué)出版社,2004
[6] 李建忠.單片機(jī)原理及應(yīng)用.西安:西安電子科技大學(xué),2002
[7] 韓志軍等.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2004
[8] 周潤(rùn)景等. Proteus在MCS-51&ARM7系統(tǒng)中的應(yīng)用百例[M].電子工業(yè)出版社,2006
[9] 馬忠梅等.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京航空航天大學(xué)出版社,2006
[10] 劉樹(shù)中,孫書(shū)膺,王春平.單片機(jī)和液晶顯示驅(qū)動(dòng)器串行接口的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007
|
|