第一篇:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)報(bào)告-按鍵控制定時(shí)器選播多段音樂要點(diǎn)
Proteus 仿 真 大 作 業(yè)
課題:按鍵控制定時(shí)器選播多段音樂 系部: 電子工程系
班級(jí): 計(jì)算機(jī)控制技術(shù)1201班 姓名: 張坤 指導(dǎo)老師:馬磊娟 2014.11.06
前 言
Proteus技術(shù)是計(jì)算機(jī)控制技術(shù)的核心課程,經(jīng)過一年的學(xué)習(xí)本人對(duì)于其也有了一定的理解此次大型作業(yè)的布置正好可以驗(yàn)證自己所學(xué)如何能否實(shí)際應(yīng)用
本次設(shè)計(jì)中的硬件設(shè)計(jì)涉及8051輸入/輸出(I/O)端口獨(dú)立式鍵盤、TFT彩屏顯示等應(yīng)用,而軟件設(shè)計(jì)采用C51語言編寫。因此我的課程設(shè)計(jì)基本涵蓋了課程的重要內(nèi)容,較好的檢測(cè)我的學(xué)習(xí)效果。
Proteus課程設(shè)計(jì)是一個(gè)工程項(xiàng)目,在這一工程中包括選題、繪制電路圖+編制程序、Proteus仿真、系統(tǒng)仿真與調(diào)試、系統(tǒng)正常運(yùn)行等流程。在老師的安排下,我嚴(yán)格按照這一流程開展項(xiàng)目,并最終完成本項(xiàng)目—基于單片機(jī)的推箱子游戲設(shè)計(jì)。接下來我將具體介紹我們?cè)陂_展項(xiàng)目中遇到的問題和解決方案的設(shè)計(jì)。
前 言................................................................................................................................2 摘要..................................................................................................................................4 硬件設(shè)計(jì)方案..................................................................................................................5 1.單片機(jī)及晶振模塊.............................................................................................5 2.數(shù)碼管顯示模塊...................................................................................................7 3.按鍵控制模塊.......................................................................................................8 4.揚(yáng)聲器模塊...........................................................................................................8 程序:......................................................................................................................9 原理圖:........................................................................................................................12 安裝與調(diào)試:................................................................................................................13 心得與體會(huì):................................................................................................................14 元件清單如下:............................................................................................................15 參考文獻(xiàn):....................................................................................................................16
摘要
本課程設(shè)計(jì)是按鍵控制定時(shí)器選擇多段音樂,以AT89S52為系統(tǒng)的操作核心,以一個(gè)數(shù)碼管顯示播放音樂的序號(hào),通過按鍵來選擇音樂(本課程設(shè)計(jì)中含3首音樂)。
硬件設(shè)計(jì)方案
1.單片機(jī)及晶振模塊
該設(shè)計(jì)選用的是Atmel公司生產(chǎn)的AT89S52型單片機(jī),由石英晶體振蕩器產(chǎn)生單片機(jī)工作時(shí)所需的時(shí)鐘信號(hào),振蕩器采用的是12M的晶振,使其機(jī)器周期為1us,方便發(fā)音程序的計(jì)算和編譯。
AT89S52是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。
AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。
AT89S52的引腳分布
:
2.數(shù)碼管顯示模塊
該部分只用了一個(gè)數(shù)碼管,用來顯示播放的音樂序列,數(shù)碼管的7個(gè)管腳都接了1K的上拉電阻。數(shù)碼管顯示的歌曲序列為0,1,2。
3.按鍵控制模塊
此模塊只用了兩個(gè)按鍵,按鍵K1用來控制歌曲的開始和停止,接P1.0口,按鍵K2用于選擇歌曲,接P3.2口。按下K1,開始播放音樂,隨著改變數(shù)碼管的顯示值(0、1、2),將出現(xiàn)對(duì)應(yīng)的音樂。
4.揚(yáng)聲器模塊
揚(yáng)聲器上接了一個(gè)三極管,用于放大聲音。
程序:
#include
uchar Song_Index=0,Tone_Index=0;//當(dāng)前音樂段索引,音符索引 //數(shù)碼管段碼表 uchar
code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//標(biāo)準(zhǔn)音符頻率對(duì)應(yīng)的延時(shí)表 uchar
code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};
uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};//三段音樂的音符 uchar code Song[][50]= {
{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1}, {3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1},{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1} };
//三段音樂的節(jié)拍 uchar code Len[][50]= {
{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1}, {1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1} };
//外部中斷0
void EX0_INT()interrupt 0 {
TR0=0;//播放結(jié)束或者播放中途切換歌曲時(shí)停止播放 Song_Index=(Song_Index+1)%3;//跳到下一首的開頭 Tone_Index=0;
P2=DSY_CODE[Song_Index];//數(shù)碼管顯示當(dāng)前音樂段號(hào) }
//定時(shí)器0中斷函數(shù) void T0_INT()interrupt 1 {
TL0=LO_LIST[Song[Song_Index][Tone_Index]];TH0=HI_LIST[Song[Song_Index][Tone_Index]];SPK=~SPK;} //延時(shí)
void DelayMS(uint ms){ uchar t;
while(ms--)for(t=0;t<120;t++);} //主程序 void main(){ P2=0xc0;SPK=0;
TMOD=0x00;//T0方式0 IE=0x83;IT0=1;IP=0x02;while(1){
while(K1==1);//未按鍵等待 while(K1==0);//等待釋放 TR0=1;//開始播放
Tone_Index=0;//從第0個(gè)音符開始
//播放過程中按下K1可提前停止播放(K1=0)。
//若切換音樂段會(huì)觸發(fā)外部中斷,導(dǎo)致TR0=0,播放也會(huì)停止 while(Song[Song_Index][Tone_Index]!=-1&&K1==1&&TR0==1){
DelayMS(300*Len[Song_Index][Tone_Index]);//播放延時(shí)(節(jié)拍)Tone_Index++;//當(dāng)前音樂段的下一音符索引 }
TR0=0;//停止播放
while(K1==0);//若提前停止播放,按鍵未釋放時(shí)等待 } }
原理圖:
安裝與調(diào)試:
安裝過程: 檢查印刷電路板有無斷路、短路,若有,首先處理好。2 焊接順序:先焊單片機(jī),在焊接各分塊電路,先焊平面的,后焊立體的,原則是有利于焊接。要求臥裝水平、豎裝垂直、相同元件等高。要特別注意元器件的安裝方向!焊接要點(diǎn):將元件整形后插入對(duì)應(yīng)位置,電路板平放在臺(tái)面上,一手握烙鐵對(duì)焊盤和引腳同時(shí)接觸預(yù)熱,另一手持焊錫絲與焊盤處烙鐵接觸,使錫絲熔化,當(dāng)錫絲熔化一定量時(shí)(多了不好少了不行),立即將錫絲離去,烙鐵繼續(xù)保持少許時(shí)間,讓焊錫圍繞焊盤自由流動(dòng),形成一個(gè)完全覆蓋焊盤的鐘形(忌諱球形)焊點(diǎn)。切勿將焊錫先溶化在烙鐵上再去焊接,這樣錫絲里的助焊劑在未焊接前先揮發(fā)了,不利于焊接,而且焊點(diǎn)沒有光澤。剪腳:元件焊好后,將多余引腳剪掉,剪腳后的焊點(diǎn)應(yīng)露出引腳0.5-1mm。本課設(shè)要求引腳露出2mm,以利于元件重復(fù)使用。檢查各元件是否出現(xiàn)焊接錯(cuò)誤情況以及短路、斷路情況。6 將5V直流電源接入單片機(jī)以及其他各分模塊電源端。若發(fā)現(xiàn)元器件發(fā)熱或者有異味,應(yīng)立即切斷電源檢查。
7.正常電路LED燈以及數(shù)碼管會(huì)工作在較為穩(wěn)定、準(zhǔn)確的狀態(tài),可據(jù)此來進(jìn)一步檢測(cè)電路連接是否、存在問題
調(diào)試過程:接上5V電源后,按下K1鍵,會(huì)有音樂,隨著K2的按下,音樂也隨之改變。過程較為順利。心得與體會(huì):
在這次課程設(shè)計(jì)中,我們把學(xué)習(xí)的單片機(jī)理論知識(shí)運(yùn)用到了實(shí)踐中,加深了我們對(duì)單片機(jī)理解,同時(shí)熟悉了單片機(jī)的使用,加強(qiáng)了我們的動(dòng)手能力。在電路的焊接方面,也學(xué)到了一些知識(shí),如怎樣使排版好看,不要雜亂無章。焊接時(shí),要注意很多的細(xì)節(jié),排線走線都要小心,很容易造成短路。
元件清單如下:
22pf的電容兩個(gè) 12MHZ晶振一個(gè) 10K電阻一個(gè) 10uf電容一個(gè) 2個(gè)按鍵 1個(gè)共陽(yáng)數(shù)碼管 8個(gè)1K的電阻 1個(gè)蜂鳴器 1個(gè)89S52單片機(jī)
參考文獻(xiàn):
[1 ].謝維成、楊加國(guó) 單片機(jī)原理與應(yīng)用及c51程序設(shè)計(jì).北京:清華大學(xué)出版社
[2].閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,2006 [3].譚浩強(qiáng) C程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社 [4].童詩(shī)白 模擬電子技術(shù)基礎(chǔ).北京:清華大學(xué)出版社 [5].王一群 怎樣用電腦設(shè)計(jì)電子線路 福建 科學(xué)出版社 [6].王宏研,張?chǎng)?電子綜合設(shè)計(jì)實(shí)驗(yàn)教程 山東大學(xué)出版社
[7].陳永甫.多功能集成電路555經(jīng)典應(yīng)用實(shí)例第一集.北京:電子工業(yè)出版社
[8].王新閑.通用集成電路速查手冊(cè).山東:山東科學(xué)出版社,2005 [9].崔瑞雪、張?jiān)隽?電子技術(shù)動(dòng)手實(shí)踐.北京:北京航空航天出版社,2007
第二篇:?jiǎn)纹瑱C(jī)課程設(shè)計(jì)音樂鬧鐘定時(shí)器
目錄:
0、任務(wù)書...............................................................................2
1、系統(tǒng)總體設(shè)計(jì)方案規(guī)劃與選定.......................................2
2、硬件設(shè)計(jì)...........................................................................5
3、軟件設(shè)計(jì)...........................................................................6
4、調(diào)試...................................................................................8
5、新增功能及實(shí)現(xiàn)方法.......................................................8
6、小結(jié)與體會(huì).......................................................................9
7、參考文獻(xiàn)...........................................................................9
8、附錄.................................................................................10
單片機(jī)課程設(shè)計(jì)
0.任務(wù)書
基于51單片機(jī)設(shè)計(jì)一個(gè)電子數(shù)字鐘,顯示時(shí)、分、秒,且具有鬧鐘功能。用8255接口實(shí)現(xiàn)4*8鍵盤及8位LED顯示。
32個(gè)鍵:0~9共10個(gè)鍵,調(diào)時(shí)(設(shè)置當(dāng)前時(shí)間)鍵;設(shè)定鬧鐘(定時(shí))鍵;走時(shí)鍵;光標(biāo)左右移動(dòng)各一個(gè)鍵。
要求鍵復(fù)位后,應(yīng)該最后面的LED上顯示H(待命狀態(tài))。
1.系統(tǒng)總體設(shè)計(jì)方案規(guī)劃與選定
1.1主控制芯片選擇
方案一:采用ARM微處理,做主控芯片,計(jì)算速度快,缺點(diǎn);成本高,控制較復(fù)雜,不容易焊接。
方案二:采用80C51單片機(jī)做主控制器,由單片機(jī)來完成采集和信號(hào)處理等底層的核心計(jì)算,做主控芯片,成本低,易控制,易實(shí)現(xiàn)。
經(jīng)過以上兩個(gè)方案比較,在此題方案二明顯優(yōu)于方案一,故采用80C51單片機(jī)做主控制器。
1.2定時(shí)模塊選擇
方案一:采用時(shí)鐘芯片DS1302。
DS1302 可以用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù)點(diǎn)的記錄,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄,且較單片機(jī)計(jì)時(shí)簡(jiǎn)單節(jié)約硬件資源,但存在時(shí)鐘精度不高,易受環(huán)境影響,出現(xiàn)時(shí)鐘混亂等缺點(diǎn)。
方案二:采用單片機(jī)內(nèi)部的定時(shí)系統(tǒng),外接晶振進(jìn)行分頻脈沖計(jì)數(shù)。
單片機(jī)課程設(shè)計(jì)
此系統(tǒng)采用12MHz晶振。
由于方案二使用簡(jiǎn)單,比方案一更適用該系統(tǒng)設(shè)計(jì),所以選擇方案二。
1.3 LED顯示及計(jì)時(shí)模塊選擇
方案一:74LS192計(jì)數(shù)器——74LS47七點(diǎn)顯示譯碼器
74LS192芯片是一塊可預(yù)置數(shù)可逆計(jì)數(shù)芯片,功能強(qiáng)大。將74LS192芯片CPU引腳接高電平可實(shí)現(xiàn)減法計(jì)數(shù),以倒計(jì)時(shí)顯示。可通過74LS47與LED共陽(yáng)極數(shù)字顯示器配合使用。
方案二:使用移位寄存器74HC595與譯碼器相連
74HC595具有8位移位寄存器和一個(gè)存儲(chǔ)器,使用時(shí)可直接與數(shù)字顯示器相連。
方案三:使用8255擴(kuò)展LED顯示計(jì)時(shí)模塊
8255是一個(gè)可編程并行接口芯片,有一個(gè)控制口和三個(gè)8位數(shù)據(jù)口,外設(shè)通過數(shù)據(jù)口與單片機(jī)進(jìn)行數(shù)據(jù)通信,各數(shù)據(jù)口的工作方式和數(shù)據(jù)傳送方向是通過用戶對(duì)控制口寫控制字控制的。我們用到了A與B口分別進(jìn)行對(duì)數(shù)碼顯示管的片選和段選,且B口同時(shí)作為鍵盤掃描模塊的輸入口,與數(shù)碼顯示模塊分時(shí)復(fù)用。故采用方案三
1.4蜂鳴器的選擇
方案一:電磁式蜂鳴器
電磁式蜂鳴器主要是利用通電導(dǎo)體會(huì)產(chǎn)生磁場(chǎng)的特性,用一個(gè)固定的永久磁鐵與通電導(dǎo)體產(chǎn)生磁力推動(dòng)固定在線圈上的鼓膜。電磁式由于音色好,所以多用于語音、音樂等設(shè)備。對(duì)于不同提示音且考慮實(shí)際,此種較好。
方案二:壓電式蜂鳴器
單片機(jī)課程設(shè)計(jì)
壓電式蜂鳴器用的是壓電材料,即當(dāng)受到外力導(dǎo)致壓電材料發(fā)生形變時(shí)壓電材料會(huì)產(chǎn)生電荷。同樣,當(dāng)通電時(shí)壓電材料會(huì)發(fā)生形變。壓電式結(jié)構(gòu)簡(jiǎn)單耐用但音調(diào)單一音色差,適用于警報(bào)器等設(shè)備。
由于鬧鈴為音樂鬧鈴,所以使用電磁式蜂鳴器更為合適。
2.硬件設(shè)計(jì)
2.1 芯片的選擇
2.1.1 單片機(jī)80C51 2.1.1.1單片機(jī)80C51的組成
80c51單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說明:
中央處理器:
中央處理器(CPU)是整個(gè)單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。
數(shù)據(jù)存儲(chǔ)器(RAM)8051內(nèi)部有128個(gè)8位用戶數(shù)據(jù)存儲(chǔ)單元和128個(gè)專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能使用的RAM只有128個(gè),可存放讀寫的數(shù)據(jù),運(yùn)算的中間結(jié)果或用戶定義的字型表。
程序存儲(chǔ)器(ROM):
8051共有4096個(gè)8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。
單片機(jī)課程設(shè)計(jì)
定時(shí)/計(jì)數(shù)器(ROM):
8051有兩個(gè)16位的可編程定時(shí)/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。
并行輸入輸出(I/O)口:
8051共有4組8位I/O口(P0、P1、P2或P3),用于對(duì)外部數(shù)據(jù)的傳輸。
2.1.1.2
MCS-51的引腳說明:
MCS-52系列單片機(jī)中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個(gè)引腳中,正電源和地線兩根,外置石英振蕩器的時(shí)鐘線兩根,4組8位共32個(gè)I/O口,中斷口線與P3口線復(fù)用?,F(xiàn)在我們對(duì)這些引腳的功能加以說明:
MCS-51的引腳說明:
MCS-52系列單片機(jī)中的8031、8051及8751均采用40Pin封裝的雙列直接DIP結(jié)構(gòu),右圖是它們的引腳配置,40個(gè)引腳中,正電源和地線兩根,外置石英振蕩器的時(shí)鐘線兩根,4組8位共32個(gè)I/O口,中斷口線與P3口線復(fù)用。
單片機(jī)課程設(shè)計(jì)
圖1 80C51的引腳
2.1.1.3 MCS-51單片機(jī)內(nèi)部定時(shí)器計(jì)數(shù)器、中斷系統(tǒng)簡(jiǎn)介(1)定時(shí)器計(jì)數(shù)器
1、MCS-51系列中51子系列有兩個(gè)16位的可編程定時(shí)計(jì)數(shù)器可:定時(shí)計(jì)數(shù)器T0和定時(shí)計(jì)數(shù)器T1。它由加法計(jì)數(shù)器、方式寄存器TMOD、控制寄存器TCON等組成。方式寄存器用于設(shè)定定時(shí)計(jì)數(shù)器T0和T1的工作方式,控制寄存器用于對(duì)定時(shí)計(jì)數(shù)器啟動(dòng)、停止進(jìn)行控制。
2、每個(gè)定時(shí)計(jì)數(shù)器既可以對(duì)系統(tǒng)時(shí)鐘計(jì)數(shù)實(shí)現(xiàn)定時(shí),也可以外部信號(hào)計(jì)數(shù)實(shí)現(xiàn)計(jì)數(shù)功能通過編程設(shè)定來實(shí)現(xiàn)。
3、每個(gè)定時(shí)計(jì)數(shù)器都有多種工作方式,其中T0有四種工作方式,T1有三種工作方式,T2有三種工作方式。通過編程可設(shè)定工作于某種方式。四種工作方式為:13位定時(shí)計(jì)數(shù)器、16位定時(shí)計(jì)數(shù)器、8位自動(dòng)重置定時(shí) 6
單片機(jī)課程設(shè)計(jì)
計(jì)數(shù)器、兩個(gè)8位定時(shí)計(jì)數(shù)器(只有T0有)
4、每一個(gè)定時(shí)計(jì)數(shù)器定時(shí)計(jì)數(shù)時(shí)間到時(shí)產(chǎn)生溢出,使相應(yīng)的溢出位置位,溢出可通過查詢或中斷方式處理。
(2)中斷系統(tǒng)
1、MCS-51單片機(jī)提供5個(gè)硬件中斷源,2個(gè)外部中斷源,2個(gè)定時(shí)計(jì)數(shù)器T0和T1的溢出中斷TF0和TF1,1個(gè)串行口發(fā)送TI和接收RI中斷。
2、MCS-51單片機(jī)中沒有專門的開中斷和關(guān)中斷指令,對(duì)各個(gè)中斷源的允許和屏蔽是由內(nèi)部的中斷允許寄存器IE的各位來控制的。中斷允許寄存器IE的字節(jié)地址為A8H,可以進(jìn)行位尋址。系統(tǒng)復(fù)位時(shí),中斷允許寄存器IE的內(nèi)容為00H,如果要開放某個(gè)中斷源,則必須使IE中的總控置位和對(duì)應(yīng)的中斷允許位置“1”。
3、MCS-51單片機(jī)有5個(gè)中斷源,為了處理方便,每個(gè)中斷源有兩級(jí)控制,高優(yōu)先級(jí)和低優(yōu)先級(jí)。通過由內(nèi)部的中斷優(yōu)先級(jí)寄存器IP來設(shè)置,中斷優(yōu)先級(jí)寄存器IP的字節(jié)地址為B8H,可以進(jìn)行位尋址。如果某位被置“1”,則對(duì)應(yīng)的中斷源被設(shè)為高優(yōu)先級(jí);如果某位被清零,則對(duì)應(yīng)的中斷源被設(shè)為低優(yōu)先級(jí)。對(duì)于同級(jí)中斷源,系統(tǒng)有默認(rèn)的優(yōu)先權(quán)順序,從高到低優(yōu)先權(quán)順序?yàn)橥獠恐袛?、定時(shí)計(jì)數(shù)器T0中斷、外部中斷
1、定時(shí)計(jì)數(shù)器T1中斷、串行口中斷。通過設(shè)置中斷優(yōu)先級(jí)寄存器IP能夠改變系統(tǒng)默認(rèn)的優(yōu)先級(jí)順序。
4、MCS-51單片機(jī)響應(yīng)中斷的條件為:中斷源有請(qǐng)求且中斷允許。
2.1.2 八位一體七段數(shù)碼管
單片機(jī)課程設(shè)計(jì)
數(shù)碼管使用條件:
a、段及小數(shù)點(diǎn)上加限流電阻。
b、使用電壓:段:根據(jù)發(fā)光顏色決定; 小數(shù)點(diǎn):根據(jù)發(fā)光顏色決定。c、使用電流:靜態(tài):總電流 80mA(每段 10mA);動(dòng)態(tài):平均電流 4-5mA 峰值電流 100mA 上圖為七段數(shù)碼管引腳圖,其中共陽(yáng)極數(shù)碼管引腳圖和共陰極相同。LED數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽(yáng)兩類,了解LED的這些特性,對(duì)編程是很重要的,因?yàn)椴煌愋偷臄?shù)碼管,除了它們的硬件電路有差異外,編程方法也是不同的。右圖是共陰和共陽(yáng)極數(shù)碼管的內(nèi)部電路,它們的發(fā)光原理是一樣的,只是它們的電源極性不同而已。
將多只LED的陰極連在一起即為共陰式,而將多只LED的陽(yáng)極連在一起即為共陽(yáng)式。以共陰式為例,如把陰極接地,在相應(yīng)段的陽(yáng)極接上正電源,該段即會(huì)發(fā)光。當(dāng)然,LED的電流通常較小,一般均需在回路中接上限流電阻。假如我們將“b”和“c”段接上正電源,其它端接地或懸空,那么“b”和“c”段發(fā)光,此時(shí),數(shù)碼管顯示將顯示數(shù)字“1”。而將“a”、“b”、“d”、“e”和“g”段都接上正電源,其它引腳懸空,此時(shí)數(shù)碼管將顯示“2”。其它字符的顯示原理類同。
單片機(jī)課程設(shè)計(jì)
2.1.3 并行接口擴(kuò)展芯片8255 8255內(nèi)部包括三個(gè)并行數(shù)據(jù)輸入/輸出端口,兩個(gè)工作方式控制電路,一個(gè)讀/寫控制邏輯電路和8位總線緩沖器。
各部分功能概括如下:(1)端口A、B、C A口:是一個(gè)8位數(shù)據(jù)輸出鎖存器/緩沖器和一個(gè)8位數(shù)據(jù)輸入鎖存器。B口:是一個(gè)8位數(shù)據(jù)輸入/輸出鎖存器/緩沖器和一個(gè)8位數(shù)據(jù)輸入鎖存器。C口:是一個(gè)8位數(shù)據(jù)輸出鎖存器/緩沖器和一個(gè)8位數(shù)據(jù)輸入緩沖器(輸入不鎖存)。
通常A口、B口作為數(shù)據(jù)輸入/輸出端口。C口作為控制/狀態(tài)信息端口,它在“方式控制字”的控制下可分為兩個(gè)4位端口,每個(gè)端口有一個(gè)4位鎖存器,分別與A口、B口配合使用,作為控制信號(hào)輸出或狀態(tài)信息輸入端口。
(2)工作方式控制電路
工作方式控制電路有兩個(gè),一個(gè)是A組控制電路,另一個(gè)是B組控制電路。
單片機(jī)課程設(shè)計(jì)
這兩組控制電路具有一個(gè)控制命令寄存器,用來接受中央處理器發(fā)來的控制字,以決定兩組端口的工作方式,也可根據(jù)控制字的要求對(duì)C口按位清“0”或者按位置“1”。
A組控制電路用來控制A口和C口的上半部分(PC7-PC4)。B組控制電路用來控制B口和C口的下半部分(PC3-PC0)。
(3)總線數(shù)據(jù)緩沖器
總線數(shù)據(jù)緩沖器是一個(gè)三態(tài)雙向8位緩沖器,作為8255與系統(tǒng)總線之間的接口,用來傳送數(shù)據(jù)、指令、控制命令以及外部狀態(tài)信息。
(4)讀/寫控制邏輯電路
讀/寫控制邏輯電路接受CPU發(fā)來的控制信號(hào)RD、WR、RESET、地址信號(hào)A1-A0等,然后根據(jù)控制信號(hào)的要求,將端口數(shù)據(jù)讀出,發(fā)往CPU,或者將CPU送來的數(shù)據(jù)寫入端口。
2.2 電路的組成
2.2.1 數(shù)碼管顯示電路
數(shù)碼管顯示器成本低,配置靈活,與單片機(jī)接口簡(jiǎn)單,在單片機(jī)應(yīng)用系統(tǒng)中廣泛應(yīng)用。
數(shù)碼管的工作原理如下:
數(shù)碼管是由8個(gè)發(fā)光二極管構(gòu)成的顯示器件。在數(shù)碼管中,若將二極管的陽(yáng)極連在一起,稱為共陽(yáng)極數(shù)碼管;若將二極管的陰極連在一起,稱為共陰極數(shù)碼管。本次課程設(shè)計(jì)用到的8個(gè)數(shù)碼管均是共陽(yáng)極的。當(dāng)發(fā)光二極管導(dǎo)通時(shí),它就會(huì)發(fā)光。每個(gè)二極管就是一個(gè)筆劃,若干個(gè)二極管發(fā)光時(shí),就
單片機(jī)課程設(shè)計(jì)
構(gòu)成了一個(gè)顯示字符。將單片機(jī)的I/O口控制相應(yīng)的芯片與數(shù)碼管的a-g相連,高電平的位對(duì)應(yīng)的發(fā)光二極管亮,這樣,由I/O口輸出不同的代碼,就可以控制數(shù)碼管顯示不同的字符。8個(gè)數(shù)碼管均采用動(dòng)態(tài)顯示方式,顯示當(dāng)前的時(shí)間。
2.2.2 鍵盤掃描電路
鍵盤掃描電路圖
鍵盤可分為兩類:非編碼鍵盤和編碼鍵盤;常見的非編碼鍵盤有兩種結(jié)構(gòu):獨(dú)立式鍵盤和矩陣式鍵盤。本次課程設(shè)計(jì)使用矩陣式鍵盤。
矩陣鍵盤的工作原理:按鍵設(shè)置在行、列線交點(diǎn)上,行、列線分別連接到按鍵開關(guān)的兩端。列線通過上拉電阻接到+5V 電源上。無按鍵按下時(shí),列線處于高電平的狀態(tài),而當(dāng)有按鍵按下時(shí),列線電平與此列線相連的行線電平?jīng)Q定。
行列掃描法原理:第一步,使列線為編程的輸入線,行線是輸出線,拉低所有的行線,判斷列線的變化,如果有按鍵按下,按鍵按下的對(duì)應(yīng)列線被拉低,否則所有的列線都為高電平。第二步,在第一步判斷有鍵按下后,延時(shí)10ms消除機(jī)械抖動(dòng),再次讀取列值,如果此列線還處于低電平狀態(tài)則進(jìn)入下一步,否則返回第一步重新判斷。第三步,開始掃描按鍵位置,采用 11
單片機(jī)課程設(shè)計(jì)
逐行掃描,分別拉低第一行,第二行,第三行,第四行,無論拉低哪一行其他三行都為高電平,讀取列值找到按鍵的位置,分別把行值和列值儲(chǔ)存在寄存器里。第四步,從寄存器中找到行值和列值并把其合并,得到按鍵值,對(duì)此按鍵值進(jìn)行編碼,與已經(jīng)設(shè)定好的鍵碼表進(jìn)行一一對(duì)比,如果不等,則繼續(xù)比較,如果相等,則利用轉(zhuǎn)移指令實(shí)現(xiàn)鍵盤掃描到按鍵功能的轉(zhuǎn)移。
2.2.3 音樂鬧鈴電路
蜂鳴器電路
2.2.3.1 蜂鳴器
蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型,他廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電話 12
單片機(jī)課程設(shè)計(jì)
機(jī)等電子產(chǎn)品中作發(fā)聲器件。
2.2.3.2 單片機(jī)驅(qū)動(dòng)
單片機(jī)上面使用的蜂鳴器一般都是無源電磁式的蜂鳴器(如下圖所示)。它由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng),振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。
蜂鳴器發(fā)聲原理是電流通過電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)來驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)它,單片機(jī)IO引腳輸出的電流較小,單片機(jī)輸出的TTL電平基本上驅(qū)動(dòng)不了蜂鳴器,因此需要增加一個(gè)電流放大的電路。
2.2.4 復(fù)位電路
RESET/Vpd為復(fù)位信號(hào)復(fù)用腳,當(dāng)80C51通電,時(shí)鐘電路開始工作,在RESET引腳上出現(xiàn)24個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計(jì)數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),80C51的初始態(tài)。
上電復(fù)位:上電復(fù)位電路是—種簡(jiǎn)單的復(fù)位電路,只要在RST復(fù)位引腳接一個(gè)電容到VCC,接一個(gè)電阻到地就可以了。上電復(fù)位是指在給系統(tǒng)上電時(shí),復(fù)位電路通過電容加到RST復(fù)位引腳一個(gè)短暫的高電平信號(hào),這個(gè)復(fù) 13
單片機(jī)課程設(shè)計(jì)
位信號(hào)隨著VCC對(duì)電容的充電過程而回落,所以RST引腳復(fù)位的高電平維持時(shí)間取決于電容的充電時(shí)間。為了保證系統(tǒng)安全可靠的復(fù)位,RST引腳的高電平信號(hào)必須維持足夠長(zhǎng)的時(shí)間。
電路圖如下:
上電自動(dòng)復(fù)位是通過外部復(fù)位電路的電容充電來實(shí)現(xiàn)的。只要Vcc的上升時(shí)間不超過1ms,就可以實(shí)現(xiàn)自動(dòng)上電復(fù)位。
3軟件設(shè)計(jì) 4.調(diào)試
5.新增功能及實(shí)現(xiàn)方法
5.1定時(shí)器產(chǎn)生音樂的原理
音樂的產(chǎn)生主要是通過單片機(jī)的I/O口輸出高低不同的脈沖信號(hào)來控制蜂鳴器發(fā)音。要想產(chǎn)生音頻脈沖信號(hào),需要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時(shí)間。利用單片機(jī)定時(shí)器計(jì)時(shí)這個(gè)半個(gè)周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的I/O口反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O口反相,這樣就能在此I/O口上得到此頻率的脈沖。
單片機(jī)課程設(shè)計(jì)
通常,利用單片機(jī)的內(nèi)部定時(shí)器0,工作在方式1下,改變計(jì)數(shù)初值TH0和TL0來產(chǎn)生不同頻率。
對(duì)于音樂的節(jié)拍,每個(gè)音符使用1個(gè)字節(jié),字節(jié)的高4位代表音符的高低,低4位代表音符的節(jié)拍。如果1拍為0.4S,1/4拍為0.1S,只要設(shè)定延遲時(shí)間就可求得節(jié)拍的時(shí)間。假設(shè)1/4拍為1DELAY,那么1拍應(yīng)為4DELAY,以此類推。所以只要求得1/4拍的DELAY,其余的節(jié)拍就是它的倍數(shù)。
總而言之,一首樂曲是由音階和節(jié)拍兩大要素構(gòu)成。一首樂曲演奏的原理是:不同音階分別對(duì)應(yīng)不同的頻率,發(fā)出不同的音調(diào),而節(jié)拍則控制發(fā)出音調(diào)時(shí)間的長(zhǎng)短;若將樂曲的音調(diào)連續(xù)發(fā)出,并使其按相應(yīng)的節(jié)拍變化,即可演奏一首樂曲。根據(jù)這一特點(diǎn),我們采用單片機(jī)輔以相應(yīng)的接口來設(shè)計(jì)音樂播放器。
5.2實(shí)現(xiàn)方法
利用定時(shí)器產(chǎn)生音樂,添加了音樂鬧鐘功能,能在鬧鐘時(shí)間到來時(shí)蜂鳴器發(fā)出《祝你生日快樂》歌,但缺點(diǎn)是在響鈴時(shí)間里,無法正常顯示時(shí)間。在此次課程設(shè)計(jì)中,產(chǎn)生的音樂是利用查表法來改變定時(shí)器T1的初值,即改變音高,而通過延時(shí)來確定每個(gè)音符的長(zhǎng)短,即確定音長(zhǎng)。
6.小結(jié)與體會(huì) 7.參考文獻(xiàn)
【1】《單片機(jī)原理、接口及應(yīng)用——單片機(jī)嵌入式系統(tǒng)技術(shù)基礎(chǔ)(第2版)》,肖看、李群芳,清華大學(xué)出版社
【2】《單片機(jī)原理及應(yīng)用》,霍孟友,機(jī)械工程出版社
【3】《51系列單片機(jī)設(shè)計(jì)實(shí)例(第二版)》,樓然苗、李光飛,北京航
單片機(jī)課程設(shè)計(jì)
空航天大學(xué)出版社
8.附錄
8.1 源程序代碼ORG 0000H LJMP START
ORG 000BH LJMP T0INT;T0中斷服務(wù)程序
ORG 001BH LJMP TIM0
;;;;;主程序;;;;;;;;START:LCALL CLEA
START1:LCALL SCAN LCALL BELLSCAN LCALL KEYSCAN SJMP START1
CLEA:MOV R0,#70H MOV R7,#0EH CLEAR:MOV @R0,#00H INC R0 DJNZ R7,CLEAR;70H~7CH賦值0 MOV TMOD,#11H MOV TL0,#0B0H MOV TH0,#03CH SETB EA SETB ET0 SETB EX0 SETB TR0 CLR IT0 MOV 72H,#10 MOV 75H,#10 MOV 68H,#55H MOV 69H,#01H MOV 6AH,#00H CLR P1.0 RET
;延時(shí)子程序1MS DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET
DL10MS:ACALL SCAN ACALL SCAN ACALL SCAN RET
;《祝你生日快樂》音樂鬧鈴程序BELLSCAN:MOV A,6AH
CJNE A,7AH,BELLOUT
MOV A,69H
CJNE A,79H,BELLOUT
MOV A,68H
CJNE A,78H,BELLOUT
LCALL MUSIC BELLOUT:RET MUSIC:
MOV IE,#8AH MOV 30H,#00H
NEXT1:MOV A,30H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV R2,A JZ END0 ANL A,#0FH MOV R5,A MOV A,R2 SWAP A ANL A,#0FH
單片機(jī)課程設(shè)計(jì)
JNZ SING CLR TR1 LJMP D1 SING:DEC A MOV 22H,A RL A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV TH1,A MOV 21H,A MOV A,22H RL A INC A MOVC A,@A+DPTR MOV TL1,A MOV 20H,A SETB TR1 D1:LCALL DELAY INC 30H LJMP NEXT1 END0:CLR TR1 LCALL BELLOUT
TIM0:PUSH ACC PUSH PSW MOV TL1,20H MOV TH1,21H CPL P1.0 POP PSW POP ACC RETI
DELAY:MOV R7,#02H D2:MOV R4,#187 D3:MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY RET
TABLE1:DW 64260,64400,64521,64580
DW 64684,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217
TABLE:;1
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H;2
DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00H
SCAN:;把記的數(shù)送給偏移量
MOV DPTR,#7FFFH MOV A,#80H
MOVX @DPTR,A;寫控制字,在顯示程序中A口輸出,B口輸出
MOV A,78H;秒 MOV B,#0AH DIV AB MOV 71H,A MOV 70H,B
MOV A,79H;分
MOV B,#0AH DIV AB MOV 74H,A MOV 73H,B
MOV A,7AH;時(shí)
MOV B,#0AH DIV AB MOV 77H,A
MOV 76H,B;
單片機(jī)課程設(shè)計(jì)
T0中斷允許
;循環(huán)掃描顯示,數(shù)碼管顯示程序,數(shù)碼管為共陽(yáng)型
MOV R1,#70H MOV R5,#80H;位選
MOV R3,#08H SCAN1:MOV A,R5 MOV DPTR,#7FFCH MOVX @DPTR,A;送A口位選
MOV A,@R1 MOV DPTR,#TAB MOVC A,@A+DPTR
MOV DPTR,#7FFDH MOVX @DPTR,A;送B口字形碼
LCALL DL1MS
INC R1;字形碼偏移量
MOV A,R5 RR A;位選碼
MOV R5,A DJNZ R3,SCAN1;8次
MOV DPTR,#7FFCH MOV A,#00H MOVX @DPTR,A;A口清位選
RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH;對(duì)應(yīng)于“0”~“9”、“_”
;定時(shí)器T0中斷服務(wù)程序 T0INT:PUSH ACC
CLR ET0;停
CLR TR0;停T0工作
MOV TL0,#0B0H MOV TH0,#03CH SETB TR0;開T0工作
INC 7BH;7BH存放20
MOV A,7BH
CJNE A,#14H,OUTT0;20
MOV 7BH,#00H
INC 78H;78H秒
MOV A,78H
CJNE A,#3CH,OUTT0;60
MOV 78H,#00H
INC 79H
;79H分
MOV A,79H
CJNE A,#3CH,OUTT0;60
MOV 79H,#00H
INC 7AH
;7AH時(shí)
MOV A,7AH
CJNE A,#18H,OUTT0;24
MOV 7AH,#00
OUTT0:SETB ET0;開T0中斷允許
POP ACC RETI
;;;;;;鍵盤掃描子程序;;;;;;;;
KEYSCAN:MOV DPTR,#7FFFH MOV A,#82H
MOVX @DPTR,A;寫控制字,此時(shí)A口輸出,B口輸入
MOV DPTR,#7FFEH MOV A,#00H
MOVX @DPTR,A;C口寫0
單片機(jī)課程設(shè)計(jì)
MOV DPTR,#7FFDH MOVX A,@DPTR MOV B,A
;B口輸入
CJNE A,#0FFH,HAVE KEYOUT: RET
HAVE: LCALL DL10MS1 MOVX A,@DPTR CJNE A,B,KEYOUT;延時(shí)一段時(shí)間再檢測(cè)有鍵按下才開始掃描處理
INC DPTR MOV A,#0FEH MOV B,A MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE0
MOV A,B RL A MOV B,A MOV DPTR,#7FFEH MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE1
MOV A,B RL A MOV B,A
MOV DPTR,#7FFEH
MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH
MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE2
MOV A,B RL A
MOV DPTR,#7FFEH
MOVX @DPTR,A;C口輸出行值
MOV DPTR,#7FFDH
MOVX A,@DPTR;B口輸入列值
CJNE A,#0FFH,KEYLIE3 ACALL KEYOUT;
KEYLIE0:MOV R2,#00H;R2 鍵碼 行值,第1行八個(gè)數(shù)
LJMP KEYGET
KEYLIE1:MOV R2,#08H;第2行,八個(gè)數(shù) LJMP KEYGET
KEYLIE2:MOV R2,#10H;第3行,八個(gè)數(shù) LJMP KEYGET
KEYLIE3:MOV R2,#18H;第4行,八個(gè)數(shù) LJMP KEYGET
KEYGET:MOV B,A
;B中存放B口讀入的列值
MOV DPTR,#KEYTAB MOV A,#0 NEXT: PUSH ACC
MOVC A,@A+DPTR CJNE A,B,AGAIN
POP ACC;A是偏移值,即列值 ADD A,R2;A中存放鍵碼
單片機(jī)課程設(shè)計(jì)
MOV B,A RL A
ADD A,B;PC偏移量
MOV LJMP KEYFUN30 LJMP KEYFUN31 RET KEYTAB:DB
0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH DPTR,#KEYFUNTAB JMP @A+DPTR
AGAIN: POP ACC INC A CJNE A,#8,NEXT ACALL KEYOUT
KEYFUNTAB: LJMP KEYFUN00 LJMP KEYFUN01 LJMP KEYFUN02 LJMP KEYFUN03 LJMP KEYFUN04 LJMP KEYFUN05 LJMP KEYFUN06 LJMP KEYFUN07 LJMP KEYFUN08 LJMP KEYFUN09 LJMP KEYFUN10 LJMP KEYFUN11 LJMP KEYFUN12 LJMP KEYFUN13 LJMP KEYFUN14 LJMP KEYFUN15 LJMP KEYFUN16 LJMP KEYFUN17 LJMP KEYFUN18 LJMP KEYFUN19 LJMP KEYFUN20 LJMP KEYFUN21 LJMP KEYFUN22 LJMP KEYFUN23 LJMP KEYFUN24 LJMP KEYFUN25 LJMP KEYFUN26 LJMP KEYFUN27 LJMP KEYFUN28 LJMP KEYFUN29
;0 1 2 3 4 5 6 7
RET
DL10MS1:MOV R4,#20 DL3: MOV R5,#7DH DL4: NOP NOP
DJNZ R5,DL4 DJNZ R4,DL3 RET
KEYFUN00:MOV @R0,#00H MOV A,7EH
CJNE A,#0FFH,CALCU
RET
KEYFUN01:MOV @R0,#01H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN02:MOV @R0,#02H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN03:MOV @R0,#03H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN04:MOV @R0,#04H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN05:MOV @R0,#05H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN06:MOV @R0,#06H MOV A,7EH
CJNE A,#0FFH,CALCU RET
單片機(jī)課程設(shè)計(jì)
KEYFUN07:MOV @R0,#07H MOV A,7EH CJNE A,#0FFH,CALCU RET KEYFUN08:MOV @R0,#08H MOV A,7EH CJNE A,#0FFH,CALCU RET KEYFUN09:MOV @R0,#09H MOV A,7EH CJNE A,#0FFH,CALCU RET CALCU: MOV A,71H MOV B,#0AH MUL AB ADD A,70H MOV 78H,A MOV A,74H MOV B,#0AH MUL AB ADD A,73H MOV 79H,A MOV A,77H MOV B,#0AH MUL AB ADD A,76H MOV 7AH,A RET
KEYFUN10://調(diào)時(shí)鍵 CLR TR0
MOV R0,#77H;R0指向時(shí)的偏移量
MOV 7DH,#00H;閃爍標(biāo)志位
LCALL FLASH
RET FLASH:MOV A,@R0 MOV @R0,#0BH;R0(此時(shí)77H)指向熄滅的偏移量
MOV 7CH,#3DH;7CH單元存放循環(huán)次數(shù) RE: LCALL OFFSCAN DJNZ 7CH,RE;調(diào)用OFFSCAN60次,半秒
MOV @R0,A;R0(此時(shí)77H)指向原來的偏移量
MOV 7CH,#3DH RE1: LCALL OFFSCAN
DJNZ 7CH,RE1;調(diào)用OFFSCAN60次,半秒 LCALL KEYSCAN;鍵盤掃描
MOV A,7DH CJNE A,#0FFH,FLASH;判斷閃爍標(biāo)志位
RET OFFSCAN: PUSH ACC MOV R1,#70H MOV R5,#80H;位選
MOV R3,#08H OFFSCAN1:MOV DPTR,#7FFFH MOV A,#80H
MOVX @DPTR,A;寫控制字
MOV A,R5 MOV DPTR,#7FFCH MOVX @DPTR,A;A口輸出位選
MOV A,@R1 MOV DPTR,#OFFTAB MOVC A,@A+DPTR
MOV DPTR,#7FFDH
MOVX @DPTR,A;B口輸出字形碼
LCALL DL1MS
INC R1
;R1指向下一個(gè)單元
MOV A,R5 RR A MOV R5,A;位選
DJNZ R3,OFFSCAN1;8次
單片機(jī)課程設(shè)計(jì)
MOV DPTR,#7FFCH MOV A,#00H MUL AB ADD A,73H MOV 69H,A MOVX @DPTR,A;A口位選清零
POP ACC RET OFFTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0FFH,89H RET //調(diào)時(shí)鍵按下
KEYFUN11:INC R0 RET KEYFUN12:DEC R0 RET KEYFUN13://走時(shí)鍵
MOV 7DH,#0FFH SETB TR0
RET KEYFUN14://鬧鈴鍵 MOV R0,#77H MOV 7EH,#0FFH;改變顯示單元,不改變計(jì)數(shù)單元
MOV 7DH,#00H;開FLASH標(biāo)志位
LCALL FLASH RET
KEYFUN15://鬧鐘時(shí)間確認(rèn)鍵,寫入計(jì)數(shù)比較單元
MOV A,71H MOV B,#0AH MUL AB ADD A,70H MOV 68H,A
MOV A,74H MOV B,#0AH
MOV A,77H MOV B,#0AH MUL AB ADD A,76H MOV 6AH,A RET
KEYFUN16:RET
KEYFUN17:MOV 7DH,#00H MOV 70H,#0CH
MOV 71H,#0BH
MOV 72H,#0BH
MOV 73H,#0BH
MOV 74H,#0BH
MOV 75H,#0BH
MOV 76H,#0BH
MOV 77H,#0BH;送熄滅符以及H符
MOV R0,#70H
LCALL FLASH
RET
KEYFUN18:MOV 7DH,#0FFH;關(guān)閉閃爍 LCALL CLEA RET KEYFUN19:RET KEYFUN20:RET KEYFUN21:RET KEYFUN22:RET KEYFUN23:RET KEYFUN24:RET KEYFUN25:RET KEYFUN26:RET KEYFUN27:RET KEYFUN28:RET KEYFUN29:RET KEYFUN30:RET KEYFUN31:RET ACALL KEYOUT END
單片機(jī)課程設(shè)計(jì)
8.2電路圖
總體電路圖
第三篇:《單片機(jī)原理及接口技術(shù)》課程設(shè)計(jì)報(bào)告——多通道秒表定時(shí)器(DOC)
《單片機(jī)原理及接口技術(shù)》
課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)名稱:多通道秒表定時(shí)計(jì)數(shù)器設(shè)計(jì)
院 系:自動(dòng)控制與機(jī)械工程學(xué)院
專業(yè):電氣工程及其自動(dòng)化
班級(jí):2012級(jí)電氣二班
姓名:黃瑞
學(xué)號(hào):201204170209
時(shí)間:2014年6月
目錄
一、課程設(shè)計(jì)目的和要求.....................................................................................................3
1、設(shè)計(jì)的目的.................................................................................................................3
2、設(shè)計(jì)的要求.................................................................................................................3
(1)總體要求.........................................................................................................3(2)具體要求.........................................................................................................4(3)設(shè)計(jì)提示.........................................................................................................4
二、設(shè)計(jì)的步驟和思路.........................................................................................................5
1、設(shè)計(jì)的步驟.................................................................................................................5
2、設(shè)計(jì)的思路.................................................................................................................5
三、硬件的設(shè)計(jì).......................................................................................................................6
1、信號(hào)輸入電路.............................................................................................................7
2、數(shù)碼管的驅(qū)動(dòng)模塊的電路.........................................................................................7
3、LED燈的驅(qū)動(dòng)模塊電路............................................................................................8
四、軟件設(shè)計(jì)...........................................................................................................................8
1、單片機(jī)選擇.................................................................................................................8
2、系統(tǒng)軟件設(shè)計(jì)分析.....................................................................................................9
3、主要功能實(shí)現(xiàn)的程序...............................................................................................10(1)通道號(hào)的設(shè)置...............................................................................................10(2)定時(shí)值的設(shè)置...............................................................................................11
五、調(diào)試說明.........................................................................................................................12
1、未啟動(dòng)仿真時(shí),初始狀態(tài):...................................................................................13
2、開始啟動(dòng)仿真后:...................................................................................................13
3、通過按下K2切換至一、二、三、四通道和定時(shí)值的設(shè)置:............................14
4、定時(shí)時(shí)間到后對(duì)應(yīng)通道號(hào)LED燈點(diǎn)亮:.............................................................15 六
心得體會(huì).........................................................................................................................16
七、致謝.................................................................................................................................17 八、參考文獻(xiàn).......................................................................................................................17
九、附錄.................................................................................................................................18
一、課程設(shè)計(jì)目的和要求
1、設(shè)計(jì)的目的
單片機(jī)課程作為獨(dú)立的教學(xué)環(huán)節(jié),是自動(dòng)化及相關(guān)專業(yè)集中實(shí)踐性環(huán)節(jié)系列之一,是學(xué)習(xí)完〈〈單片機(jī)原理與接口技術(shù)〉〉課程后,并在進(jìn)行相關(guān)課程設(shè)計(jì)基礎(chǔ)上進(jìn)行的一次綜合聯(lián)系。
單片機(jī)課程設(shè)計(jì)過程中,我們通過查閱資料,接口設(shè)計(jì)、程序設(shè)計(jì)、安裝調(diào)試等環(huán)節(jié),完成一個(gè)基于MCS-51系列單片機(jī),涉及多種資源應(yīng)用,并具有綜合應(yīng)用功能的小應(yīng)用課程設(shè)計(jì),不但使我們能熟練掌握課堂上所學(xué)知識(shí),而且還能使我們?cè)谠O(shè)備和軟件方面得到較全面的提高和鍛煉,也提高了我們運(yùn)用綜合知識(shí)解決實(shí)際的能力。
課程設(shè)計(jì)以學(xué)生認(rèn)知為主體,充分調(diào)動(dòng)學(xué)生的積極性,重視學(xué)生自學(xué)能力的培養(yǎng),根據(jù)具體課題安排時(shí)間確定課題的設(shè)計(jì)、編程和調(diào)試內(nèi)容,分團(tuán)隊(duì)開展課程設(shè)計(jì)活動(dòng),按時(shí)完成每部分工作。堅(jiān)持獨(dú)立完成,實(shí)現(xiàn)課題規(guī)定的各項(xiàng)指標(biāo),并寫出設(shè)計(jì)報(bào)告。
要求學(xué)生自己查閱資料和充分利用所學(xué)知識(shí),根據(jù)所要設(shè)計(jì)系統(tǒng)所要達(dá)到的功能,劃分軟硬件功能、選擇器件、編寫相關(guān)程序,用Proteus 在計(jì)算機(jī)上繪圖并用Keil進(jìn)行程序邊編寫進(jìn)行防真,再對(duì)整個(gè)系統(tǒng)做調(diào)試運(yùn)行,培養(yǎng)學(xué)生在遇到問題時(shí)能進(jìn)行獨(dú)立、系統(tǒng)、認(rèn)真的思考,并進(jìn)一步培養(yǎng)學(xué)生在團(tuán)隊(duì)中的合作精神,不斷調(diào)試修改,直至達(dá)到設(shè)計(jì)的要求和取得滿意的效果,最后編寫系統(tǒng)說明書,其內(nèi)容包括系統(tǒng)的功能介紹,使用范圍,主要性能指標(biāo),使用方法,注意事項(xiàng)等。
2、設(shè)計(jì)的要求
(1)總體要求
本次課程設(shè)計(jì)主要以軟件仿真為主,在為期兩周的工程實(shí)踐中,將占據(jù)主要時(shí)間,要求完成的任務(wù)主要包括以下幾點(diǎn):
(1)獨(dú)立完成設(shè)計(jì)任務(wù);
(2)繪制系統(tǒng)硬件總框圖;(3)繪制系統(tǒng)原理電路圖;
(4)制定編寫設(shè)計(jì)方案,編制軟件框圖,完成詳細(xì)完整的程序清單和注釋;(5)制定編寫調(diào)試方案,編寫課程設(shè)計(jì)任務(wù)書;(6)寫出設(shè)計(jì)工作小結(jié)。(2)具體要求
該課程設(shè)計(jì)要求基于AT89C51設(shè)計(jì)一個(gè)4位的LED數(shù)碼管作為“4通道的秒表定時(shí)器”。
1設(shè)計(jì)使顯示時(shí)間為0~99秒;
2當(dāng)各通道定時(shí)時(shí)間到時(shí),點(diǎn)亮對(duì)應(yīng)的LED燈; 3設(shè)計(jì)一個(gè)具有4個(gè)按鍵的鍵盤:
K1:“設(shè)置”/“定時(shí)啟動(dòng)”; K2:“通道”/“定時(shí)設(shè)置”; K3:“加一”; K4:“減一”;
4設(shè)計(jì)每到一秒鐘有聲音或LED提示提醒功能,可通過按鈕打開及關(guān)閉該提醒功能。(3)設(shè)計(jì)提示
(1)用6為7段LED數(shù)碼管作為顯示設(shè)備,最高為顯示通道號(hào),低2位顯示時(shí)間。
(2)可采用定時(shí)器,定時(shí)時(shí)間100ms。(3)參考Protuse仿真效果圖
圖1-1 Protuse仿真效果圖
二、設(shè)計(jì)的步驟和思路
1、設(shè)計(jì)的步驟
(1)制定相應(yīng)的設(shè)計(jì)方案;
(2)硬件的初步設(shè)計(jì);
(3)選擇設(shè)計(jì)所用元器件和參數(shù);(4)在Proteus 7.5中設(shè)計(jì)和連接電路圖;(5)軟件的初步設(shè)計(jì);(6)編寫程序?qū)崿F(xiàn)其功能;(7)在keil_v4中進(jìn)行調(diào)試運(yùn)行;(8)硬件和軟件聯(lián)合調(diào)試。
2、設(shè)計(jì)的思路
為使數(shù)碼管同時(shí)顯示通道號(hào)和定時(shí)值(0~99秒),選用4位7段LED數(shù)碼管,當(dāng)定時(shí)時(shí)間到時(shí)點(diǎn)亮對(duì)應(yīng)的LED燈,課程中我們選用LED-BLUE燈,并設(shè)計(jì)有四位按鍵的鍵盤,分別為K1、K2、K3、K4來控制定時(shí)啟動(dòng)/停止、通道號(hào)和定時(shí)時(shí)間的切換設(shè)置、通道號(hào)/定時(shí)時(shí)間加
一、通道號(hào)/定時(shí)時(shí)間減一。通過這四個(gè)按鍵來控制整個(gè)電路的運(yùn)行、LED燈的點(diǎn)亮和數(shù)碼管的顯示。具體控制如下:(1)通道號(hào)為1~4,對(duì)應(yīng)LED燈為L(zhǎng)ED1~LED4,執(zhí)行程序前可任意選擇通道號(hào);定時(shí)值可在0~99S內(nèi)任意設(shè)置;
(2)當(dāng)程序運(yùn)行初始化化后,如果K2按下,則切換至通道號(hào)的設(shè)置,通過K3、K4來增加或減小通道號(hào);當(dāng)選擇好通道號(hào)后如果按下K2則切換至定時(shí)值的設(shè)置,通過K3、K4來增加或減小定時(shí)值;當(dāng)定時(shí)值設(shè)置好之后按下K1則程序執(zhí)行所選通道的秒表定時(shí);當(dāng)定時(shí)時(shí)間到時(shí),對(duì)應(yīng)通道的LED燈點(diǎn)亮;
(3)當(dāng)程序運(yùn)行初始化后直接按下K3、K4進(jìn)行定時(shí)時(shí)間的設(shè)置,通過K3、K4
來增加或減小定時(shí)值;當(dāng)設(shè)置好之后按下K1后直接執(zhí)行一通道的秒表定時(shí);當(dāng)定時(shí)時(shí)間到時(shí),對(duì)應(yīng)通道的LED燈點(diǎn)亮;
(4)當(dāng)程序運(yùn)行初始化后直接按下K3、K4進(jìn)行定時(shí)時(shí)間的設(shè)置,通過K3、K4來增加或減小定時(shí)值;當(dāng)設(shè)置好之后按下K2則切換至通道號(hào)的設(shè)置,通過K3、K4來增加或減小通道號(hào);當(dāng)設(shè)置好后按下K1則執(zhí)行對(duì)應(yīng)通道的定時(shí);當(dāng)定時(shí)時(shí)間到時(shí),對(duì)應(yīng)通道的LED燈點(diǎn)亮;
(5)當(dāng)程序運(yùn)行初始化后直接按下K3、K4進(jìn)行定時(shí)時(shí)間的設(shè)置,通過K3、K4來增加或減小定時(shí)值;當(dāng)設(shè)置好之后按下K2則切換至通道號(hào)的設(shè)置,通過K3、K4來增加或減小通道號(hào);當(dāng)設(shè)置好后按下按下K2則又切換至定時(shí)時(shí)間的設(shè)置,通過K3、K4來增加或減小定時(shí)值;依次可不斷循環(huán)通道號(hào)和定時(shí)時(shí)間的切換設(shè)置,直至達(dá)到自己所想要的定時(shí)時(shí)間,此時(shí)按下K1則執(zhí)行對(duì)應(yīng)通道的秒表定時(shí),當(dāng)定時(shí)時(shí)間到時(shí)點(diǎn)亮對(duì)應(yīng)的LED燈。
三、硬件的設(shè)計(jì)
硬件電路設(shè)計(jì)框圖如下圖所示,主要由:4個(gè)按鍵的鍵盤、AT89C51單片機(jī)、數(shù)碼管、4個(gè)LED燈。
根據(jù)硬件系統(tǒng)電路設(shè)計(jì)框圖,對(duì)各部分模塊的原理進(jìn)行分析,編寫個(gè)子模塊程序,最終將其組合。
圖3-1硬件電路設(shè)計(jì)框圖
1、信號(hào)輸入電路
獨(dú)立式按鍵就是各按鍵相互獨(dú)立,每個(gè)按鍵各接入一根輸入線,一根輸入線上的按鍵工作狀態(tài)不會(huì)影響其他輸入線上的工作狀態(tài)。因此,通過檢測(cè)輸入線的電平狀態(tài)可以很容易判斷哪個(gè)按鍵按下了。獨(dú)立式按鍵電路配置靈活,軟件簡(jiǎn)單。但每個(gè)按鍵需要占用一個(gè)輸入口線,在按鍵數(shù)量較多時(shí),需要較多的輸入口線且電路結(jié)構(gòu)復(fù)雜,故此種鍵盤適用于按鍵較少或操作速度較高的場(chǎng)合。
圖3-2鍵控電路
消除鍵抖動(dòng)。一般按鍵在按下的時(shí)候有抖動(dòng)的問題,即鍵的簧片在按下時(shí)會(huì)有輕微的彈跳,需經(jīng)過一個(gè)短暫的時(shí)間才會(huì)可靠地接觸。若在簧片抖動(dòng)時(shí)進(jìn)行掃描就可能得出不正確的結(jié)果。因此,在程序中要考慮防抖動(dòng)的問題。最簡(jiǎn)單的辦法是在檢測(cè)到有鍵按下時(shí),等待(延遲)一段時(shí)間再進(jìn)行“行掃描”,延遲時(shí)間為10~20ms。這可通過調(diào)用子程序來解決,當(dāng)系統(tǒng)中有顯示子程序時(shí),調(diào)用幾次顯示子程序也能同時(shí)達(dá)到消除抖動(dòng)的目的。
2、數(shù)碼管的驅(qū)動(dòng)模塊的電路
圖3-3數(shù)碼管驅(qū)動(dòng)模塊電路
3、LED燈的驅(qū)動(dòng)模塊電路
圖
3-4LED燈的驅(qū)動(dòng)電路
四、軟件設(shè)計(jì)
1、單片機(jī)選擇
AT89C51是美國(guó)ATMEL公司生產(chǎn)的低電壓、高性能CMOS 8位單片機(jī),片內(nèi)含4K bytes的可反復(fù)擦寫的只讀程序存儲(chǔ)器(PEROM)和128bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(ROM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲(chǔ)單元。
功能強(qiáng)大AT89C51單片機(jī)可提供許多高性價(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制領(lǐng)域。此設(shè)計(jì)中就采用AT89C51。單片機(jī)小系統(tǒng)的電路圖如圖所示:
圖4-1信號(hào)輸入電路
單片機(jī)AT89C51的主要特征:
①與 MCS-51 兼容,4K 字節(jié)可編程閃爍存儲(chǔ) ②靈活的在線系統(tǒng)編程,掉電標(biāo)識(shí)和快速編程特性; ③壽命為 1000 次寫/擦周期,數(shù)據(jù)保留時(shí)間可 10 年以上; ④全靜態(tài)工作模式:0HZ33HZ; ⑤三級(jí)程序存儲(chǔ)器鎖定;
⑥128×8 位內(nèi)部 RAM,32 位可編 I/O 線;
⑦兩個(gè) 16 位定時(shí)器/計(jì)數(shù)器,5 個(gè)中斷源,4 個(gè) 8 位并行的 I/O 接口,個(gè)全雙工 I/O 接口。
2、系統(tǒng)軟件設(shè)計(jì)分析
模塊的劃分:
(1)鍵盤的設(shè)置、啟動(dòng)、停止、加
一、減一;(2)數(shù)碼管顯示通道號(hào)和定時(shí)時(shí)間;
(3)定時(shí)時(shí)間到后對(duì)應(yīng)通道號(hào)的LED燈點(diǎn)亮。程序流程圖如下:
開始 初始化 Y掃描K2鍵按N Y掃描K2鍵按下? 通道號(hào)設(shè)定下? N 通道號(hào)加一 Y掃描K3鍵按掃描K3鍵按Y下?下? 定時(shí)時(shí)間加一 N N 通道號(hào)減一 Y掃描K4鍵按掃描K4鍵按Y下?下? 定時(shí)時(shí)間減一 N N掃描K1鍵按N下? Y數(shù)碼管計(jì)時(shí) 定時(shí)時(shí)間N到? Y通道號(hào)對(duì)應(yīng)的LED燈點(diǎn)亮 結(jié)束
圖4-1程序流程圖
3、主要功能實(shí)現(xiàn)的程序
1)通道號(hào)的設(shè)置
uchar set_thax()
//設(shè)置通道函數(shù)
{
key_set();
if(set_2==2)
{
delay(10);
if(k3==0)
//K3加1
{
delay(30);
if(k3==0)
(
{
delay(300);
sec++;
if(sec==5)
{sec=1;}
}
}
if(k4==0)
//K4減1
{
delay(30);
if(k4==0)
{
delay(300);
sec--;
if(sec==0)
{sec=4;}
}
}
}
a=sec;
return a;}
2)定時(shí)值的設(shè)置
void set_time()//設(shè)置時(shí)間函數(shù)
{ key_set();if(set_2==1){
delay(10);
if(k3==0)
//K3加1
{
delay(30);
if(k3==0)
{
delay(300);
minu++;
if(minu==100)
{minu=1;}
}
}
(11
if(k4==0)
//K4減1
{
delay(30);
if(k4==0)
{
delay(300);
minu--;
if(minu==-1)
{
}
}
}
} }
五、調(diào)試說明
仿真結(jié)果和分析:
minu=99;12
1、未啟動(dòng)仿真時(shí),初始狀態(tài):
圖5-1未啟動(dòng)仿真時(shí),初始狀態(tài)
2、開始啟動(dòng)仿真后:
圖5-2開始啟動(dòng)仿真后
3、通過按下K2切換至一、二、三、四通道和定時(shí)值的設(shè)置:
圖5-3通過按下K2切換至一、二、三、四通道和定時(shí)值的設(shè)置
4、定時(shí)時(shí)間到后對(duì)應(yīng)通道號(hào)LED燈點(diǎn)亮:
圖5-4定時(shí)時(shí)間到后對(duì)應(yīng)通道號(hào)LED燈點(diǎn)亮
六
心得體會(huì)
作為一名電氣工程及其自動(dòng)化專業(yè)的大二學(xué)生,我覺得做單片機(jī)課程設(shè)計(jì)是十分有意義的,而且是十分必要的。在已度過的大學(xué)時(shí)間里,我們大多數(shù)接觸的是專業(yè)課。我們?cè)谡n堂上掌握的僅僅是專業(yè)課的理論知識(shí),如何去鍛煉我們的實(shí)踐能力?如何把我們所學(xué)的專業(yè)基礎(chǔ)課理論知識(shí)運(yùn)用到實(shí)踐中去呢?我想做類似的課程設(shè)計(jì)就為我們提供了良好的實(shí)踐平臺(tái)。
在兩個(gè)周的學(xué)習(xí)工作中,通過查閱相關(guān)資料了解了直流調(diào)速系統(tǒng),加深了對(duì)直流電機(jī)調(diào)速控制系統(tǒng)的認(rèn)識(shí),熟悉了單片機(jī)在控制系統(tǒng)中的運(yùn)用。并且在所學(xué)知識(shí)的基礎(chǔ)上,利用已有的直流調(diào)速系統(tǒng)設(shè)計(jì),嘗試了自己的一些研究。并且使我將以前所學(xué)的知識(shí)系統(tǒng)化,理論化,實(shí)用化。對(duì)如何使用已有知識(shí)及獲取相關(guān)資料方面的能力又有了提高。
根據(jù)課題要求,利用所學(xué)的相關(guān)知識(shí),查詢相關(guān)的資料。根據(jù)課程條件,找到適合的方案,找到需要的元器件。
根據(jù)課程設(shè)計(jì)的要求和自己所要增加的功能寫好程序流程圖,在程序流程圖的基礎(chǔ)上,根據(jù)芯片的功能寫出相應(yīng)的程序。然后再進(jìn)行程序調(diào)試和相應(yīng)的修改,以達(dá)到能夠?qū)崿F(xiàn)所要求的功能的目的。
除編寫實(shí)現(xiàn)設(shè)計(jì)要求外的程序,還要根據(jù)課程設(shè)計(jì)的實(shí)際情況,添加些額外程序來使系統(tǒng)更加的穩(wěn)定,如開關(guān)的去抖(采用延遲)。
該課程設(shè)計(jì)的程序可以參考MCS-51系列單片機(jī),也可自己根據(jù)自己熟悉的方法來編程如單片機(jī)C語言或匯編語言。
在設(shè)計(jì)控制開關(guān)時(shí),注意2個(gè)中斷的打開和關(guān)閉的先后順序,否則就會(huì)出錯(cuò)。這次的單片機(jī)課程設(shè)計(jì)重點(diǎn)是理論與實(shí)際的相結(jié)合。該設(shè)計(jì)從頭到尾都要自己參與,熟悉了整個(gè)設(shè)計(jì)的過程,更充分的鍛煉了自己。
在此要感謝我的指導(dǎo)老師,感謝老師給我這樣的機(jī)會(huì)鍛煉。在整個(gè)設(shè)計(jì)過程中我懂得了許多東西,也培養(yǎng)了我獨(dú)立工作的能力,樹立了對(duì)自己工作能力的信心,相信會(huì)對(duì)今后的學(xué)習(xí)工作生活有非常重要的影響。而且大大提高了動(dòng)手的能力,使我充分體會(huì)到了在創(chuàng)造過程中的探索的艱難和成功的喜悅。雖然這個(gè)設(shè)計(jì)還不是很完善,但是在設(shè)計(jì)過程中所學(xué)到的東西是這次設(shè)計(jì)的最大收獲和財(cái)富,使我終身受益。
七、致謝
為期兩個(gè)周的課程設(shè)計(jì)也接近了尾聲。此次課程設(shè)計(jì)的完成離不開老師和同學(xué)對(duì)我的幫助,使我對(duì)單片機(jī)的工作原理和使用更近了一步。
首先要感謝我敬愛的指導(dǎo)教師。他們?cè)趯W(xué)術(shù)上的精心指導(dǎo)和嚴(yán)格要求,在系統(tǒng)研究和調(diào)試過程中給予的及時(shí)幫助。這些使我組的課程設(shè)計(jì)得以順利完成,并激勵(lì)著我們?cè)诮窈蟮娜松缆飞喜粩嚅_拓進(jìn)取,勇往直前。在此,我們?cè)僖淮螌?duì)諸位老師的培養(yǎng)和關(guān)懷表示誠(chéng)摯的謝意!
同時(shí)我們也非常感謝所有教導(dǎo)過我的老師們,他們不但在課程設(shè)計(jì)中指導(dǎo)我們學(xué)習(xí)和生活,而且在完成論文期間給我許多幫助和建議,他們兢兢業(yè)業(yè)、對(duì)工作認(rèn)真負(fù)責(zé)的態(tài)度為我們做出了好的表率,時(shí)刻鞭策著我們向他們學(xué)習(xí)。
非常感謝我的同學(xué)們,在與他們共同的學(xué)習(xí)、工作、生活過程中,他們給予了我及時(shí)的幫助和建議,開拓了我的思路。這使我在學(xué)習(xí)和生活中受益匪淺。
最后,向所有幫助過我的老師和同學(xué)致以最誠(chéng)摯的謝意。
八、參考文獻(xiàn)
[1] 陳伯石.電力拖動(dòng)自動(dòng)控制系統(tǒng)[M].北京:機(jī)械工業(yè)出版社,2003.[2] 鐘富昭.8051單片機(jī)典型模塊設(shè)計(jì)與應(yīng)用[M].北京:人民郵電出版社,2007 [3] 張靖武.單片機(jī)系統(tǒng)的PROTEUS設(shè)計(jì)與仿真[M].北京:電子工業(yè)出版社,2007 [4] 楊恢先.單片機(jī)原理及應(yīng)用[M].北京:人民郵電出版社,2006 [5] 孟慶濤.圖解電子控制電路[M].北京:人民郵電出版社,2006 [6] 謝維成.單片機(jī)原理與應(yīng)用及C51程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2006 [7] 周潤(rùn)景.基于PROTEUS 的電路及單片機(jī)系統(tǒng)設(shè)計(jì)與仿真[M].北京:北京航空航天出版社,2006 [8] 李光飛.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)[M].北京:北京航空航天出版社,2004 [9] 杜坤梅.電機(jī)控制技術(shù)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2002 [10] 李廣第.單片機(jī)基礎(chǔ)(修訂版)[M].北京:北京航空航天大學(xué)出版社,2001 [11] 吳亦峰.單片機(jī)原理與接口技術(shù)[M].北京:電子工業(yè)出版社
九、附錄
#include
sbit QB1=P2^0;sbit QB2=P2^1;sbit QB3=P2^2;sbit QB4=P2^3;sbit k1=P1^0;//k1按鍵, sbit k2=P1^1;//k2按鍵, sbit k3=P1^2;//k3按鍵,加1 sbit k4=P1^3;//k4按鍵,減1 sbit led4=P3^0;//LED燈 sbit led3=P3^1;sbit led2=P3^2;sbit led1=P3^3;sbit what=P0;uchar sec=1,minu,mstcnt;// 定義初始量 uchar set_2=1,set_1=1;uchar mis,mig,ss,sg;uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共陰顯示
uchar code tabl[]={0x3F,0x06,0x5B,0x4F,0x66};int a;
void delay(uint);//延時(shí)函數(shù) void key_change();// 掃描K1 void key_set();//
掃描K2 void disp(uchar,uchar,uchar,uchar);//顯示函數(shù) void set_time();//設(shè)置時(shí)間函數(shù) uchar set_thax();//設(shè)置通道函數(shù) void timer0();void haap();
void main()//主函數(shù) { EA=1;//系統(tǒng)允許有開放的中斷 ET0=1;//允許T0中斷
TR0=1;//開啟中斷,啟動(dòng)定時(shí)器 TMOD=0x01;TH0=0x00;//選擇數(shù)碼管
TL0=0x01;
while(1){
sg=sec%10;//通道個(gè)位 mis=minu/10;//顯示時(shí)間十位 mig=minu%10;key_set();//掃描K2 key_change();//掃描K1 if(set_1==1)//設(shè)置顯示條件 {haap();} if(k1==1&&k2==1)//正常顯示 { delay(10);if(k1==1&&k2==1){ sg=sec;disp(sg,mis,mig,ss);} } key_change();
if(set_1 ==2)//啟動(dòng)條件
{
timer0();
} key_change();if(set_1==3){minu=0;} } }
void haap()
//設(shè)置顯示函數(shù){ if(set_1==1){ delay(10);key_set();if(set_2==1){ delay(10);
set_time();}
key_set();if(set_2==2){
delay(10);
set_thax();
} } }
void timer0()interrupt 1 using 0 //啟動(dòng)函數(shù){
TH0=0x01;TMOD = 0x01;
if(set_1==2)
{ delay(10);mstcnt++;
if(mstcnt==20){
mstcnt=0;
if(minu==0)
{
minu=0;
set_thax();
if(a==1)
{
led1=0;
led2=1;
led3=1;
led4=1;
}
else
{
if(a==2)
{
led1=1;
led2=0;
led3=1;
led4=1;
}
else { if(a==3)
}
}
}
else
{
minu--;
} } if(minu==0){ minu=0;
} } }
void key_change()//k1按鍵掃描 { if(k1==0){ delay(20);
{ led1=1;led2=1;led3=0;led4=1;
} else
if(a==4)
{
led1=1;
led2=1;
led3=1;
led4=0;
}
if(k1==0){ set_1++;while(k1!=1);if(set_1==4){set_1=1;} } } }
void key_set()//k2按鍵掃描 { if(k2==0){ delay(20);if(k2==0){ set_2++;while(k2!=1);if(set_2==3){set_2=1;} } } } void disp(uchar sg,uchar mis,uchar mig,uchar ss)//顯示函數(shù){ QB1=0;QB2=1;QB3=1;QB4=1;P0=table[sg];//第1個(gè)數(shù)碼管顯示通道 delay(10);//延時(shí)一小會(huì)
QB1=1;QB2=1;QB3=0;QB4=1;P0=table[mis];//第3個(gè)數(shù)碼管顯示十位 delay(10);QB1=1;QB2=1;QB3=1;QB4=0;P0=table[mig];//第4個(gè)數(shù)碼管顯示個(gè)位
delay(10);QB1=1;QB2=1;QB3=1;QB4=1;P0=table[ss];//第2個(gè)數(shù)碼管不顯示 delay(10);}
void set_time()//設(shè)置時(shí)間函數(shù) { key_set();if(set_2==1){
delay(10);if(k3==0)//K3加1 { delay(30);if(k3==0){ delay(300);minu++;if(minu==100){minu=1;} } } if(k4==0)//K4減1 { delay(30);if(k4==0){ delay(300);minu--;if(minu==-1){
minu=99;
}
} } } }
uchar set_thax()
//設(shè)置通道函數(shù)
{ key_set();if(set_2==2){
delay(10);if(k3==0)//K3加1 { delay(30);if(k3==0){
delay(300);sec++;
if(sec==5){sec=1;} } } if(k4==0)//K4減1 { delay(30);if(k4==0){ delay(300);sec--;if(sec==0){sec=4;} } } } a=sec;return a;}
void delay(uint k)//延時(shí)函數(shù) { uint i,j;for(i=k;i>0;i--)for(j=80;j>0;j--);}