標(biāo)題: 51單片機(jī)基于CPU的8LED頻率顯示計(jì) 課程設(shè)計(jì)論文下載 [打印本頁(yè)]
作者: shaogouzi 時(shí)間: 2017-5-9 09:32
標(biāo)題: 51單片機(jī)基于CPU的8LED頻率顯示計(jì) 課程設(shè)計(jì)論文下載
完整的課程設(shè)計(jì)論文下載(word格式 可編輯):
CPU LED顯示頻率計(jì).doc
(386.19 KB, 下載次數(shù): 13)
2017-5-9 09:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
下面是部分內(nèi)容預(yù)覽(無(wú)圖版):
單片機(jī)課程設(shè)計(jì)
課程題目: 基于單片CPU的8LED顯示頻率計(jì)設(shè)計(jì)
目錄
第一章 前言 1
1.1頻率計(jì)概述 1
1.2頻率計(jì)設(shè)計(jì)內(nèi)容 1
第二章 系統(tǒng)總體方案設(shè)計(jì) 2
2.1測(cè)頻的原理 2
2.2總體思路 2
2.3具體模塊 2
第三章 硬件電路具體設(shè)計(jì) 3
3.1 AT89S52主控制器模塊 3
3.1.1 AT89S52的介紹3
3.1.2 復(fù)位電路及時(shí)鐘電路4
3.1.2 引腳功能4
74HC595芯片介紹6
3.2 顯示模塊 7
3.2.1 數(shù)碼管介紹7
3.2.2 頻率值顯示電路:八位數(shù)碼管顯示四位頻率和四位周期。7
第四章 系統(tǒng)的軟件設(shè)計(jì) 7
4.1 軟件模塊設(shè)計(jì) 7
4.2 中斷服務(wù)子程序 8
4.3 顯示子程序 9
4.4 應(yīng)用軟件簡(jiǎn)介 10
4.4.1 Keil簡(jiǎn)介10
4.4.2 protues簡(jiǎn)介11
第五章 頻率計(jì)的系統(tǒng)調(diào)試 11
5.1 軟件調(diào)試 11
5.1.1 Pouteus軟件調(diào)試11
5.1.2 功能調(diào)試11
5.2系統(tǒng)調(diào)試 12
5.2.1 系統(tǒng)軟件調(diào)試12
5.3 誤差分析 12
第六章 總結(jié) 13
參考文獻(xiàn) 13
第一章 前言頻率測(cè)量是電子學(xué)測(cè)量中最為基本的測(cè)量之一。由于頻率信號(hào)抗干擾性強(qiáng),易于傳輸,因此可以獲得較高的測(cè)量精度。隨著數(shù)字電子技術(shù)的發(fā)展,頻率測(cè)量成為一項(xiàng)越來(lái)越普遍的工作,測(cè)頻原理和測(cè)頻方法的研究正受到越來(lái)越多的關(guān)注。
1.1頻率計(jì)概述數(shù)字頻率計(jì)是計(jì)算機(jī)、通訊設(shè)備、音頻視頻等科研生產(chǎn)領(lǐng)域不可缺少的測(cè)量?jī)x器。它是一種用十進(jìn)制數(shù)字顯示被測(cè)信號(hào)頻率的數(shù)字測(cè)量?jī)x器。它的基本功能是測(cè)量正弦信號(hào)、方波信號(hào)及其他各種單位時(shí)間內(nèi)變化的物理量。在進(jìn)行模擬、數(shù)字電路的設(shè)計(jì)、安裝、調(diào)試過(guò)程中,由于其使用十進(jìn)制數(shù)顯示,測(cè)量迅速,精確度高,顯示直觀,經(jīng)常要用到頻率計(jì)。傳統(tǒng)的頻率計(jì)采用測(cè)頻法測(cè)量頻率,通常由組合電路和時(shí)序電路等大量的硬件電路組成,產(chǎn)品不但體積大,運(yùn)行速度慢而且測(cè)量低頻信號(hào)不準(zhǔn)確。本次采用單片機(jī)技術(shù)設(shè)計(jì)一種數(shù)字顯示的頻率計(jì),測(cè)量準(zhǔn)確度高,響應(yīng)速度快,體積小等優(yōu)點(diǎn)[1]。
1.2頻率計(jì)設(shè)計(jì)內(nèi)容利用電源、單片機(jī)、分頻電路及數(shù)碼管顯示等模塊,設(shè)計(jì)一個(gè)簡(jiǎn)易的頻率計(jì)能夠粗略的測(cè)量出被測(cè)信號(hào)的頻率。 參數(shù)要求如下:
基本要求:
1 用P1或P3口,產(chǎn)生一方波信號(hào),頻率為1000Hz,用LED顯示頻率和周期
2 將輸出信號(hào)輸入到另一端口作頻率計(jì)的信號(hào)輸入端,測(cè)量此方波信號(hào)的頻率、周期和脈寬,在另一LED上將參數(shù)值顯示出來(lái)。
3 設(shè)置一功能鍵,能將當(dāng)前LED上的信號(hào)值鎖定
發(fā)揮部分:
1 通過(guò)鍵盤,可修改方波的頻率。每按一次鍵,頻率值進(jìn)給或后退100Hz,頻率范圍100Hz~1500Hz
2 按鍵時(shí),蜂鳴器發(fā)出提示音,表示按鍵有效
3 用圖形方式顯示輸入波形
第二章 系統(tǒng)總體方案設(shè)計(jì)2.1測(cè)頻的原理測(cè)頻的原理歸結(jié)成一句話,就是“在單位時(shí)間內(nèi)對(duì)被測(cè)信號(hào)進(jìn)行計(jì)數(shù)”。被測(cè)信號(hào),通過(guò)單片機(jī)內(nèi)部定時(shí)、計(jì)數(shù)產(chǎn)生方波,從P3.2口輸入端輸入,從P1.0口輸出。通過(guò)網(wǎng)絡(luò)信號(hào)將其接入按鍵,控制輸出的信號(hào)掃描。由晶體振蕩器產(chǎn)生的基頻,按十進(jìn)制分頻得出的分頻脈沖,經(jīng)過(guò)基選通門去觸發(fā)主控電路,再通過(guò)主控電路以適當(dāng)?shù)木幋a邏輯便得到相應(yīng)的控制指令,用以控制主門電路選通被測(cè)信號(hào)所產(chǎn)生的方波波,至十進(jìn)制計(jì)數(shù)電路進(jìn)行直接計(jì)數(shù)和顯示。
2.2總體思路頻率的測(cè)量實(shí)際上就是在單位時(shí)間內(nèi)對(duì)信號(hào)進(jìn)行計(jì)數(shù),計(jì)數(shù)值就是信號(hào)頻率。該頻率計(jì)實(shí)現(xiàn)1000HZ~1500HZ的頻率測(cè)量,而且可以實(shí)現(xiàn)通過(guò)KEY1可修改方波的頻率,每按一次鍵,頻率值進(jìn)給+100Hz,用八位LED顯示頻率和周期測(cè)量結(jié)果。用KEY0實(shí)現(xiàn)能將當(dāng)前LCD上的信號(hào)值鎖定。
2.3具體模塊根據(jù)上述系統(tǒng)分析,頻率計(jì)系統(tǒng)設(shè)計(jì)共包括五大模塊:?jiǎn)纹瑱C(jī)控制模塊、74HC595串入并出模塊及顯示模塊、蜂鳴器模塊。各模塊作用如下:
1、單片機(jī)控制模塊:以AT89S52單片機(jī)為控制核心,來(lái)完成它待測(cè)信號(hào)的計(jì)數(shù),譯碼,和顯示以及對(duì)分頻比的控制。利用其內(nèi)部的定時(shí)/計(jì)數(shù)器完成待測(cè)信號(hào)周期/頻率的測(cè)量。單片機(jī)AT89S52內(nèi)部具有2個(gè)16位定時(shí)/計(jì)數(shù)器,定時(shí)/計(jì)數(shù)器的工作可以由編程來(lái)實(shí)現(xiàn)定時(shí)、計(jì)數(shù)和產(chǎn)生計(jì)數(shù)溢出時(shí)中斷要求的功能。
2、74HC595串入并出: 數(shù)據(jù)在SCHcp的上升沿輸入,在STcp的上升沿進(jìn)入的存儲(chǔ)寄存器中去。如果兩個(gè)時(shí)鐘連在一起,則移位寄存器總是比存儲(chǔ)寄存器早一個(gè)脈沖。
移位寄存器有一個(gè)串行移位輸入(Ds),和一個(gè)串行輸出(Q7’),和一個(gè)異步的低電平復(fù)位,存儲(chǔ)寄存器有一個(gè)并行8位的,具備三態(tài)的總線輸出,當(dāng)使能OE時(shí)(為低電平),存儲(chǔ)寄存器的數(shù)據(jù)輸出到總線。
3、顯示模塊:顯示電路采用八位共陽(yáng)極數(shù)碼管動(dòng)態(tài)顯示。
4、蜂鳴器模塊:按鍵每按一下,蜂鳴器響一下。
頻率計(jì)的總體設(shè)計(jì)
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB2DE.tmp.jpg
圖1 頻率計(jì)總體設(shè)計(jì)框圖
第三章 硬件電路具體設(shè)計(jì)根據(jù)系統(tǒng)設(shè)計(jì)的要求,頻率計(jì)實(shí)際需要設(shè)計(jì)的硬件系統(tǒng)主要包括以下幾個(gè)部分:AT89S52單片機(jī)最小系統(tǒng)模塊、74HC595串入并出及顯示模塊,下面將分別給予介紹。
3.1 AT89S52主控制器模塊3.1.1 AT89S52的介紹 AT89S52片內(nèi)集成256字節(jié)程序運(yùn)行空間、8K字節(jié)Flash存儲(chǔ)空間,支持最大64K外部存儲(chǔ)擴(kuò)展。根據(jù)不同的運(yùn)行速度和功耗的要求,時(shí)鐘頻率可以設(shè)置在0-33M之間。片內(nèi)資源有4組I/O控制端口、3個(gè)定時(shí)器、8個(gè)中斷、軟件設(shè)置低能耗模式、看門狗和斷電保護(hù)?梢栽4V到5.5V寬電壓范圍內(nèi)正常工作。
3.1.2 復(fù)位電路及時(shí)鐘電路復(fù)位電路和時(shí)鐘電路是維持單片機(jī)最小系統(tǒng)運(yùn)行的基本模塊。復(fù)位電路通常分為兩種:上電復(fù)位(圖2)和手動(dòng)復(fù)位(圖3)。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB2EF.tmp.png file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB2F0.tmp.png
圖2 上電復(fù)位 圖3 手動(dòng)復(fù)位
合適頻率的晶振對(duì)于選頻信號(hào)強(qiáng)度準(zhǔn)確度都有好處,本次設(shè)計(jì)選取12.000M無(wú)源晶振接入XTAL1和XTAL2引腳。并聯(lián)2個(gè)30pF陶瓷電容幫助起振。AT89S52單片機(jī)最小系統(tǒng)如圖6所示。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB2F1.tmp.png
圖4 單片機(jī)最小系統(tǒng)原理圖
3.1.2 引腳功能P0口:P0口是一個(gè)8位漏極開(kāi)路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問(wèn)外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。在 flash編程時(shí),P0口用來(lái)接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻[7]。
P1口:P1口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P1 輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL 邏輯電平。對(duì) P1 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流。此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入和定時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入,P1口功能具體如表1所示。在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。
表1 P1口的第二種功能說(shuō)明表
引腳號(hào) | |
| T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出 |
| T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制) |
| |
| |
| |
P2口:P2口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL邏輯電平。對(duì)P2端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流。在訪問(wèn)外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口送出高八位地址。在這種應(yīng)用中,P2口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。
P3口:P3口是一個(gè)具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動(dòng)4個(gè)TTL邏輯電平。對(duì)P3端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流。P3口亦作為AT89C51特殊功能(第二功能)使用。
表2 P3口的第二種功能說(shuō)明表
引腳號(hào) | |
| |
| |
| file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB301.tmp.png(外部中斷0) |
| file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB302.tmp.jpg(外部中斷1) |
| |
| |
| file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB303.tmp.png(外部數(shù)據(jù)存儲(chǔ)器寫選通) |
| file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB304.tmp.png(外部數(shù)據(jù)存儲(chǔ)器寫選通) |
RST:復(fù)位輸入。晶振工作時(shí),RST腳持續(xù)2個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位?撮T狗計(jì)時(shí)完成后,RST 腳輸出96個(gè)晶振周期的高電平。特殊寄存器 AUXR(地址8EH)上的DISRTO位可以使此功能無(wú)效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。
XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。
XTAL2:振蕩器反相放大器的輸出端。
單片機(jī)引腳分配
根據(jù)系統(tǒng)設(shè)計(jì)及各模塊的分析得出,單片機(jī)的引腳分配如表3所示。
表 3 單片機(jī)端口分配表
| | |
| | |
| |
| | 按鍵時(shí),蜂鳴器發(fā)出提示音,表示按鍵有效 |
74HC595芯片介紹引腳說(shuō)明
符號(hào) | | |
| 15[size=10.5000pt], 1[size=10.5000pt], 7 | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
3.2 顯示模塊 顯示模塊由頻率值顯示電路和周期值顯示電路組成。用P3口設(shè)計(jì)程序,產(chǎn)生一方波信號(hào),頻率為1000Hz,用LED顯示頻率和周期。
將輸出信號(hào)輸入到另一端口P1口作頻率計(jì)的信號(hào)輸入端,測(cè)量此方波信號(hào)的頻率、周期,在另一LED上將參數(shù)值顯示出來(lái)。
3.2.1 數(shù)碼管介紹根據(jù)其結(jié)構(gòu)的不同,可分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管兩種。根據(jù)管腳資料,可以判斷使用的是何種接口類型[14].兩種數(shù)碼管內(nèi)部原理如圖5所示。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB315.tmp.jpg
圖5 兩種數(shù)碼管內(nèi)部原理圖
LED數(shù)碼管中各段發(fā)光二極管的伏安特性和普通二極管類似,只是正向壓降較大,正向電阻也較大。在一定范圍內(nèi),其正向電流與發(fā)光亮度成正比。由于常規(guī)的數(shù)碼管起輝電流只有1~2 mA,最大極限電流也只有10~30 mA,所以它的輸入端在5 V電源或高于TTL高電平(3.5 V)的電路信號(hào)相接時(shí),一定要串加限流電阻,以免損壞器件。
3.2.2 頻率值顯示電路:八位數(shù)碼管顯示四位頻率和四位周期。第四章 系統(tǒng)的軟件設(shè)計(jì)4.1 軟件模塊設(shè)計(jì)頻率計(jì)開(kāi)始工作或者完成一次頻率測(cè)量,系統(tǒng)軟件都進(jìn)行測(cè)量初始化。測(cè)量初始化模塊設(shè)置堆棧指針(SP)、工作寄存器、中斷控制和定時(shí)/計(jì)數(shù)器的工作方式。定時(shí)/計(jì)數(shù)器的工作首先被設(shè)置為計(jì)數(shù)器方式,即用來(lái)測(cè)量信號(hào)頻率[15]。
首先定時(shí)/計(jì)數(shù)器的計(jì)數(shù)寄存器清0,運(yùn)行控制位TR置1,啟動(dòng)對(duì)待測(cè)信號(hào)的計(jì)數(shù)。計(jì)數(shù)閘門由軟件延時(shí)程序?qū)崿F(xiàn),從計(jì)數(shù)閘門的最小值(即測(cè)量頻率的高量程)開(kāi)始測(cè)量,計(jì)數(shù)閘門結(jié)束時(shí)TR清0,停止計(jì)數(shù)。計(jì)數(shù)寄存器中的數(shù)值經(jīng)過(guò)數(shù)制轉(zhuǎn)換程序從十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)。判斷該數(shù)的最高位,若該位不為0,滿足測(cè)量數(shù)據(jù)有效位數(shù)的要求,測(cè)量值和量程信息一起送到顯示模塊;若該位為0,將計(jì)數(shù)閘門的寬度擴(kuò)大10倍,重新對(duì)待測(cè)信號(hào)的計(jì)數(shù),直到滿足測(cè)量數(shù)據(jù)有效位數(shù)的要求。定時(shí)/計(jì)數(shù)器的工作被設(shè)置為定時(shí)器方式,定時(shí)/計(jì)數(shù)器的計(jì)數(shù)寄存器清0,在判斷待測(cè)信號(hào)的上跳沿到來(lái)后,運(yùn)行控制位TR置為1,以單片機(jī)工作周期為單位進(jìn)行計(jì)數(shù),直至信號(hào)的下跳沿到來(lái),運(yùn)行控制位TR清0,停止計(jì)數(shù)。16位定時(shí)/計(jì)數(shù)器的最高計(jì)數(shù)值為65535,當(dāng)待測(cè)信號(hào)的頻率較低時(shí),定時(shí)/計(jì)數(shù)器可以對(duì)被測(cè)信號(hào)直接計(jì)數(shù),當(dāng)被測(cè)信號(hào)的頻率較高時(shí),先由硬件十分頻后再有定時(shí)/計(jì)數(shù)器對(duì)被測(cè)信號(hào)計(jì)數(shù),加大測(cè)量的精度和范圍。
4.2 中斷服務(wù)子程序T0中斷服務(wù)子程序流程如圖20所示。測(cè)頻時(shí),定時(shí)器T0 工作在定時(shí)方式,每次定時(shí)50mS ,則T0 中斷20 次正好為1秒,即T0用來(lái)產(chǎn)生標(biāo)準(zhǔn)秒信號(hào),定時(shí)器T0 用作計(jì)數(shù)器,對(duì)待測(cè)信號(hào)計(jì)數(shù),每秒鐘的開(kāi)始啟動(dòng)T0 ,每秒鐘的結(jié)束關(guān)閉T0 ,則定時(shí)器T0 之值乘以分頻系數(shù)就為待測(cè)信號(hào)的頻率。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB316.tmp.png
圖6 T0中斷服務(wù)子程序
定時(shí)/計(jì)數(shù)器T1工作在計(jì)數(shù)方式, 對(duì)信號(hào)進(jìn)行計(jì)數(shù),計(jì)數(shù)器1中斷流程圖。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB317.tmp.png
圖7 計(jì)數(shù)器1中斷服務(wù)子程序
4.3 顯示子程序顯示子程序?qū)⒋娣旁陲@示緩沖區(qū)的頻率或周期值送往數(shù)碼管上顯示出來(lái),由于所有4 位數(shù)碼管的8 根段選線并聯(lián)在一起由單片機(jī)的P2口 控制,因此,在每一瞬間4位數(shù)碼管會(huì)顯示相同的字符,要想每位顯示不同的字符就必須采用掃描方法輪流點(diǎn)亮各位數(shù)碼管,即在每一瞬間只點(diǎn)亮某一位顯示字符,在此瞬間,段選控制口P2輸出相應(yīng)字符。由P0.0-P0.3逐位輪流點(diǎn)亮各個(gè)數(shù)碼管, 每位保持1mS ,在10mS~20mS 之內(nèi)再點(diǎn)亮一次,重復(fù)不止,利用人的視角暫留,好像4 位數(shù)碼管同時(shí)點(diǎn)亮。數(shù)碼管顯示子程序流程如圖8所示。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB318.tmp.png
圖8 顯示子程序流程圖
4.4 應(yīng)用軟件簡(jiǎn)介4.4.1 Keil簡(jiǎn)介Keil軟件是目前最流行開(kāi)發(fā)系列單片機(jī)的軟件,Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部份組合在一起。而Proteus與其它單片機(jī)仿真軟件不同的是,它不僅能仿真單片機(jī)CPU的工作情況,也能仿真單片機(jī)外圍電路或沒(méi)有單片機(jī)參與的其它電路的工作情況。
(1)建立工程文件
點(diǎn)擊“Project->New project”菜單,出現(xiàn)一個(gè)對(duì)話框,要求給將要建立的工程起一個(gè)名字,你可以在編緝框中輸入一個(gè)名字,點(diǎn)擊“保存”按鈕,出現(xiàn)第二個(gè)對(duì)話框,按要求選擇目標(biāo)器件片。建立新文件并增加到組。分別設(shè)置“target1”中的“Target,output,debug”各項(xiàng),使程序匯編后產(chǎn)生HEX文件。
(2)匯編,調(diào)試系統(tǒng)程序
Keil 單片機(jī)模擬調(diào)試軟件內(nèi)集成了一個(gè)文本編輯器,用該文本編輯器可以編輯源程序。在集成開(kāi)發(fā)環(huán)境中選擇菜單“File → New...”、單擊對(duì)應(yīng)的工具按鈕或者快捷鍵Ctrl +N 將打開(kāi)一個(gè)新的文本編輯窗口,完成匯編語(yǔ)言源文件的輸入,并且完成源程序向當(dāng)前工程的添加。
然后在集成開(kāi)發(fā)環(huán)境中選擇菜單“File→Save As...”可以完成文件的第一次存儲(chǔ)。注意,匯編語(yǔ)言源文件的擴(kuò)展名應(yīng)該是“ASM”,它應(yīng)該與工程文件存儲(chǔ)在同一文件夾之內(nèi)。在完成文件的第一次存儲(chǔ)以后,當(dāng)對(duì)匯編語(yǔ)言源文件又進(jìn)行了修改,再次存儲(chǔ)文件則應(yīng)該選擇菜單“File→Save”、單擊對(duì)應(yīng)的工具按鈕或者快捷鍵Ctrl +S 實(shí)現(xiàn)文件的保存。
接著的工作需要把匯編語(yǔ)言源文件加入工程之中。選擇工程管理器窗口的子目“Source Group 1”,再單擊鼠標(biāo)右鍵打開(kāi)快捷菜單。在快捷菜單中選擇“Add File to Group ‘Source Group 1’”,加入文件對(duì)話框被打開(kāi)。雙擊要加入的文件名或者選擇要加入的文件名再單擊“Add”按鈕即可完成把匯編語(yǔ)言源文件加入工程。文件加入以后,加入文件對(duì)話框并不消失,更多的文件也可以利用它加入工程。如果不需要加入其它文件,單擊“Close”按鈕可以關(guān)閉加入文件對(duì)話框。這時(shí)工程管理窗口的文件選項(xiàng)卡中子目錄“Source Group 1”下出現(xiàn)一個(gè)匯編語(yǔ)言源文件。
(3)編譯源程序,出現(xiàn)錯(cuò)誤時(shí),返回上一級(jí)對(duì)錯(cuò)誤更改后重新編譯,直到?jīng)]有錯(cuò)誤為止。
4.4.2 protues簡(jiǎn)介(1)首先將keil和 Protues兩個(gè)軟件安裝好。
(2)打開(kāi)protues軟件,新建一文件將硬件原理圖繪入圖中。
(4)將KEIL生成的HEX文件下載入單片機(jī)中,點(diǎn)擊“開(kāi)始”進(jìn)行仿真。
(5)在keil中進(jìn)行debug,同時(shí)在proteus中查看直觀的結(jié)果(如LED顯示⋯⋯)。
第五章 頻率計(jì)的系統(tǒng)調(diào)試5.1 軟件調(diào)試5.1.1 Pouteus軟件調(diào)試根據(jù)系統(tǒng)設(shè)計(jì)要求,進(jìn)行Keil和Proteus系統(tǒng)仿真,不斷調(diào)試程序,直到符合功能要求。Proteus總體仿真圖9所示。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB319.tmp.jpg
5.1.2 功能調(diào)試當(dāng)測(cè)量頻率值加200時(shí),數(shù)碼管顯示頻率值,作為Hz檔單位指示。仿真顯示如圖10所示。
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB32A.tmp.jpg
圖10 HZ檔頻率仿真
5.2系統(tǒng)調(diào)試5.2.1 系統(tǒng)軟件調(diào)試經(jīng)軟件的調(diào)試—修改—再調(diào)試,如此反復(fù),排除各種故障最終基本完成了設(shè)計(jì)所要求的任務(wù)。由系統(tǒng)軟件設(shè)計(jì)可以測(cè)出1000HZ-1500HZ的量程范圍,可以實(shí)現(xiàn)量程檔的自動(dòng)轉(zhuǎn)換,使用的動(dòng)態(tài)顯示測(cè)量時(shí)會(huì)出現(xiàn)閃爍現(xiàn)象,但顯示數(shù)值準(zhǔn)確,穩(wěn)定時(shí)顯示不閃爍。
表6:頻率的數(shù)據(jù)記錄表
表7:周期的數(shù)據(jù)記錄表
5.3 誤差分析從記錄的數(shù)據(jù)可以看出,系統(tǒng)軟件仿真誤差很小,在1000Hz-1500MHz范圍內(nèi)測(cè)量出來(lái)的頻率基本上就是輸入信號(hào)的頻率。但是在硬件調(diào)試中,可能是由于標(biāo)準(zhǔn)元器件本身誤差,如隨著時(shí)間的延長(zhǎng),造成測(cè)量結(jié)果沒(méi)有軟件仿真精確。同時(shí)手工焊接單片機(jī)最小系統(tǒng)、分頻整形電路等也會(huì)帶來(lái)一定的干擾,造成信號(hào)的失真,從而導(dǎo)致測(cè)量精度下降,測(cè)量范圍有所縮小,但是可以看出,誤差在允許范圍內(nèi),所設(shè)計(jì)的電路基本符合要求
第六章 總結(jié)通過(guò)本次試驗(yàn)我學(xué)到了很多書本以外的知識(shí)。了解了單片機(jī)的基本知識(shí)和在控制領(lǐng)域的作用和地位。在實(shí)驗(yàn)的過(guò)程中我進(jìn)一步了掌握了C語(yǔ)言的編寫程序,學(xué)會(huì)了使用PROTUTES和KEIL的仿真來(lái)實(shí)現(xiàn),同時(shí)掌握了如何收集、查閱、應(yīng)用文獻(xiàn)資料,如何根據(jù)實(shí)際需要有選擇的閱讀書籍和正確確定系統(tǒng)所要使用的元器件的類型。我明白了理論和實(shí)踐之間存在的距離只有靠不斷的思考不斷的動(dòng)手才能將所學(xué)的知識(shí)真正運(yùn)用到實(shí)踐上來(lái)。在設(shè)計(jì)中我的很多方面的能力都得到了提高,尤其在單片機(jī)軟件編程方面讓我感觸頗深。我個(gè)人認(rèn)為軟件設(shè)計(jì)是個(gè)即靈活又細(xì)膩的工作,不僅僅要運(yùn)用理科知識(shí)還要運(yùn)用藝術(shù)中的很多元素。它要求耐心和細(xì)心去不斷完善,同時(shí)還需要有良好的邏輯思維能力。這長(zhǎng)達(dá)兩周的課程設(shè)計(jì)讓我絞盡腦汁完成了自己認(rèn)為完成不了的任務(wù)讓我很有成就感。也是我對(duì)單片機(jī)產(chǎn)生了更深的興趣。我很享受課程設(shè)計(jì)的過(guò)程。
參考文獻(xiàn) [1]鄒大挺.頻率計(jì)的設(shè)計(jì)[J]. 《電子產(chǎn)品世界》出版社. 2006. 第193期. 4-7.
[2]雷玉堂.光電檢測(cè)技術(shù)[M]. 中國(guó)計(jì)量出版社. 1995.
[3]季建華. 智能儀表原理[M]. 山東教育出版社. 2004.
[4]王永生. 電子測(cè)量學(xué)[M]. 西北工業(yè)大學(xué)出版社. 2003.
[5]李華.單片機(jī)實(shí)用接口技術(shù)[M]. 航空航天大學(xué)出版社. 2006.
[6]張鵬.王雪梅. 單片機(jī)原理與應(yīng)用實(shí)例教程[M]. 海軍出版社. 2007.
[7]赫建國(guó)等. 單片機(jī)在電子電路設(shè)計(jì)中的應(yīng)用[M]. 清華大學(xué)出版社. 2005.
[8]康華光.電子技術(shù)基礎(chǔ)(模擬部分)[M]. 高等教育出版社. 1998.
頻率計(jì)源程序
#include "stdio.h"
#include "absacc.h"
#include <intrins.h>
#include <math.h>
#include "LEDshow.h"
sbit signal_out=P1^0;
sbit key0=P2^6;
sbit key1=P3^4;
sbit beep=P2^7;
bit state_old=0,state_new=0;
bit int_flag;
unsigned int frequency=1000,frequency_temp;//測(cè)量信號(hào)頻率Hz
unsigned int signal=1000;//產(chǎn)生信號(hào)頻率Hz,初始值1000Hz
unsigned char counter0,counter1;//用于記錄中斷次數(shù)
unsigned char hight=1; //高電平所需次數(shù)
unsigned char total=2;//一個(gè)周期所需中斷總次數(shù),占空比 hight/total,題目要求為方波。
unsigned char th1,tl1;////產(chǎn)生信號(hào)頻率,定時(shí)時(shí)間為500us,初始值為1000Hz
unsigned int f_count,t_count;//
unsigned char temp_flag=0;
void Display(void);
void Mcu_init(void);
void main()
{
Mcu_init();
while(1)
{
Display();
}
}
void Display(void)
{
if(IE0==0 || IE1==0)
beep=0;
LED0_show(signal,(1000000/signal));//顯示信號(hào)發(fā)生器的頻率Hz,周期us
LED1_show(frequency,(1000000/frequency));
}
void Mcu_init(void)
{
th1=((65536-1000000/(2*signal))/256),tl1=((65536-1000000/(2*signal))%256);//產(chǎn)生信號(hào)頻率
beep=0;
TMOD=0x11; //定時(shí)器1 方式1 16位手動(dòng)重裝初值 ; 定時(shí)器0 方式1 16位手動(dòng)重裝初值
TH0 = 0x03c;
TL0 = 0x0b0;//50ms
TH1=th1;
TL1=tl1; //
ET0=1;//允許T/C0申請(qǐng)中斷
TR0=1;//啟動(dòng)T/C0
ET1=1;//允許T/C1申請(qǐng)中斷
TR1=1;//啟動(dòng)T/C1
IT0=1;//下降沿觸發(fā)
EX0=1;//啟動(dòng)外部觸發(fā)器0
IT1=1;//下降沿觸發(fā)
EX1=1;//啟動(dòng)外部觸發(fā)器1
TR2=1;//啟動(dòng)T/C2
RCAP2H=0x00;
RCAP2L=0x00;
EA=1;
}
void EXint0(void) interrupt 0 //鎖存,停止刷新顯示
{
if(frequency<2000)//Measure_T();
{
TR2=1;//啟動(dòng)T/C2
temp_flag++;//上升沿的個(gè)數(shù)
if(temp_flag==2)//第二個(gè)上升沿
{
temp_flag=0;//上升沿的個(gè)數(shù)
t_count=TH2*256+TL2;
TR2=0;//停止T/C2
TH2=0x00;
TL2=0x00;
frequency_temp=1000000/t_count;
return;
}
}
else if(frequency>=2000)//Measure_F();
{
f_count++;//單位時(shí)間內(nèi)計(jì)到的沿個(gè)數(shù)
if(int_flag)///單位時(shí)間50ms
{
f_count=0;//單位時(shí)間內(nèi)計(jì)到的沿個(gè)數(shù)
int_flag=0;//單位時(shí)間50ms
frequency_temp=f_count*20;//frequency=f_count/50ms(Hz)
}
}
}
void time0(void) interrupt 1 //50ms測(cè)量一次頻率,并刷新顯示
{
TH0 = 0x3c;
TL0 = 0xb0;//50ms
counter0 ++;//T/C0中斷次數(shù)加一
int_flag=1; //單位時(shí)間50ms
if(counter0 ==2)//定時(shí)時(shí)間 50ms*counter0
{
counter0 =0;//T/C0中斷次數(shù)清零
frequency=frequency_temp;
}
}
void EXint1(void) interrupt 2
{
if(key0 ==0)
TR0 =~TR0;
if(key1 ==0)//頻率遞增100Hz
{
signal +=100;
if(signal>1500)
signal =100;
th1=((65536-1000000/(2*signal))/256),tl1=((65536-1000000/(2*signal))%256);//產(chǎn)生信號(hào)頻率
return;
}
beep=1;
}
void time1(void) interrupt 3 //方波發(fā)生
{
counter1++; //中斷次數(shù)加1
if(counter1 == hight) signal_out=0;//高電平時(shí)間到,轉(zhuǎn)為低電平
else if(counter1 == total) //低電平時(shí)間到,轉(zhuǎn)為高電平,并清零counter
{
signal_out =1;
counter1 =0;
}
TH1=th1;
TL1=tl1;
}
LED顯示程序
#include "LEDshow.h"
//const unsigned char Led_Disbuf[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x80}; //共陰極
const unsigned char Led_Disbuf[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x7f,0xbf}; //共陽(yáng)極
const unsigned char ComBuf[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void LED0_show(unsigned int high_4,unsigned int low_4)
{
unsigned char i,temp[8];
temp[0]= high_4 /1000;
temp[1]= high_4 %1000/100;
temp[2]= high_4 %100/10;
temp[3]= high_4 %10;
temp[4]= low_4 /1000;
temp[5]= low_4 %1000/100;
temp[6]= low_4 %100/10;
temp[7]= low_4 %10;
for(i=0;i<8;i++)
{
DATA0_HC595_Send_Data(Led_Disbuf[temp]); //送端口數(shù)據(jù)
CONTROL0_HC595_Send_Data(ComBuf); //選通位選端口
delay_ms(1); //延時(shí)
CONTROL0_HC595_Send_Data(0x00); //位選通關(guān)閉
}
}
void LED1_show(unsigned int high_4,unsigned int low_4)
{
unsigned char i,temp[8];
temp[0]= high_4 /1000;
temp[1]= high_4 %1000/100;
temp[2]= high_4 %100/10;
temp[3]= high_4 %10;
temp[4]= low_4 /1000;
temp[5]= low_4 %1000/100;
temp[6]= low_4 %100/10;
temp[7]= low_4 %10;
for(i=0;i<8;i++)
{
DATA1_HC595_Send_Data(Led_Disbuf[temp]); //送端口數(shù)據(jù)
CONTROL1_HC595_Send_Data(ComBuf); //選通位選端口
delay_ms(1); //延時(shí)
CONTROL1_HC595_Send_Data(0x00); //位選通關(guān)閉
}
}
void delay_ms(unsigned char time)
{
unsigned char i,j;
for(i=time;i>0;i--)
for(j=20;j>0;j--);
}
//發(fā)送一個(gè)字節(jié)
void CONTROL0_HC595_Send_Data(unsigned char byte)
{
unsigned char i;
for(i = 0;i < 8;i++)
{
if(byte & 0x80)
{
CONTROL0_HC595_data=1;
}
else
{
CONTROL0_HC595_data=0;
}
byte <<=1;
CONTROL0_HC595_sclk=1; //上升沿?cái)?shù)據(jù)移位
CONTROL0_HC595_sclk=0;
}
CONTROL0_HC595_latch=1;
CONTROL0_HC595_latch=0;
}
/*************
//發(fā)送字符串
void CONTROL0_HC595_Output_Data(unsigned char Data)
{
CONTROL0_HC595_latch=0; //下降沿鎖存器數(shù)據(jù)不變
CONTROL0_HC595_Send_Data(Data);
CONTROL0_HC595_latch=1; //上升沿?cái)?shù)據(jù)打入8位鎖存器
}
*************/
//發(fā)送一個(gè)字節(jié)
void DATA0_HC595_Send_Data(unsigned char byte)
{
unsigned char i;
for(i = 0;i < 8;i++)
{
if(byte & 0x80)
{
DATA0_HC595_data=1;
}
else
{
DATA0_HC595_data=0;
}
byte <<=1;
DATA0_HC595_sclk=1; //上升沿?cái)?shù)據(jù)移位
DATA0_HC595_sclk=0;
}
DATA0_HC595_latch=1;
DATA0_HC595_latch=0;
}
/****************
//發(fā)送字符串
void DATA0_HC595_Output_Data(unsigned char Data)
{
DATA0_HC595_latch=0; //下降沿鎖存器數(shù)據(jù)不變
DATA0_HC595_Send_Data(Data);
DATA0_HC595_latch=1; //上升沿?cái)?shù)據(jù)打入8位鎖存器
}
*****************/
//發(fā)送一個(gè)字節(jié)
void CONTROL1_HC595_Send_Data(unsigned char byte)
{
unsigned char i;
for(i = 0;i < 8;i++)
{
if(byte & 0x80)
{
CONTROL1_HC595_data=1;
}
else
{
CONTROL1_HC595_data=0;
}
byte <<=1;
CONTROL1_HC595_sclk=1; //上升沿?cái)?shù)據(jù)移位
CONTROL1_HC595_sclk=0;
}
CONTROL1_HC595_latch=1;
CONTROL1_HC595_latch=0;
}
/********************
//發(fā)送字符串
void CONTROL1_HC595_Output_Data(unsigned char Data)
{
CONTROL1_HC595_latch=0; //下降沿鎖存器數(shù)據(jù)不變
CONTROL1_HC595_Send_Data(Data);
CONTROL1_HC595_latch=1; //上升沿?cái)?shù)據(jù)打入8位鎖存器
}
***********************/
//發(fā)送一個(gè)字節(jié)
void DATA1_HC595_Send_Data(unsigned char byte)
{
unsigned char i;
for(i = 0;i < 8;i++)
{
if(byte & 0x80)
{
DATA1_HC595_data=1;
}
else
{
DATA1_HC595_data=0;
}
byte <<=1;
DATA1_HC595_sclk=1; //上升沿?cái)?shù)據(jù)移位
DATA1_HC595_sclk=0;
}
DATA1_HC595_latch=1;
DATA1_HC595_latch=0;
}
/***************
//發(fā)送字符串
void DATA1_HC595_Output_Data(unsigned char Data)
{
DATA1_HC595_latch=0; //下降沿鎖存器數(shù)據(jù)不變
DATA1_HC595_Send_Data(Data);
DATA1_HC595_latch=1; //上升沿?cái)?shù)據(jù)打入8位鎖存器
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
日本不卡一区二区
|
亚洲乱码一区二区三区在线观看
|
欧美日韩精品一区二区三区视频
|
99精品久久久
|
国产成人av电影
|
91九色视频在线
|
精品久久久久久亚洲精品
|
91精品国产91久久久久青草
|
91视频正在播放
|
中文字幕11页
|
中文字幕高清av
|
国产午夜精品理论片a大结局
|
中文字幕亚洲区
|
久久久久久成人网
|
在线成人
|
欧美日韩成人网
|
99re视频精品
|
免费在线观看成人
|
午夜在线观看视频
|
欧美二区在线
|
亚洲在线
|
成人av电影天堂
|
性网址
|
欧美福利|
国产高清精品一区二区三区
|
日韩欧美精品在线
|
亚洲欧美日韩在线
|
亚洲精品一区二区三区
|
久久久123|
国产片一区二区三区
|
a级毛片国产
|
91精品国产综合久久久久
|
日韩欧美国产精品一区二区三区
|
国产视频久久
|
美女在线国产
|
亚洲高清中文字幕
|
精品国产乱码久久久久久1区2区
|
69性欧美高清影院
|
99热热
|
91精品国产综合久久久动漫日韩
|
免费观看国产视频在线
|