久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(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)




下面是部分內(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,頻率范圍100Hz1500Hz
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)資源有4I/O控制端口、3個(gè)定時(shí)器、8個(gè)中斷、軟件設(shè)置低能耗模式、看門狗和斷電保護(hù)?梢栽4V5.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)
第二功能
P1.0
T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出
P1.1
T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制)
P1.5
MOSI(在系統(tǒng)編程用)
P1.6
MISO(在系統(tǒng)編程用)
P1.7
SCK(在系統(tǒng)編程用)
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)
第二功能
P3.0
RXD(串行輸入)
P3.1
TXD  (串行輸出)
P3.2
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB301.tmp.png(外部中斷0)
P3.3
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB302.tmp.jpg(外部中斷1)
P3.4
T0(定時(shí)器0外部輸入)
P3.5
T1(定時(shí)器1外部輸入)
P3.6
file:///C:\Users\shaoanqi\AppData\Local\Temp\ksohtml\wpsB303.tmp.png(外部數(shù)據(jù)存儲(chǔ)器寫選通)
P3.7
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ī)端口分配表
模 塊
端口
功能
顯示模塊
P1.1-P1.6
輸入信號(hào)數(shù)碼管頻率值顯示
P3.0-P3.2、P3.4-P3.6
輸出信號(hào)數(shù)碼管頻率值顯示
蜂鳴器模塊
P1.7
按鍵時(shí),蜂鳴器發(fā)出提示音,表示按鍵有效
74HC595芯片介紹
引腳說(shuō)明
符號(hào)
引腳
描述
Q0…Q7
15[size=10.5000pt], 1[size=10.5000pt], 7
并行數(shù)據(jù)輸出
GND
8
[size=10.5000pt]地
Q7’
9
串行數(shù)據(jù)輸出
MR
10
主復(fù)位(低電平)
SHCP
11
移位寄存器時(shí)鐘輸入
STCP
12
存儲(chǔ)寄存器時(shí)鐘輸入
OE
13
輸出有效(低電平)
DS
14
串行數(shù)據(jù)輸入
VCC
16
電源

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ù)記錄表
待測(cè)值(Hz)
1000
1100
1200
1300
1400
1500
測(cè)量值(Hz)
0949
1040
1129
1216
1303
1390
7:周期的數(shù)據(jù)記錄表
待測(cè)值(us)
1000
0909
0833
0769
0714
0666
測(cè)量值(us)
1053
0961
0885
0822
0767
0719
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精品国产综合久久久动漫日韩 | 免费观看国产视频在线 |