




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、武漢理工大學單片微型計算機與接口技術課程設計說明書目錄1 設計題目12 設計原理12.1 設計原理12.2 設計原理13 系統的硬件設計23.1 系統的硬件電路圖23.2 系統的硬件資源34 系統的軟件設計 64.1設計源程序 64.2程序流程圖165 電路仿真 176 仿真測試分析 197 心得體會 218 參考文獻 221設計題目設計并實現頻率/相位表要求:輸入兩路方波信號,測量信號的頻率和兩信號的相位差,能顯示頻率值和相位差,精度:0.1hz,0.10。在滿足精度的前提下分析和證實系統的測量范圍。2設計原理2.1 設計原理利用單片機實現頻率和相位表的方法我了解的有兩種:第一、利用輸入信號
2、的下降沿產生中斷,對信號進行計數,然后根據計數的結果,乘以計數的周期,就是輸入信號的周期了,然后求倒數,并輸出值就是頻率了。而相位則是利用相似的方法,既是第一個輸入信號的下降沿觸發外中斷int0,t0和t1開始計數,第二個信號輸入到int1,下降沿觸發,并輸出計數的值,然后將計數的值與之前的計算頻率的值進行計算,就可以計算出相位的值。這種方法比較適合測量頻率的值比較低的時候。第二、可以利用計數器進行計時,在計時的時間里面統計有多少個下降沿,然后就可以通過對計數的時間和下降沿的值計算出輸入信號的周期。計算出周期之后就可以得到頻率的值。至于相位也是這樣,通過統計下降沿的值,然后與之間的方式一樣,就
3、可以得到相位的值了。這種方法比較適合測量高頻的時候。在這次的單片機的課程設計中我采用的是第一種方法,所以在測量時的頻率范圍很小,而且能滿足要求的測量準確的頻率也比較低。至于相位滿足要求的頻率范圍就更加的小了,而且也不是特別的準確。2.2 系統框圖設計的頻率/相位表的系統框圖如下圖1所示。圖13 系統的硬件設計3.1 系統的硬件電路圖系統的硬件電路圖如下所示:圖23.2 系統的硬件資源(1)89c52單片機如圖所示為89c52單片機的引腳圖圖3p0口:p0口為一個8位漏極開路雙向i/o口,沒腳可吸收8ttl門電路,當p1口的電路第一次寫時,被定義為高阻輸入。p0能夠用于外部數據存儲器,它被定義數
4、據/地址的第八位在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(外部數據存儲器寫通道)p3.7 /rd(外部數據存儲器讀通道)(2)1602lcd顯示器如圖所示為1602顯示器的引腳圖圖41602lcd通常有14條引腳線或16條引腳線的lcd
5、,多出來的2條線是背光電源線。 表1 1602lcd引腳說明表引腳符號功能說明1vss一般接地2vdd接電源(+5v)3v0液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產生“鬼影”,使用時可以通過一個10k的電位器調整對比度)。4rsrs為寄存器選擇,高電平1時選擇數據寄存器、低電平0時選擇指令寄存器。5r/wr/w為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。6ee(或en)端為使能(enable)端,下降沿使能。7db0低4位三態、 雙向數據總線 0位(最低位)8db1低4位三態、 雙向數據總線 1位9db2低4位三態、 雙向數據總
6、線 2位10db3低4位三態、 雙向數據總線 3位11db4高4位三態、 雙向數據總線 4位12db5高4位三態、 雙向數據總線 5位13db6高4位三態、 雙向數據總線 6位14db7高4位三態、 雙向數據總線 7位(最高位)(也是busy flag)15bla背光電源正極16blk背光 電源負極表2 寄存器選擇控制表rsr/w操作說明00寫入指令寄存器(清除屏等)01讀busy flag(db7),以及讀取位址計數器(db0db6)值10寫入數據寄存器(顯示各字型等)12從數據寄存器讀取數據(3)異或門異或門管腳圖如下所示;圖5其真值表如下:表3 異或門真值表4 系統的軟件設計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; /頻率數據結果保存uint b=48,48,48,46,48,48; /相位數據結果保存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/定時計數器初始化void ct_init()tmod=0x99; /gate=1,t1、t0工作在方式1,定時方式th0=0; /定時計數器初值清零tl0=0;
11、th1=0;tl1=0;tr0=1; /tr0,tr1置位,此時定時計數器的啟動有int0,int1引腳電平決定tr1=1;et0=1; /開中斷et1=1;/外部中斷0服務程序void itc0() interrupt 0 u=m; /讀定時計數器0溢出次數m=0; /溢出次數清零x=th0*256+tl0; /讀定時計數器0當前值th0=0; /定時計數器0清零tl0=0;/定時計數器0溢出中斷void time0() interrupt 1 m+; /溢出次數加1/外部中斷1服務程序void itc1() interrupt 2 v=n; /讀定時計數器1溢出次數n=0; /溢出次數清零
12、y=th1*256+tl1; /讀定時計數器1當前值th1=0; /定時計數器1清零tl1=0;/定時計數器1溢出中斷void time1() interrupt 3 n+; /溢出次數加1/* 主函數 */ void main()lcd_init(); /液晶顯示初始化ct_init(); /定時計數器初始化ea=1; /開總中斷ex0=1; /允許外部中斷ex1=1;it0=1; /設置外部中斷方式為下降沿觸發it1=1;p3=0xff;while(1)t0=u*65536+x; /計算脈沖時間寬度f=1000000/(2*t0); /計算頻率c=f*100; /計算結果逐位保存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); /將顯示單元數據送液晶屏顯示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; /將計算結果逐位保存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); /將顯示數據送液晶屏顯示display(1,3,=);for(i=0,j=5;i0;i-) ;/長延時函數: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; /寫指令函數: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的值函數: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);/寫數據到ram函數: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讀數據函數: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控制器狀態函數:lcd_busy()/返回一bit數:1 忙;0 閑bit lcd_busy()return(bit)(read_bf_ac() & 0x80);/在指定位置顯示字符函數: display()/ x為行號,y為列號,/ data為顯示字符的碼字數據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復位函數:lcd_reset()void lcd_reset()clearscreen();cursorreturn();4.2程序流程圖圖65 電路仿真仿真電路總圖:圖7電路輸入方波信號:圖8分別輸入兩路的方波的信號,通過異或門控制相位差。單片機中斷控制:圖9
20、int0和int1分別輸入兩路的方波的信號,有相位差lcd顯示:圖10利用p0口輸出數據,而p2.0、p2.1、p2.2控制lcd顯示器,從而得到頻率及相位差的顯示結果。6仿真測試分析仿真測試分析:(1) 輸入信號頻率:圖11仿真時輸入信號頻率可調,并可通過數碼管測試得到輸入信號的頻率,通過異或門控制兩個輸入信號的相位差。(2) 輸入信號波形兩個輸入信號的波形及相位差如圖所示。圖12(3) 輸出信號頻率及相位差圖13當兩個輸入信號同頻率為220hz時,lcd輸出所示。其中,f為頻率,p為相位差。性能分析:這是利用單片機的內部的計數器t0和t1對頻率和相位進行計算。首先通過輸入信號的下降沿觸發中
21、斷int0和int1,對信號進行計數,然后根據計數的結果,乘以計數的周期,就是輸入信號的周期了,然后求倒數,并輸出值就是頻率了。而相位則是通過第一個輸入信號的下降沿觸發外中斷int0,t0和t1開始計數,第二個信號輸入到int1,下降沿觸發中斷int1,并輸出計數的值,然后將計數的值與之前的計算頻率的值進行計算,就可以計算出相位的值。只是在實物測試時發現,輸入信號頻率在比較低的時候,lcd的顯示比較穩定,隨著輸入信號的頻率的增加,誤差慢慢增大,達到7khz左右時,誤差較大,而且lcd顯示開始不穩定了。7心得體會為期一周的單片機課程設計就要結束了,在這一周內,我遇到了很多問題,也學到了很多東西。
22、課程設計開始時,由于沒有經驗,不知如何下手,所以就去圖書管找了一些書看,盡管有許多的設計方案,可是總感覺自己還是有許多的東西弄不太清楚,于是就請教同學。他常做一些設計,有一些經驗。大概知道設計的方向后,就自己上網查資料,到圖書館借閱一些相關書籍,然后自己就開始編寫程序進行設計了。開始編寫程序的時候,最主要的就是要頭腦清醒,并且要對大概程序的布局,和每個功能的實現方法要有個邏輯。這樣在遇到沒有辦法實現的功能的時候,才能快速的解決問題。我設計的是頻率/相位表,設計要求:輸入兩路方波信號,測量信號的頻率和兩信號的相位差,能顯示頻率值和相位差,精度:0.1hz,0.10。在滿足精度的前提下分析和證實系
23、統的測量范圍。編程設計思想為:利用輸入信號的下降沿產生中斷,對信號進行計數,然后根據計數的結果,乘以計數的周期,就是輸入信號的周期了,然后求倒數,并輸出值就是頻率值了。而相位則是利用相似的方法,既是第一個輸入信號的下降沿觸發外中斷int0,t0和t1開始計數,第二個信號輸入到int1,下降沿觸發,并輸出計數的值,然后將計數的值與之前的計算頻率的值進行計算,就可以計算出相位的值。只是這種方法比較適合測量頻率的值比較低的時候。我根據這編程思想慢慢完成編程并實現了頻率/相位表功能。編程結束后,我進行了protues電路仿真。仿真結束后,和同學一起進行了實物測試,雖然最終結果還是有些誤差,但還是完成實
24、現了頻率/相位表功能。每一次課程設計都是一個很好的學習過程,并且是一個很好的學會自學的過程。在這個過程中,我們能學會遇到一些問題,先自己想辦法解決,如果自己實在解決不了的,可以查閱資料和幫助性文檔。遇到問題解決不了的,不是一味的逃避和完全依靠他人,我們要學會獨立的思考。在自己的努力下,課程設計最終完成了。盡管經歷了不少的艱辛,但給我積累了一點設計的經驗,最后也有點小小的成就感。后面的路還很長,我還的努力! 8 參考文獻1 李群芳、 張士軍,單片微型計算機與接口技術, 電子工業出版社,20082 張毅剛、彭喜元、董繼成,單片機原理及應用,高等教育出版社,20043 趙曉安,mcs-51單片機原理
25、及應用,天津大學出版社,20014 何立民mcs-51系列應用系統設計北京:北京航空航天大學出版社,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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濟南市天橋區濼口實驗學校2024-2025年第二學期期中考試八年級地理試題(含答案)
- 沙漠地區土地治理承包合同
- 物業臨聘人員勞動合同
- Unit1 starting out 教案2024-2025學年外研版(2024)七年級英語下冊
- 小學科學鄂教版五年級上冊9蛙教學設計及反思
- 幼兒表演性舞蹈創編實例
- 電工清包承包合同書
- 人教版小學二年級上冊數學 第3單元 角的初步認識 教案
- 紙漿采購合同范本
- 股權投資合作協議書
- T-ZMDS 10019-2024 經顱電刺激儀基本技術規范
- 人教版六年級下冊科學全冊教案
- 2024福建中閩能源股份有限公司招聘12人筆試參考題庫附帶答案詳解
- 2025年江西省旅游集團股份有限公司招聘筆試參考題庫含答案解析
- 《外科補液原則》課件
- 《墨家思想》課件
- 浙江省2025年1月首考高考英語試卷試題真題(含答案)
- 川教版(2024)小學信息技術三年級上冊《跨學科主題活動-在線健康小達人》教學實錄
- 機械專業英語
- 高空作業車(剪叉式、曲臂式)驗收表
- 廣東省廣州市2024屆高三下學期一模考試 政治 含解析
評論
0/150
提交評論