湖南商學(xué)院課程設(shè)計
課程設(shè)計(實習(xí))評審表
| | | | | |
| |
| 設(shè)置“+”、“-”兩個按鍵,當(dāng)按下“+”,聲音增大;按下“-”,聲音減小。 |
|
|
|
|
|
| |
| | |
課程設(shè)計(實習(xí))作品驗收表
| 設(shè)置“+”、“-”兩個按鍵,當(dāng)按下“+”,聲音增大;按下“-”,聲音減小。 |
| | |
| |
| |
設(shè)計任務(wù)與要求: (1)設(shè)置“+”、“-”兩個按鍵,當(dāng)按下“+”,聲音增大;按下“-”,聲音減。 (2)根據(jù)應(yīng)用系統(tǒng)結(jié)構(gòu)規(guī)模的要求,掌握在單片機(jī)外部擴(kuò)展系統(tǒng)硬件設(shè)計的基本過程:例如硬件接口的設(shè)計,正確合理選用所需元器件,繪制應(yīng)用系統(tǒng)與單片機(jī)連接的電路圖等項工作。首先畫出程序總體流程圖,然后進(jìn)行各控制模塊程序的設(shè)計、編寫系統(tǒng)程序。 (3)掌握如何應(yīng)用單片機(jī)仿真軟件來開發(fā)應(yīng)用系統(tǒng)及仿真調(diào)試的過程,先進(jìn)行各模塊調(diào)試,然后進(jìn)行各程序模塊的聯(lián)調(diào),最后與硬件一起進(jìn)行聯(lián)調(diào),反復(fù)檢測和修改直至開發(fā)結(jié)束。 |
作品完成情況: 理論聯(lián)系實踐,實踐離不開理論,由于之前沒實際做過什么設(shè)計,所以在做這個課程設(shè)計時遇到過很多的問題. 由于單片機(jī)系統(tǒng)復(fù)雜,容易出現(xiàn)很多問題。但還是經(jīng)過多次編程以及調(diào)試后得到了想要的結(jié)果。
|
驗收情況: 驗收教師簽名:___________ 年 月 日 |
注:1. 除“驗收情況”欄外,其余各欄均由學(xué)生在作品驗收前填寫。
- “驗收情況”欄由驗收小組按實際驗收的情況如實填寫。
目錄
一 、緒論二十世紀(jì)九十年代以來,計算機(jī)、信息、電子、控制、通信等技術(shù)得到迅速發(fā)展,促使了社會生產(chǎn)力的提高,也使人們的生產(chǎn)方式和生活方式產(chǎn)生了日新月異的變化。隨著人們生活水平的提高及對音樂的喜愛,對音樂播放器的品質(zhì),功能,品種等提出了越來越多的要求,表現(xiàn)在對控制系統(tǒng)性能、可靠性等要求越來越高。而品質(zhì)的提高,功能的更新,可靠性的增強(qiáng),品種的變化無不于產(chǎn)品的核心控制部分水平的提高密不可分。家用音樂播放器產(chǎn)品及其它有關(guān)消費電器產(chǎn)品都是一些開環(huán)或閉環(huán)控制系統(tǒng),都由核心控制部分,執(zhí)行部分與人機(jī)界面三部分組成。而最為重要的控制部分一般是由單片機(jī)來執(zhí)行完成的,這就必將導(dǎo)致和促進(jìn)單片機(jī)在音樂領(lǐng)域應(yīng)用的發(fā)展。現(xiàn)在這些由單片機(jī)實現(xiàn)的音樂播放器的功能越來越強(qiáng)、費用越來越低。例如,就市場上的mp3目前的功能越來越強(qiáng)大體積卻越來越小,價格也逐漸便宜,被大多數(shù)人所能接受。但這些音樂播放器也或多或少的存在著一些問題,解決這些問題,還除智能化的單片機(jī)莫屬。
二 、課程設(shè)計目的及要求2.1 課程設(shè)計目的
《單片機(jī)原理與應(yīng)用》是電子信息工程專業(yè)的一門重要專業(yè)課,對應(yīng)用能力和動手能力要求很高,課程設(shè)計環(huán)節(jié)是學(xué)生學(xué)習(xí)該課程后進(jìn)行的一項必不可少的基本訓(xùn)練。
本著以下目的,制定《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》實施方案。
- 使學(xué)生增進(jìn)對單片機(jī)的感性認(rèn)識,加深對單片機(jī)理論方面的理解,鞏固學(xué)生所學(xué)理論知識;
- 使學(xué)生掌握單片機(jī)的內(nèi)部功能模塊的應(yīng)用,培養(yǎng)學(xué)生系統(tǒng)設(shè)計的思想;
- 培養(yǎng)學(xué)生的軟件設(shè)計能力,提高學(xué)生的動手能力;
- 培養(yǎng)學(xué)生查閱相關(guān)資料、撰寫文檔的能力和自學(xué)、科研的能力
2.2 課程設(shè)計要求
1、基本要求
學(xué)生每人一題,要求根據(jù)課題要求,通過查閱資料等,獨立完成課題的方案設(shè)計、電路設(shè)計、系統(tǒng)流程圖設(shè)計、仿真分析、調(diào)試和指標(biāo)測試,撰寫設(shè)計報告。
2、具體要求
從應(yīng)用系統(tǒng)的設(shè)計的任務(wù)出發(fā),應(yīng)當(dāng)通過設(shè)計工作的各個環(huán)節(jié),達(dá)到以下教學(xué)要求:
(1)根據(jù)應(yīng)用系統(tǒng)的要求,初步掌握總體結(jié)構(gòu)的方法和構(gòu)思,從中選擇一種最佳的設(shè)計方案。
(2)根據(jù)應(yīng)用系統(tǒng)結(jié)構(gòu)規(guī)模的要求,掌握在單片機(jī)外部擴(kuò)展系統(tǒng)硬件設(shè)計的基本過程:例如硬件接口的設(shè)計,正確合理選用所需元器件,繪制應(yīng)用系統(tǒng)與單片機(jī)連接的電路圖等項工作。
(3)根據(jù)設(shè)計任務(wù)和要求,首先畫出程序總體流程圖,然后進(jìn)行各控制模塊程序的設(shè)計、編寫系統(tǒng)程序。
(4)掌握如何應(yīng)用單片機(jī)仿真軟件來開發(fā)應(yīng)用系統(tǒng)及仿真調(diào)試的過程,先進(jìn)行各模塊調(diào)試,然后進(jìn)行各程序模塊的聯(lián)調(diào),最后與硬件一起進(jìn)行聯(lián)調(diào),反復(fù)檢測和修改直至開發(fā)結(jié)束。
3、音樂調(diào)音主要器件相關(guān)知識介紹3.1 AT89S52AT89S52是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89S52是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案
0.001.jpg (31.21 KB, 下載次數(shù): 65)
下載附件
2016-6-23 23:36 上傳
芯片流程圖
0.002.jpg (20.83 KB, 下載次數(shù): 62)
下載附件
2016-6-23 23:36 上傳
單片機(jī)89S52采用40Pin封裝的雙列直接。下圖是它們的引腳配置:40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復(fù)用。現(xiàn)在我們對這些引腳的功能加以說明:
·20:接地腳。
·40:正電源腳,工作時,接+5V電源。
·19:時鐘XTAL1腳,片內(nèi)振蕩電路的輸入端。
·18:時鐘XTAL2腳,片內(nèi)振蕩電路的輸出端。
8051的時鐘有兩種方式,一種是片內(nèi)時鐘振蕩方式 但需在18和19腳外接石英晶體(2-12MHz)和振蕩電容,振蕩電容的值一般取10p-30p。另外一種是外部時鐘方式,即將XTAL1接地,外部時鐘信號從XTAL2腳輸入。
輸入輸出(I/O)引腳:
Pin39-Pin32為P0.0-P0.7輸入輸出腳。
Pin1-Pin8為P1.0-P1.7輸入輸出腳。
芯片引腳簡要說明
Vcc (40) :+5V 電源
Vss (20) :接地
P0 口(32~39):為8位雙向三態(tài)I/O口
P1口(8~1):是帶內(nèi)部上拉電阻結(jié)構(gòu)的8位準(zhǔn)雙向I/O口
P2口(28~21):也是帶內(nèi)部上拉電阻結(jié)構(gòu)的8位準(zhǔn)雙向I/O口
P3(17~ 10):也是帶內(nèi)部上拉電阻結(jié)構(gòu)的8位準(zhǔn)雙向I/O口,但在整個系統(tǒng)中,對相應(yīng)的口鎖存器置“1” 后,這8個腳還具有第二功能。
RST/VPD (9):復(fù)位信號線
ALE/PROG (30):地址鎖存有效信號線
PSEN(29):外部程序存儲器讀選通信號線
EN/VPP(31):內(nèi)部和外部程序存儲器的選擇線
XTAL1(19) 和XTAL2(18):接外部石英晶體
XTAL1(19) 和XTAL2(18):接外部石英晶體
I/O端口:
8051共有4 I/O端口,為P0,P1,P2,P3;4個I/O口都是雙向的,且每個口都具有鎖存器。每個端口有8條線,共計32條I/O線。
P0.0~P0.7;P1.0~P1.7;P2.0~P2.7;P3.0~P3.7
1. P0 有三個功能
1)。外部擴(kuò)充存儲器時,作數(shù)據(jù)總線(D0~D7)
2)。外部擴(kuò)充存儲器時,作地址總線(A0~A7)
3)。不擴(kuò)充時,作一般I/O使用,內(nèi)部無上拉電阻,作為輸出/輸入使用時應(yīng)加上拉電阻
2. P1只作I/O口使用,有內(nèi)部上拉電阻。
3. P2有兩個功能
1)。擴(kuò)充外部存儲器時,作地址總線(A8~A15)使用。
2)。作一般I/O口使用,有內(nèi)部上拉電阻。
0.003.jpg (33.06 KB, 下載次數(shù): 49)
下載附件
2016-6-23 23:36 上傳
3.2蜂鳴器(如下圖2.3-1)
圖2.3-1
此電路當(dāng)BEEP孔懸空時,三極管導(dǎo)通,喇叭內(nèi)部無震蕩電路,音膜不動。當(dāng)BEEP孔接在單片機(jī)時,引腳高地電平不斷的變化,音膜被拉動,發(fā)出聲音。
四、 音樂調(diào)音器設(shè)計原理4.1單片機(jī)發(fā)聲的基本原理
眾所周知,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單處機(jī)某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào)。音符的節(jié)拍我們可以用定時器T0來控制,送入不同的初值,就可以產(chǎn)生不同的定時時間。便如某歌曲的節(jié)奏為每分鐘94拍,即一拍為0.64秒。但是,由于T0的最大定時時間只能為131毫秒,因此不可能直接用改變T0的時間初值來實現(xiàn)不同節(jié)拍。我們可以用T0來產(chǎn)生10毫秒的時間基準(zhǔn),然后設(shè)置一個中斷計數(shù)器,通過判別中斷計數(shù)器的值來控制節(jié)拍時間的長短。。例如對1/4拍音符,定時時間為0.16秒,相應(yīng)的時間常數(shù)為16(即10H);對3拍音符,定時時間為1.92秒,相應(yīng)時間長數(shù)為192(即C0H)。我們將每一音符的時間常數(shù)和其相應(yīng)的節(jié)拍常數(shù)作為一組,按順序?qū)非械乃谐?shù)排列成一個表,然后由查表程序依次取出,產(chǎn)生音符并控制節(jié)奏,就可以實現(xiàn)演奏效果。此外,結(jié)束符和體止符可以分別用代碼00H和FFH來表示,若查表結(jié)果為00H,則表示曲子終了;若查表結(jié)果為FFH,則產(chǎn)生相應(yīng)的停頓效果。為了產(chǎn)生手彈的節(jié)奏感,在某些音符(例如兩個相同音符)音插入一個時間單位的頻率略有不同的音符。
4.2設(shè)計的相關(guān)音樂說明1要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期時間。利用半周期時間定時這個半周期時間,每當(dāng)計時到后就將輸出的I/O反向,然后重復(fù)計時此半周期再對I/O反向,就可以在I/O腳上得到此頻率的脈沖。
2利用8051的內(nèi)部定時器使其工作在記數(shù)模式MODE1下,改變記數(shù)值TH0及 TL0以產(chǎn)生不同的方法。
3 記數(shù)脈沖值與頻率的關(guān)系公式如:N=Fi/2/Fr。N:記數(shù)值:Fi:內(nèi)部計時依次為1us,故其頻率為1 MHZ; Fr:要產(chǎn)生的頻率;
4 其記數(shù)值的求法如:T=65536-N=65536-Fi/2/Fr。例:設(shè)K=65536,F=1000000=Fi=1 MHZ。求低音DO(26HZ),中音DO(523HZ),高音DO(1046HZ)的記數(shù)值。
5 調(diào)音量主要就是調(diào)節(jié)占空比。占空比越大,音量越高,反之,占空比越小,音量越小。
5 音樂編碼表
每個音符都對應(yīng)了一個T值,12M晶振時各音符的T值如下表1:
表1: 12M晶振時對應(yīng)的T值表
每個音符的發(fā)音長度,各調(diào)節(jié)拍與時間的設(shè)定如下表2所示:
表2: 調(diào)值與節(jié)拍延時時間關(guān)系表
4.3音樂調(diào)音器硬件電路圖
0.004.jpg (63.36 KB, 下載次數(shù): 70)
下載附件
2016-6-23 23:36 上傳
4.4 主程序#include
sbit BEEP=P3^7;
sbit key1=P2^2;
sbit key2=P2^5;
bit bz;
char b;
char m=5;
void Delay(unsigned int ms)
{
while(ms--);
}
void init()
{
EA=1;
TMOD=0X01;
TH0=(64536)/256;
TL0=(64536)%256;
ET0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
if((key1==0)&&(bz==0))
{ Delay(11);
if(key1==0)
{ bz=1;
if(m<10) m++;
}}
if((key2==0)&&(bz==0))
{ Delay(11);
if(key2==0)
{ bz=1;
if(m>0) m--;}}
if((key1==1)&&(key2==1))
bz=0 ; }
}
void to() interrupt 1
{
TH0=(64536)/256;
TL0=(64536)%256;
b++;
if(b==10) b=0;