單片機(jī)課程設(shè)計(jì)報(bào)告設(shè)計(jì)并實(shí)現(xiàn)頻率相位表_第1頁(yè)
單片機(jī)課程設(shè)計(jì)報(bào)告設(shè)計(jì)并實(shí)現(xiàn)頻率相位表_第2頁(yè)
單片機(jī)課程設(shè)計(jì)報(bào)告設(shè)計(jì)并實(shí)現(xiàn)頻率相位表_第3頁(yè)
單片機(jī)課程設(shè)計(jì)報(bào)告設(shè)計(jì)并實(shí)現(xiàn)頻率相位表_第4頁(yè)
單片機(jī)課程設(shè)計(jì)報(bào)告設(shè)計(jì)并實(shí)現(xiàn)頻率相位表_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、武漢理工大學(xué)單片機(jī)原理與應(yīng)用課程設(shè)計(jì)說(shuō)明書1 課設(shè)題目及簡(jiǎn)要分析題目:設(shè)計(jì)并實(shí)現(xiàn)頻率/相位表要求:輸入兩路方波信號(hào),測(cè)量信號(hào)的頻率和兩信號(hào)的相位差,能顯示頻率值和相位差,精度:0.1hz,0.10。在滿足精度的前提下分析和證實(shí)系統(tǒng)的測(cè)量范圍。簡(jiǎn)要分析:題目要求測(cè)量?jī)陕吠l率信號(hào)的頻率和相位差,初步分析,測(cè)量頻率有兩種方法,定時(shí)計(jì)數(shù)法,測(cè)量周期求倒數(shù)的方法,可以根據(jù)具體情況選用不同的方法;測(cè)量相位差可以通過(guò)用領(lǐng)先的相位信號(hào)控制定時(shí)器開啟,用落后的相位信號(hào)控制定時(shí)器停止,計(jì)算出兩個(gè)信號(hào)的延時(shí),然后除以信號(hào)的周期,再乘以3600就可以得到兩個(gè)信號(hào)的相位差。2設(shè)計(jì)原理2.1 設(shè)計(jì)原理測(cè)量頻率有兩種方法

2、,直接測(cè)量法和間接測(cè)量法。直接測(cè)量法即直接用計(jì)數(shù)器測(cè)出頻率,將單片機(jī)的t1設(shè)置為計(jì)數(shù)方式,方波輸入至單片機(jī)的計(jì)數(shù)器1的入口,對(duì)輸入的方波計(jì)數(shù),定時(shí)器0設(shè)置時(shí)長(zhǎng)為1s。由于這種方法誤差在1s計(jì)時(shí)到時(shí),并非一定是整數(shù)個(gè)波形,而計(jì)數(shù)器計(jì)到的只能是整數(shù)個(gè)波形,所以有不大于一個(gè)波的誤差存在,如果是高頻信號(hào),這個(gè)誤差就非常小,但是如果是低頻信號(hào),就可能會(huì)導(dǎo)致誤差較大。間接測(cè)量法即通過(guò)測(cè)周期來(lái)求出頻率,可以通過(guò)外部中斷來(lái)控制,當(dāng)方波的第n個(gè)下升沿啟動(dòng)計(jì)時(shí)器,第n+1個(gè)下升沿關(guān)閉計(jì)時(shí)器,計(jì)數(shù)器所記錄的時(shí)間即為方波的周期。在通過(guò)周期來(lái)計(jì)算出所求的頻率。由于直接測(cè)量法對(duì)低頻信號(hào)的誤差較大,故此次課程設(shè)計(jì)采用間接測(cè)

3、量法來(lái)測(cè)量。此次設(shè)計(jì)涉及到相位差,即兩列波形異或得到的波形只需要測(cè)高電平,要用到gate信號(hào),gate=1時(shí),tr0=1,into=1才能啟動(dòng)計(jì)數(shù)器,而計(jì)數(shù)器0是通過(guò)外部中斷into的下降沿開始觸發(fā)的,計(jì)時(shí)器從0開始計(jì)時(shí),計(jì)數(shù)器只能測(cè)高電平,因此測(cè)得的時(shí)間為半個(gè)周期。當(dāng)計(jì)數(shù)器0計(jì)時(shí)溢出,執(zhí)行m加1的操作。則測(cè)量時(shí)間為:t1=th0*256+tl0+m*65536 ,所求頻率f=1000000/(2*t1) 測(cè)量?jī)煞讲ǖ南辔徊顣r(shí),先將兩方波信號(hào)異或,得到的新波形輸入外部中斷1的入口,在信號(hào)的第n個(gè)下跳沿時(shí),進(jìn)入外部中斷的程序,開啟計(jì)數(shù)器1。第n+1個(gè)下跳沿到來(lái)時(shí),則關(guān)閉計(jì)數(shù)器1,當(dāng)gate=1時(shí)

4、,只有在int1=1 時(shí),tr1=1時(shí),計(jì)數(shù)器t1才開始計(jì)數(shù),當(dāng)計(jì)數(shù)器0計(jì)時(shí)溢出,執(zhí)行m加1的操作,所以讀的的時(shí)間只為高電平的持續(xù)時(shí)間,即為兩方波的相隔時(shí)間t2,相位差可計(jì)算如下:t2=th1*256+tli+n*65536 ;則相位差p=t2/(2*t1)*3602.2 系統(tǒng)框圖設(shè)計(jì)的頻率/相位表的系統(tǒng)框圖如下圖1所示。圖12.3資源分配表i/o口分配具體分配內(nèi)容p0液晶的數(shù)據(jù)與命令傳輸口p1.0液晶數(shù)據(jù)/命令斷p1.1液晶讀/寫端p1.2液晶使能端p3.2(外部中斷0)方波1輸入端p3.3(外部中斷1)異或后方波輸入端3 系統(tǒng)的硬件設(shè)計(jì)3.1 系統(tǒng)的硬件電路圖系統(tǒng)的硬件電路圖如下所示: 圖

5、23.2 系統(tǒng)的硬件資源(1)89c52單片機(jī)如圖所示為89c52單片機(jī)的引腳圖圖3p0口:p0口為一個(gè)8位漏極開路雙向i/o口,沒腳可吸收8ttl門電路,當(dāng)p1口的電路第一次寫時(shí),被定義為高阻輸入。p0能夠用于外部數(shù)據(jù)存儲(chǔ)器,它被定義數(shù)據(jù)/地址的第八位在flash編程時(shí),p0口作為原碼輸入口,當(dāng)flash進(jìn)行校驗(yàn)時(shí),p0口輸出原碼,此時(shí)p0口外部必須拉高。p2口在設(shè)計(jì)中,p2.0設(shè)置為lcd的寄存器rs控制端,p2.1設(shè)置為lcd的rw控制端,p2.2設(shè)置為lcd的使能e控制端。p3口管腳 備選功能p3.2 /int0(外部中斷0)p3.3 /int1(外部中斷1)p3.4 t0(計(jì)時(shí)器0外

6、部輸入)p3.5 t1(計(jì)時(shí)器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲(chǔ)器寫通道)p3.7 /rd(外部數(shù)據(jù)存儲(chǔ)器讀通道)(2)1602lcd顯示器如圖所示為1602顯示器的引腳圖圖41602lcd通常有14條引腳線或16條引腳線的lcd,多出來(lái)的2條線是背光電源線。 表1 1602lcd引腳說(shuō)明表引腳符號(hào)功能說(shuō)明1vss一般接地2vdd接電源(+5v)3v0液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10k的電位器調(diào)整對(duì)比度)。4rsrs為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。5r/wr/w為讀寫

7、信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。6ee(或en)端為使能(enable)端,下降沿使能。7db0低4位三態(tài)、 雙向數(shù)據(jù)總線 0位(最低位)8db1低4位三態(tài)、 雙向數(shù)據(jù)總線 1位9db2低4位三態(tài)、 雙向數(shù)據(jù)總線 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背光 電源負(fù)極表2 寄存器選擇控制表rsr/w操作說(shuō)明00寫入指令寄存器(清

8、除屏等)01讀busy flag(db7),以及讀取位址計(jì)數(shù)器(db0db6)值10寫入數(shù)據(jù)寄存器(顯示各字型等)12從數(shù)據(jù)寄存器讀取數(shù)據(jù)(3)異或門異或門管腳圖如下所示;圖5其真值表如下:表3 異或門真值表4 系統(tǒng)的軟件設(shè)計(jì)4.1程序流程圖圖64.2設(shè)計(jì)源程序#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;f

9、loat 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_reset();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);vo

10、id write_instruc(uintinstruc);void write_data(uint data1);void display(uint x, uint y, uint data1);uint read_bf_ac(void);uint read_data(void);bit lcd_busy();#define clearscreen()write_instruc(0x01)#define cursorreturn()write_instruc(0x02)#define inputmode(temp)write_instruc(temp)#define dispcontrol(

11、temp)write_instruc(temp)#define functionset(temp)write_instruc(temp)#define dispshift(temp)write_instruc(temp)#define setcgram_add(address)write_instruc(0x40 | address)#define setddram_add(address)write_instruc(0x80 | address)/* lcd初始化 */void lcd_init()lcd_reset();inputmode(0x06); /增量方式,不移位dispcontr

12、ol(0x0c);/顯示開,光標(biāo)關(guān),閃爍關(guān)functionset(0x38);/8位,2行,57/定時(shí)計(jì)數(shù)器初始化void ct_init()tmod=0x99; /gate=1,t1、t0工作在方式1,定時(shí)方式th0=0; /定時(shí)計(jì)數(shù)器初值清零tl0=0;th1=0;tl1=0;tr0=1; /tr0,tr1置位,此時(shí)定時(shí)計(jì)數(shù)器的啟動(dòng)有int0,int1引腳電平?jīng)Q定tr1=1;et0=1; /開中斷et1=1;/外部中斷0服務(wù)程序void itc0() interrupt 0 u=m; /讀定時(shí)計(jì)數(shù)器0溢出次數(shù)m=0; /溢出次數(shù)清零x=th0*256+tl0; /讀定時(shí)計(jì)數(shù)器0當(dāng)前值th0

13、=0; /定時(shí)計(jì)數(shù)器0清零tl0=0;/定時(shí)計(jì)數(shù)器0溢出中斷void time0() interrupt 1 m+; /溢出次數(shù)加1/外部中斷1服務(wù)程序void itc1() interrupt 2 v=n; /讀定時(shí)計(jì)數(shù)器1溢出次數(shù)n=0; /溢出次數(shù)清零y=th1*256+tl1; /讀定時(shí)計(jì)數(shù)器1當(dāng)前值th1=0; /定時(shí)計(jì)數(shù)器1清零tl1=0;/定時(shí)計(jì)數(shù)器1溢出中斷void time1() interrupt 3 n+; /溢出次數(shù)加1/* 主函數(shù) */ void main()lcd_init(); /液晶顯示初始化ct_init(); /定時(shí)計(jì)數(shù)器初始化ea=1; /開總中斷ex0=

14、1; /允許外部中斷ex1=1;it0=1; /設(shè)置外部中斷方式為下降沿觸發(fā)it1=1;p3=0xff;while(1)t0=u*65536+x; /計(jì)算脈沖時(shí)間寬度f(wàn)=1000000/(2*t0); /計(jì)算頻率c=f*100; /計(jì)算結(jié)果逐位保存a7=c%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+,

15、j+)display(0,j,ai);display(0,14,h);display(0,15,z);t1=v*65536+y; /計(jì)算脈沖寬度p=(t1/(2*t0)*360; /計(jì)算相位差d=p*100; /將計(jì)算結(jié)果逐位保存b5=d%10+48;b4=(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-) ;/長(zhǎng)延時(shí)函數(shù):longdelay()void longdelay(uint i)uint j;

16、for(;i0;i-) for(j=1000;j0;j-);/寄存器選擇信號(hào):set_rs()void set_rs(bit i)if(i=1) pin_rs = 1;else pin_rs = 0;/讀寫操作控制信號(hào):set_rw()void set_rw(bit i)if(i=1) pin_rw = 1;else pin_rw = 0;/使能信號(hào):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; /寫指令函

17、數(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 = 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)

18、;/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(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);short

19、delay(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_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);/檢測(cè)lcd控制器狀態(tài)函數(shù):l

20、cd_busy()/返回一bit數(shù):1 忙;0 閑bit lcd_busy()return(bit)(read_bf_ac() & 0x80);/在指定位置顯示字符函數(shù): display()/ x為行號(hào),y為列號(hào),/ data為顯示字符的碼字?jǐn)?shù)據(jù)void display(uint x, uint y, uint data1)uint temp; while(lcd_busy(); /若lcd控制器忙,則等待temp = y & 0x0f;x&= 0x01;if(x) temp |= 0x40;setddram_add(temp); /設(shè)置顯示位置write_data(data1);/lcd復(fù)位

21、函數(shù):lcd_reset()void lcd_reset()clearscreen();cursorreturn();5 電路仿真設(shè)計(jì)仿真電路總圖:圖7電路輸入方波信號(hào):圖8分別輸入兩路的方波的信號(hào),通過(guò)異或門控制相位差。單片機(jī)中斷控制:圖9int0和int1分別輸入兩路的方波的信號(hào),有相位差lcd顯示:圖10利用p0口輸出數(shù)據(jù),而p2.0、p2.1、p2.2控制lcd顯示器,從而得到頻率及相位差的顯示結(jié)果。6仿真結(jié)果分析仿真測(cè)試分析:(1) 輸入信號(hào)頻率:圖11仿真時(shí)輸入信號(hào)頻率可調(diào),并可通過(guò)數(shù)碼管測(cè)試得到輸入信號(hào)的頻率,通過(guò)異或門控制兩個(gè)輸入信號(hào)的相位差。(2) 輸入信號(hào)波形兩個(gè)輸入信號(hào)的

22、波形及相位差如圖所示。圖12(3) 輸出信號(hào)頻率及相位差圖137性能分析將測(cè)量的頻率和相位差列成表格,如下圖5-1所示實(shí)際頻率(hz)時(shí)間差(ms)測(cè)量頻率(hz)測(cè)量相位()頻率誤差(hz)相位誤差()10.52000.436.00.1025204.935.90.10.1350250.036.00041001100.036.00055000.2500.036.00068000.125800.636.00.60710000.11000.636.00.60820000.052000.936.00.90949000.024901.435.21.40.6 圖5-1如圖所示,當(dāng)方波信號(hào)頻率在0.5-5

23、hz時(shí),頻率誤差大約0.1hz,相位誤差大約0.1”;頻率在5-500hz時(shí),頻率和相位誤差大約為0;當(dāng)頻率大于500hz,頻率誤差較大,隨著頻率的升高,誤差也越大,相位誤差相對(duì)比較穩(wěn)定,一直比較小。由此可以得到如下結(jié)論:本次所設(shè)計(jì)的頻率/相位表適合測(cè)低頻信號(hào),最佳頻率范圍為5-500hz。8心得體會(huì)為期一周的單片機(jī)課程設(shè)計(jì)就要結(jié)束了,在這一周內(nèi),我遇到了很多問(wèn)題,也學(xué)到了很多東西。課程設(shè)計(jì)開始時(shí),由于沒有經(jīng)驗(yàn),不知如何下手,所以就去圖書管找了一些書看,盡管有許多的設(shè)計(jì)方案,可是總感覺自己還是有許多的東西弄不太清楚,于是就請(qǐng)教同學(xué)。他常做一些設(shè)計(jì),有一些經(jīng)驗(yàn)。大概知道設(shè)計(jì)的方向后,就自己上網(wǎng)查資料,到圖書館借閱一些相關(guān)書籍,然后自己就開始編寫程序進(jìn)行設(shè)計(jì)了。開始編寫程序的時(shí)候,最主要的就是要頭腦清醒,并且要對(duì)大概程序的布局,和每個(gè)功能的實(shí)現(xiàn)方法要有個(gè)邏輯。這樣在遇到?jīng)]有辦法實(shí)現(xiàn)的功能的時(shí)候,才能快速的解決問(wèn)題。我設(shè)計(jì)的是頻率/相位表,設(shè)計(jì)要求:輸入兩路方波信號(hào),測(cè)量

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論