《單片微型計算機與接口技術》課程設計說明書設計并實現(xiàn)頻率相位表_第1頁
《單片微型計算機與接口技術》課程設計說明書設計并實現(xiàn)頻率相位表_第2頁
《單片微型計算機與接口技術》課程設計說明書設計并實現(xiàn)頻率相位表_第3頁
《單片微型計算機與接口技術》課程設計說明書設計并實現(xiàn)頻率相位表_第4頁
《單片微型計算機與接口技術》課程設計說明書設計并實現(xiàn)頻率相位表_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、武漢理工大學單片微型計算機與接口技術課程設計說明書目錄1 設計題目12 設計原理12.1 設計原理12.2 設計原理13 系統(tǒng)的硬件設計23.1 系統(tǒng)的硬件電路圖23.2 系統(tǒng)的硬件資源34 系統(tǒng)的軟件設計 64.1設計源程序 64.2程序流程圖165 電路仿真 176 仿真測試分析 197 心得體會 218 參考文獻 221設計題目設計并實現(xiàn)頻率/相位表要求:輸入兩路方波信號,測量信號的頻率和兩信號的相位差,能顯示頻率值和相位差,精度:0.1hz,0.10。在滿足精度的前提下分析和證實系統(tǒng)的測量范圍。2設計原理2.1 設計原理利用單片機實現(xiàn)頻率和相位表的方法我了解的有兩種:第一、利用輸入信號

2、的下降沿產(chǎn)生中斷,對信號進行計數(shù),然后根據(jù)計數(shù)的結(jié)果,乘以計數(shù)的周期,就是輸入信號的周期了,然后求倒數(shù),并輸出值就是頻率了。而相位則是利用相似的方法,既是第一個輸入信號的下降沿觸發(fā)外中斷int0,t0和t1開始計數(shù),第二個信號輸入到int1,下降沿觸發(fā),并輸出計數(shù)的值,然后將計數(shù)的值與之前的計算頻率的值進行計算,就可以計算出相位的值。這種方法比較適合測量頻率的值比較低的時候。第二、可以利用計數(shù)器進行計時,在計時的時間里面統(tǒng)計有多少個下降沿,然后就可以通過對計數(shù)的時間和下降沿的值計算出輸入信號的周期。計算出周期之后就可以得到頻率的值。至于相位也是這樣,通過統(tǒng)計下降沿的值,然后與之間的方式一樣,就

3、可以得到相位的值了。這種方法比較適合測量高頻的時候。在這次的單片機的課程設計中我采用的是第一種方法,所以在測量時的頻率范圍很小,而且能滿足要求的測量準確的頻率也比較低。至于相位滿足要求的頻率范圍就更加的小了,而且也不是特別的準確。2.2 系統(tǒng)框圖設計的頻率/相位表的系統(tǒng)框圖如下圖1所示。圖13 系統(tǒng)的硬件設計3.1 系統(tǒng)的硬件電路圖系統(tǒng)的硬件電路圖如下所示:圖23.2 系統(tǒng)的硬件資源(1)89c52單片機如圖所示為89c52單片機的引腳圖圖3p0口:p0口為一個8位漏極開路雙向i/o口,沒腳可吸收8ttl門電路,當p1口的電路第一次寫時,被定義為高阻輸入。p0能夠用于外部數(shù)據(jù)存儲器,它被定義數(shù)

4、據(jù)/地址的第八位在flash編程時,p0口作為原碼輸入口,當flash進行校驗時,p0口輸出原碼,此時p0口外部必須拉高。p2口在設計中,p2.0設置為lcd的寄存器rs控制端,p2.1設置為lcd的rw控制端,p2.2設置為lcd的使能e控制端。p3口管腳 備選功能p3.2 /int0(外部中斷0)p3.3 /int1(外部中斷1)p3.4 t0(計時器0外部輸入)p3.5 t1(計時器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲器寫通道)p3.7 /rd(外部數(shù)據(jù)存儲器讀通道)(2)1602lcd顯示器如圖所示為1602顯示器的引腳圖圖41602lcd通常有14條引腳線或16條引腳線的lcd

5、,多出來的2條線是背光電源線。 表1 1602lcd引腳說明表引腳符號功能說明1vss一般接地2vdd接電源(+5v)3v0液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10k的電位器調(diào)整對比度)。4rsrs為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。5r/wr/w為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。6ee(或en)端為使能(enable)端,下降沿使能。7db0低4位三態(tài)、 雙向數(shù)據(jù)總線 0位(最低位)8db1低4位三態(tài)、 雙向數(shù)據(jù)總線 1位9db2低4位三態(tài)、 雙向數(shù)據(jù)總

6、線 2位10db3低4位三態(tài)、 雙向數(shù)據(jù)總線 3位11db4高4位三態(tài)、 雙向數(shù)據(jù)總線 4位12db5高4位三態(tài)、 雙向數(shù)據(jù)總線 5位13db6高4位三態(tài)、 雙向數(shù)據(jù)總線 6位14db7高4位三態(tài)、 雙向數(shù)據(jù)總線 7位(最高位)(也是busy flag)15bla背光電源正極16blk背光 電源負極表2 寄存器選擇控制表rsr/w操作說明00寫入指令寄存器(清除屏等)01讀busy flag(db7),以及讀取位址計數(shù)器(db0db6)值10寫入數(shù)據(jù)寄存器(顯示各字型等)12從數(shù)據(jù)寄存器讀取數(shù)據(jù)(3)異或門異或門管腳圖如下所示;圖5其真值表如下:表3 異或門真值表4 系統(tǒng)的軟件設計4.1設計源

7、程序#include#include#define uchar unsigned char#define uint unsigned int/*/sbit pin_rs = p20;sbit pin_rw = p21;sbit pin_e = p22;#define pin_data p0/*/char m=0,n=0;char u,v;float t0,t1,f,p;uint a=48,48,48,48,48,46,48,48; /頻率數(shù)據(jù)結(jié)果保存uint b=48,48,48,46,48,48; /相位數(shù)據(jù)結(jié)果保存uint i,j;uint x,y;uint c,d;void lcd_re

8、set();void display(uint x, uint y, uint data1);void shortdelay(uchar i);void longdelay(uint i);void set_rs(bit i);void set_rw(bit i);void set_e(bit i);void sc_p0(bit i);void write_instruc(uintinstruc);void write_data(uint data1);void display(uint x, uint y, uint data1);uint read_bf_ac(void);uint rea

9、d_data(void);bit lcd_busy();#define clearscreen()write_instruc(0x01)#define cursorreturn()write_instruc(0x02)#define inputmode(temp)write_instruc(temp)#define dispcontrol(temp)write_instruc(temp)#define functionset(temp)write_instruc(temp)#define dispshift(temp)write_instruc(temp)#define setcgram_ad

10、d(address)write_instruc(0x40 | address)#define setddram_add(address)write_instruc(0x80 | address)/* lcd初始化 */void lcd_init()lcd_reset();inputmode(0x06); /增量方式,不移位dispcontrol(0x0c);/顯示開,光標關,閃爍關functionset(0x38);/8位,2行,57/定時計數(shù)器初始化void ct_init()tmod=0x99; /gate=1,t1、t0工作在方式1,定時方式th0=0; /定時計數(shù)器初值清零tl0=0;

11、th1=0;tl1=0;tr0=1; /tr0,tr1置位,此時定時計數(shù)器的啟動有int0,int1引腳電平?jīng)Q定tr1=1;et0=1; /開中斷et1=1;/外部中斷0服務程序void itc0() interrupt 0 u=m; /讀定時計數(shù)器0溢出次數(shù)m=0; /溢出次數(shù)清零x=th0*256+tl0; /讀定時計數(shù)器0當前值th0=0; /定時計數(shù)器0清零tl0=0;/定時計數(shù)器0溢出中斷void time0() interrupt 1 m+; /溢出次數(shù)加1/外部中斷1服務程序void itc1() interrupt 2 v=n; /讀定時計數(shù)器1溢出次數(shù)n=0; /溢出次數(shù)清零

12、y=th1*256+tl1; /讀定時計數(shù)器1當前值th1=0; /定時計數(shù)器1清零tl1=0;/定時計數(shù)器1溢出中斷void time1() interrupt 3 n+; /溢出次數(shù)加1/* 主函數(shù) */ void main()lcd_init(); /液晶顯示初始化ct_init(); /定時計數(shù)器初始化ea=1; /開總中斷ex0=1; /允許外部中斷ex1=1;it0=1; /設置外部中斷方式為下降沿觸發(fā)it1=1;p3=0xff;while(1)t0=u*65536+x; /計算脈沖時間寬度f=1000000/(2*t0); /計算頻率c=f*100; /計算結(jié)果逐位保存a7=c%

13、10+48;a6=(c/10)%10+48;c=f;a4=c%10+48;a3=(c/10)%10+48;a2=(c/100)%10+48;a1=(c/1000)%10+48;a0=(c/10000)%10+48;display(0,1,f); /將顯示單元數(shù)據(jù)送液晶屏顯示display(0,3,=);for(i=0,j=5;i=7;i+,j+)display(0,j,ai);display(0,14,h);display(0,15,z);t1=v*65536+y; /計算脈沖寬度p=(t1/(2*t0)*360; /計算相位差d=p*100; /將計算結(jié)果逐位保存b5=d%10+48;b4=

14、(d/10)%10+48;d=p;b2=d%10+48;b1=(d/10)%10+48;b0=(d/100)%10+48;display(1,1,p); /將顯示數(shù)據(jù)送液晶屏顯示display(1,3,=);for(i=0,j=5;i0;i-) ;/長延時函數(shù):longdelay()void longdelay(uint i)uint j;for(;i0;i-) for(j=1000;j0;j-);/寄存器選擇信號:set_rs()void set_rs(bit i)if(i=1) pin_rs = 1;else pin_rs = 0;/讀寫操作控制信號:set_rw()void set_rw

15、(bit i)if(i=1) pin_rw = 1;else pin_rw = 0;/使能信號:set_e()void set_e(bit i)if(i=1) pin_e = 1;else pin_e = 0;/io輸入輸出控制void sc_p0(bit i) if(i=1) p0 = 0xff;else p0 = 0x00; /寫指令函數(shù):write_instruc()void write_instruc(uintinstruc)while(lcd_busy();sc_p0(0);set_rs(0);set_rw(0);/shortdelay(1);set_e(0);pin_data =

16、instruc;/shortdelay(1);set_e(1);shortdelay(10);set_e(0);/shortdelay(1);set_rw(1);set_rs(1);/讀bf以及ac的值函數(shù):read_bf_ac()uint read_bf_ac()uint temp;sc_p0(1);set_rs(0);set_rw(1);/shortdelay(1);set_e(0);/shortdelay(1);set_e(1);shortdelay(1);temp = pin_data;shortdelay(10);set_e(0);/shortdelay(1);set_rw(0);s

17、et_rs(1);return(temp);/寫數(shù)據(jù)到ram函數(shù):write_data()void write_data(uint data1)sc_p0(0);set_rs(1);set_rw(0);/shortdelay(1);set_e(0);pin_data = data1;/shortdelay(1);set_e(1);shortdelay(10);set_e(0);/shortdelay(1);set_rw(1);set_rs(0);/從ram讀數(shù)據(jù)函數(shù):read_data()uint read_data(void)uint temp;sc_p0(1);set_rs(1);set_

18、rw(1);/shortdelay(1);set_e(0);/shortdelay(1);set_e(1);shortdelay(1);temp = pin_data;shortdelay(10);set_e(0);/shortdelay(1);set_rw(0);set_rs(0);return(temp);/檢測lcd控制器狀態(tài)函數(shù):lcd_busy()/返回一bit數(shù):1 忙;0 閑bit lcd_busy()return(bit)(read_bf_ac() & 0x80);/在指定位置顯示字符函數(shù): display()/ x為行號,y為列號,/ data為顯示字符的碼字數(shù)據(jù)void d

19、isplay(uint x, uint y, uint data1)uint temp; while(lcd_busy(); /若lcd控制器忙,則等待temp = y & 0x0f;x&= 0x01;if(x) temp |= 0x40;setddram_add(temp); /設置顯示位置write_data(data1);/lcd復位函數(shù):lcd_reset()void lcd_reset()clearscreen();cursorreturn();4.2程序流程圖圖65 電路仿真仿真電路總圖:圖7電路輸入方波信號:圖8分別輸入兩路的方波的信號,通過異或門控制相位差。單片機中斷控制:圖9

20、int0和int1分別輸入兩路的方波的信號,有相位差lcd顯示:圖10利用p0口輸出數(shù)據(jù),而p2.0、p2.1、p2.2控制lcd顯示器,從而得到頻率及相位差的顯示結(jié)果。6仿真測試分析仿真測試分析:(1) 輸入信號頻率:圖11仿真時輸入信號頻率可調(diào),并可通過數(shù)碼管測試得到輸入信號的頻率,通過異或門控制兩個輸入信號的相位差。(2) 輸入信號波形兩個輸入信號的波形及相位差如圖所示。圖12(3) 輸出信號頻率及相位差圖13當兩個輸入信號同頻率為220hz時,lcd輸出所示。其中,f為頻率,p為相位差。性能分析:這是利用單片機的內(nèi)部的計數(shù)器t0和t1對頻率和相位進行計算。首先通過輸入信號的下降沿觸發(fā)中

21、斷int0和int1,對信號進行計數(shù),然后根據(jù)計數(shù)的結(jié)果,乘以計數(shù)的周期,就是輸入信號的周期了,然后求倒數(shù),并輸出值就是頻率了。而相位則是通過第一個輸入信號的下降沿觸發(fā)外中斷int0,t0和t1開始計數(shù),第二個信號輸入到int1,下降沿觸發(fā)中斷int1,并輸出計數(shù)的值,然后將計數(shù)的值與之前的計算頻率的值進行計算,就可以計算出相位的值。只是在實物測試時發(fā)現(xiàn),輸入信號頻率在比較低的時候,lcd的顯示比較穩(wěn)定,隨著輸入信號的頻率的增加,誤差慢慢增大,達到7khz左右時,誤差較大,而且lcd顯示開始不穩(wěn)定了。7心得體會為期一周的單片機課程設計就要結(jié)束了,在這一周內(nèi),我遇到了很多問題,也學到了很多東西。

22、課程設計開始時,由于沒有經(jīng)驗,不知如何下手,所以就去圖書管找了一些書看,盡管有許多的設計方案,可是總感覺自己還是有許多的東西弄不太清楚,于是就請教同學。他常做一些設計,有一些經(jīng)驗。大概知道設計的方向后,就自己上網(wǎng)查資料,到圖書館借閱一些相關書籍,然后自己就開始編寫程序進行設計了。開始編寫程序的時候,最主要的就是要頭腦清醒,并且要對大概程序的布局,和每個功能的實現(xiàn)方法要有個邏輯。這樣在遇到?jīng)]有辦法實現(xiàn)的功能的時候,才能快速的解決問題。我設計的是頻率/相位表,設計要求:輸入兩路方波信號,測量信號的頻率和兩信號的相位差,能顯示頻率值和相位差,精度:0.1hz,0.10。在滿足精度的前提下分析和證實系

23、統(tǒng)的測量范圍。編程設計思想為:利用輸入信號的下降沿產(chǎn)生中斷,對信號進行計數(shù),然后根據(jù)計數(shù)的結(jié)果,乘以計數(shù)的周期,就是輸入信號的周期了,然后求倒數(shù),并輸出值就是頻率值了。而相位則是利用相似的方法,既是第一個輸入信號的下降沿觸發(fā)外中斷int0,t0和t1開始計數(shù),第二個信號輸入到int1,下降沿觸發(fā),并輸出計數(shù)的值,然后將計數(shù)的值與之前的計算頻率的值進行計算,就可以計算出相位的值。只是這種方法比較適合測量頻率的值比較低的時候。我根據(jù)這編程思想慢慢完成編程并實現(xiàn)了頻率/相位表功能。編程結(jié)束后,我進行了protues電路仿真。仿真結(jié)束后,和同學一起進行了實物測試,雖然最終結(jié)果還是有些誤差,但還是完成實

24、現(xiàn)了頻率/相位表功能。每一次課程設計都是一個很好的學習過程,并且是一個很好的學會自學的過程。在這個過程中,我們能學會遇到一些問題,先自己想辦法解決,如果自己實在解決不了的,可以查閱資料和幫助性文檔。遇到問題解決不了的,不是一味的逃避和完全依靠他人,我們要學會獨立的思考。在自己的努力下,課程設計最終完成了。盡管經(jīng)歷了不少的艱辛,但給我積累了一點設計的經(jīng)驗,最后也有點小小的成就感。后面的路還很長,我還的努力! 8 參考文獻1 李群芳、 張士軍,單片微型計算機與接口技術, 電子工業(yè)出版社,20082 張毅剛、彭喜元、董繼成,單片機原理及應用,高等教育出版社,20043 趙曉安,mcs-51單片機原理

25、及應用,天津大學出版社,20014 何立民mcs-51系列應用系統(tǒng)設計北京:北京航空航天大學出版社,19935barry b brey. the intel microprocessors. 5th ed. pearson education,2001ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh3bhwyreko8d9g7nmzqowpjetldrw08gvs8dsdqqygc3ce7moo2tlf0jf1gk74iuxybmtivr97ckrfvqult5fn2t6mpjr6rbzvpsortzvij

26、5nb5ndvvsr4iwr1twlfkglspzuhrjq3cmzu98euouijdlszqpmvrw9zkupxf8wfug9l2g9277g2rtipa1ypczeuqxpkbhtvdcooqozxuz3vjrzmocijym62zchmeootyes8ebmm932tbz2yo09rtszeys8zrd2yktj8l6jeazvajnfbtrylvsm6ofbftoxvrffn7owiygjlamkunxjybz5rrb7r4vsur9zpfzfmfsjhcfca37lnw2vvlrkn7r8psz1bn6oric5hu5z6hcxayqynpog8duybawqsl20csg06d

27、h2sm8hltgpkicskrgopdpuhbj1lmpk7lydvc6nnmwl3fwhzftfvyaary7lhssxj10v3ph3y19bxyr77ib7cpzsu2tijqe3hkqkkau9kskcphkxuikvvyjzpg2yijrkqfbggovyqkuxnwi9omnjtt6qilzxtyrf7d20fbmabcfiixrqkusvnxbppfuxyq1fjskfsubkgs2duvqc9sz4jkbgn4qqv66pyoarjurnfj3txyfclzieeptwfjthpheipdfnqnr2hjqkv2dzwtmpdjqkbcxmovdsjqctjagjmdlskpgad2s0h0vmzgaht36gyuez7umank1ndreubeqdgrx0venqgnsyib2ilq3siqrnl4m56t7z8y8da5k0kupn5nzg4jvjdtffhyt82aogqkxo4vblmleiy2p7hthbho07rcfttxodydppdtqso7wxd0j6fkklgm4wodzplhtrr2xgqn13hqy59zu1gegdyqnihntavsieuefqcyfucjwd3vk5i7ykmhundmiz ut2apodfxxc02gybkskcww97mrqqwhoj5tl15zt6jipyytycummtarp3v1n5luizi3xh

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論