簡易低頻數(shù)字相位測量儀_第1頁
簡易低頻數(shù)字相位測量儀_第2頁
簡易低頻數(shù)字相位測量儀_第3頁
簡易低頻數(shù)字相位測量儀_第4頁
簡易低頻數(shù)字相位測量儀_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、簡易低頻數(shù)字相位測量儀基于飛思卡爾XS128芯片院系:機電學(xué)院設(shè)計人員: 班級:08自動化二班學(xué)號:08210030 指導(dǎo)老師:汪萍一課題目的(1)熟練掌握電子系統(tǒng)的設(shè)計方法(2)設(shè)計并實現(xiàn)一個簡易的低頻數(shù)字相位測量儀表二.設(shè)計內(nèi)容將兩路1KHz的正弦波信號分別送到兩個過零比較器,使雙極性的正弦波編程單極性的方波。若兩路正弦波信號存在相位差,那么兩路方波也必然存在相同的相位差值。將兩路方波存在的相位差對應(yīng)的時間間隔作為單片機的計數(shù)時間T1,即可得到兩路正弦波的相位差,相位差=T1/T*360度。T=1/f=0.0001S三.所用器材(1)飛思卡爾MC9S12XS128單片機(2)Codewar

2、rior IDE軟件(3)龍丘單片機芯片配套BDM下載器(4)OCMJ4X8C 液晶LCD模塊(5)5V電源模塊若干(含電池) (6)導(dǎo)線若干四.參考資料(1)XS128單片機技術(shù)手冊(2)OCMJ4X8C液晶說明書(3)Codewarrior軟件基礎(chǔ)使用說明五設(shè)計步驟1.方案論證方案一:將被測量輸入信號通過模擬鑒相器鑒相,將模擬鑒相器的輸出電壓進行A/D轉(zhuǎn)換,由單片機處理后顯示數(shù)據(jù)。單片機低通濾波 /A/D轉(zhuǎn)換鑒相器方案二:將被測量信號輸入波形經(jīng)比較器整形后,利用門電路鑒相,在通過RC電路積分后進行A/D轉(zhuǎn)換。根據(jù)相位差與電平成正比的關(guān)系,由單片機經(jīng)過查表或簡單的計算處理后得到相位差值。方案

3、三:鑒相部分與方案二相同。將整形出來的兩路數(shù)字信號相與后,形成新的數(shù)字信號,用單片機測量出其波形寬度,經(jīng)過簡單的換算后,即可以得出要測量的相位差值。經(jīng)過比較,方案一中被測信號的輸出電壓幅值變化比較大,難以滿足鑒相器的輸入要求。方案二中,積分電路輸出波動會很大,相位精度不能保證。方案三的相位精度受頻率影響小,容易控制,穩(wěn)定性高,可以實現(xiàn)較高的精度,因此采用此方案。其系統(tǒng)框圖如下:過零比較器整形電路MC9S12XS128單片機OCMJ4X8C LCD顯示U1U2AB2.基本原理兩路1KHz的正弦波信號U1、U2經(jīng)過過零比較器后變成單極性的方波信號A、B,若U1、U2存在相位差,則A、B也存在相位差

4、,為了測得相位差的值,我們可以將A、B經(jīng)過數(shù)字邏輯電路處理,將B信號取反后與A信號相與,則可得到相位脈波,通過測定相位脈波和A、B任意一脈波的長度,相比較則可得相角脈波。測定脈波長度采用計數(shù)器計數(shù)方式,當(dāng)相位脈波上升沿(下降沿)到來時讀此時計數(shù)器的值設(shè)為phase_last,等到下降沿(上升沿)到來時讀此時的計數(shù)器值設(shè)為phase_now,將兩者相減即得相位脈波長度計數(shù)值。測A、B頻率可同理得之,只是,A、B的頻率需要兩個同樣的上升沿或下降沿,而相位脈波是兩個相鄰的觸發(fā)沿。假設(shè)去經(jīng)過數(shù)字邏輯電路處理后的相位脈波(設(shè)為C),再去一路脈波A,通過單片機采集脈波長度計數(shù)值,經(jīng)過數(shù)學(xué)處理后得到相應(yīng)的相

5、角度數(shù)和頻率。具體如下:將C接單片機的T0口,通過T0口的輸入捕捉功能(即脈波產(chǎn)生跳變時觸發(fā))和累加器功能(計數(shù)),當(dāng)C的任一觸發(fā)沿(上升沿或下降沿)到來時,讀此時的累加器值,等到下一個觸發(fā)沿到來時,讀取第二次值,兩者相減即可得計數(shù)數(shù)值。測頻率的計數(shù)值同理得之(注意必須是同一個相鄰的上升沿或下降沿)。3.硬件電路設(shè)計(1)5V穩(wěn)壓電源電路采用LM2940 5V穩(wěn)壓芯片,配合電容濾波,從VCC和GND兩端即可得到比較穩(wěn)定的5V電源(2)正弦整流成方波電路采用一個單門限電壓比較器(如圖3.4所示),當(dāng)輸入信號每通過一次零時觸發(fā)器的輸出就要產(chǎn)生一次突然的變化。當(dāng)輸入正弦波時,每過一次零,比較器的輸出

6、端將產(chǎn)生一次電壓跳變,它的正負向幅度均受到供電電源的限制,因此輸出電壓波形是具有正負極性的方波。為了使電路的抗干擾能力得到提升,我們在單門限電壓比較器的基礎(chǔ)上引入了正反饋網(wǎng)絡(luò)。由于正反饋的作用,它的門限帶電壓隨著輸出電壓U0的變化而改變,因此提高了抗干擾能力。(3)單片機及外圍接口電路單片機供給經(jīng)過lm2940穩(wěn)壓芯片后的5V電壓,由7.2V的電池給LM2940提供電源。單片機上P1口接T0口,P7口接T1口,實現(xiàn)生成的PWM給輸入捕捉和計數(shù)端口T。單片機的基本I/O口PORTB(8位口)接液晶的DB0DB7口,液晶的VDD和PSW相連,VDD、LEDA分別接5V正極,VSS、LEDK接5V負

7、極??傮w電路完工。4程序設(shè)計(1)鎖相環(huán)void pll(void) REFDV=0x01;/PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) SYNR =0x03;/ =2*16M*4/2=64M while (!(CRGFLG & 0x08); /等待時鐘頻率已穩(wěn)定鎖相環(huán)頻率已鎖定 CLKSEL=0x80;/BUSCLK=pllclk/2=32M經(jīng)過鎖相環(huán)后,始終周期超頻到32M,使得計數(shù)值更精確。(2)輸入捕捉部分/*捕捉脈波初始化*/void vinterruptsinit(void) TSCR1=0x80;/TIMER 定時器禁止 TIE =0x00;/禁

8、止中斷 TCTL3=0x00;/EDGnB EDGnA 1表示上升沿, 2表示下降沿, 3表示任何沿 TCTL4=0x0b;/通道0任何沿觸發(fā),通道1下降沿觸發(fā) TIOS =0x00;/每一位對應(yīng)通道的: 0輸入捕捉,1輸出比較 TIE_C1I=1;/通道1中斷使能 TIE_C0I=1;/通道0中斷使能/通道0 計數(shù)相位差/通道1 計數(shù)頻率/*/(3)通道0、1中斷服務(wù)程序/*計數(shù)相位差對應(yīng)的計數(shù)值*/*通道0中斷服務(wù)程序*/#pragma CODE_SEG _NEAR_SEG NON_BANKEDvoid interrupt 8 Port0_interrupt(void) TFLG1_C0F

9、=1; /清除中斷標志 if(Counter_t%2=0) phase_last = TC0; /TC0為對應(yīng)0通道的累加器的值 else phase_now = TC0; phase = phase_now - phase_last; /求差值求相角對應(yīng)的計數(shù)值/phase =(phase_now - phase_last + phase)/2;/通過求均值,可得到比較精確的相位差脈波計數(shù)值,然單片機內(nèi)部產(chǎn)生的PWM波很穩(wěn)定,故未采用這樣做,實際中可如此 Counter_t+; /通過余2算法,計算相鄰兩個計數(shù)觸發(fā)沿下的計數(shù)值,此程序中計數(shù)的值為 /非相位差的計數(shù)值,在主程序中通過公式換算后

10、轉(zhuǎn)化為要求的角度 /Counter_t為與余2算法配合使用的變量 #pragma CODE_SEG DEFAULT /*/ /*計數(shù)頻率對應(yīng)的計數(shù)值*/*通道1中斷服務(wù)程序*/ #pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt 9 Port1_interrupt(void) TFLG1_C1F=1; /中斷標志清0 if(Counter_f%2=0) frequency_last = TC1;/TC1為對應(yīng)的1通道的累加器的值 else frequency_now = TC1; frequency = frequency_now - fr

11、equency_last;/求差值計算頻率對應(yīng)的計數(shù)值 /frequency = (frequency_now - frequency_last+frequency)/2; /通過求均值,可得到比較精確的頻率計數(shù)值,然單片機內(nèi)部產(chǎn)生的PWM波很穩(wěn)定,故未采用這樣做,實際中可如此 Counter_f+; /通過余2算法,計算相鄰兩個計數(shù)觸發(fā)沿下的計數(shù)值,此程序中計數(shù)的值為 /非相位差的計數(shù)值,在主程序中通過公式換算后轉(zhuǎn)化為要求的角度 /Counter_f為與余2算法配合使用的變量 #pragma CODE_SEG DEFAULT(4)主程序/*主函數(shù)*/void main(void) Disab

12、leInterrupts;/關(guān)總中斷 LCD_ini();/LCD液晶初始化 pll();/鎖相環(huán)初始化 pwm_ini();/PWM初始化 vinterruptsinit();/輸入捕捉初始化 EnableInterrupts;/開總中斷 for(;) phase_transformation =360-(double)phase/frequency*360;/計數(shù)值對應(yīng)的相角度數(shù)轉(zhuǎn)換公式 frequency_transformation = frequency/32; /計數(shù)值對應(yīng)的實際頻率數(shù)轉(zhuǎn)換公式 LCD_control(phase_transformation,LCD_positio

13、n_phase); /液晶顯示相角 LCD_control(frequency_transformation,LCD_position_frequency); /液晶顯示頻率 delay(5000); /* wait forever */ /* please make sure that you never leave this function */5.調(diào)試與仿真(1)由于硬件電路無法實時得到,采用MC9S12XS128單片機上的PWM模塊等效代替實際電路中產(chǎn)生的方波。PWM模塊初始化及相關(guān)設(shè)置如下:/*PWM模塊*/void pwm_ini(void) PWME=0x00;/禁止PWM P

14、WMPRCLK=0x22;/預(yù)分頻 CH_A=CH_B=BUS_FREQ/4=32M/4=8 PWMSCLA=4;/CH_SA=8M/(4*2)=1M (PWM 0 1 4 5 選擇A SA為時鐘源) PWMSCLB=4;/CH_SB=8M/(4*2)=1M (PWM 2 3 6 7 選擇B SB為時鐘源) PWMCTL_CON01=1;/PWM 0 1級聯(lián)(舵機1) PWMCLK_PCLK1=1;/PWM1(01級聯(lián)) 使用SA PWMCTL_CON67=1; /PWM 6 7級聯(lián) PWMCLK_PCLK7=1; /PWM7 使用SB PWMPOL=0xff;/極性選擇 PWM07初始均為高

15、電平 PWMCAE=0x00;/左對齊 PWMPER01=1000;/頻率=CH_SA/1000=1KHz PWMDTY01=300;/占空比=PWMDTY01/PWMPER01 對應(yīng)相角=PWMDTY01/PWMPER01*360 PWMPER67=1000;/產(chǎn)生頻率為CH_SB/1000=1KHz的方波 PWMDTY67=500;/即對應(yīng)占空比為50% PWME_PWME1=1;/使能PWM01 PWME_PWME7=1;/使能PWM67/*/通過PWM模塊可生成比較標準的1KHz 的方波,通過通道的級聯(lián)可以時間計數(shù)值的精確。PWM01通道級聯(lián)后產(chǎn)生的PWM波用于等效代替經(jīng)過整

16、流電路后生成的相角脈波,PWM67通道級聯(lián)后產(chǎn)生的1 KHz方波用于測頻率計數(shù)值。輸入捕捉部分,沒來一次有效的觸發(fā)沿都會觸發(fā)中斷,在中斷中讀取累加器的值。(2)Codewarrior 在線實時仿真通過Codewarrior軟件自帶的實時仿真功能可得如下表所示對應(yīng)關(guān)系,如下:PWMDTY01100200250300400理論上對應(yīng)的相角/度367290108144Phase(仿真的相角/度)367290108144Frequency(仿真的頻率/赫茲)10001000100010001000由圖中的對應(yīng)關(guān)系可知程序可以很好地實現(xiàn)對相角的檢測。(3)LCD液晶仿真源代碼部分如下a:變量定義部分/*

17、LCD模塊*/#define LCDData PORTB /lcd顯示數(shù)據(jù)傳送口#define LCDData_D DDRB /數(shù)據(jù)口方向寄存器#define LCDCtrl_D DDRM /控制口方向寄存器#define RS PTM_PTM2 /lcd寄存器選擇信號PTM2#define RW PTM_PTM3 /讀寫信號接PTM3#define E PTM_PTM5 /lcd使能信號接PTM5#define LCD_position_phase 0x84 /液晶顯示位置坐標#define LCD_position_frequency 0x94 uchar const table1=&qu

18、ot;相位度數(shù)"uchar const table2="頻率數(shù)值"uint num;uint LCD3;uint Data_lcd=0;char temp4;/*/b:LCD驅(qū)動部分/*LCD模塊驅(qū)動*/void delay(uint i) /延時程序 while(-i); void read_busy() uchar busy; do RS=0; RW=1; E=1; busy=PORTB&0x80; E=0; while(busy);void write_lcd_command(uchar value) /read_busy(); delay(300)

19、; RS=0; RW=0;/delay(200); LCDData =value; E=1;/delay(200); E=0;/delay(600);void write_lcd_data(uchar value) /read_busy(); delay(300); RS=1; RW=0;/delay(200); LCDData =value; E=1;/delay(600); E=0;void LCDInit(void) delay(5000); write_lcd_command(0x30); /DL=1: 8-BIT 控制接口; RE=0: 基本指令集 delay(5000); writ

20、e_lcd_command(0x01); /清除顯示,即清屏 delay(5000); write_lcd_command(0x06); /進入點設(shè)定,I/D=1光標右移,AC自動加1; SH=0:整體顯示不移動 delay(5000); write_lcd_command(0x0c); /D=1:整體顯示ON; C=1:光標顯示OFF; B=0:光標位置不反白閃爍(即整體顯示、關(guān)游標、不反白)void int_char(uint LCD_lcd) LCD2=LCD_lcd%10; LCD1=(unsigned int)(LCD_lcd%100-LCD2)/10); LCD0=(unsigne

21、d int)(LCD_lcd/100);void LCD_ini(void) delay(10000); LCDData=0x00; LCDData_D = LCDCtrl_D = 0xFF; LCDInit(); delay(100); LCDInit(); delay(100); LCDInit(); delay(100); LCDInit(); delay(100); write_lcd_command(0x80); /在DDRAM地址0x80處顯示"相角度數(shù)" for(num=0;num<8;num+) write_lcd_data(table1num); d

22、elay(10); write_lcd_command(0x90); /在DDRAM地址0x90處顯示"頻率數(shù)值" for(num=0;num<8;num+) write_lcd_data(table2num); delay(10); delay(10000); delay(10000); void LCD_control(uint LCD_data,uint LCD_position) sprintf(temp,"%d",LCD_data); if(LCD_data>=0&&LCD_data<10) write_lcd

23、_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼就是"0x33",液晶模塊說明書最后一個表可查詢ASCII碼 delay(500); write_lcd_data(temp0); delay(10); write_lcd_data(0x20); /消零 delay(10); if(LCD_data>=10&&LCD_data<100) write_lcd_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼

24、就是"0x33",液晶模塊說明書最后一個表可查詢ASCII碼 delay(500); for(num=0;num<2;num+) write_lcd_data(tempnum); delay(10); write_lcd_data(0x20);/消零 delay(10); if(LCD_data>=100&&LCD_data<1000) write_lcd_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼就是"0x33",液晶模塊說明書最后一個表可查

25、詢ASCII碼 delay(500); for(num=0;num<3;num+) write_lcd_data(tempnum); delay(10); write_lcd_data(0x20); /消零 delay(10); if(LCD_data>=1000&&LCD_data<10000) write_lcd_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼就是"0x33",液晶模塊說明書最后一個表可查詢ASCII碼 delay(500); for(num=0;

26、num<4;num+) write_lcd_data(tempnum); delay(10); write_lcd_data(0x20); /消零 delay(10); / delay(5000); / delay(5000); /*以上為LCD模塊程序*/其中LCD_init()函數(shù)為液晶初始化部分,LCD_control()函數(shù)為主要執(zhí)行部分,在主程序中調(diào)用,顯示相應(yīng)的數(shù)值。相關(guān)結(jié)果如下:當(dāng)PWMDTY01=100時,即理論相角為36度時仿真結(jié)果當(dāng)PWMDTY1=250時,即理論相角為90度時的仿真結(jié)果當(dāng)PWMDTY01=300時,即對應(yīng)的理論相角為108度時的仿真結(jié)果六、相關(guān)分析(

27、1)首先由于硬件電路沒有實際做,故可能出現(xiàn)的波形不穩(wěn)定因素?zé)o法實時得知但是單片機讀取的是整形后的方波,只要跳變存在,單片機便可方便讀出。(2)對于測相角對應(yīng)的計數(shù)值時,采用的是余2算法,計得是相鄰兩個觸發(fā)沿的計數(shù)值,沒有采用累加求均值算法,在波形良好的情況下結(jié)果很好,在雜波較多電路中可能精度降低(3)對于相角計數(shù),由于是任意沿觸發(fā),我們無法得知是從上升沿先觸發(fā)中斷還是下降沿先觸發(fā)(相角互補),實驗中采用理論值和測定值之間的比較,得到轉(zhuǎn)換公式,得到正確的相角值。(4)由于經(jīng)過超頻,計數(shù)值偏大,如果處理不好會出現(xiàn)溢出現(xiàn)象導(dǎo)致實驗出錯,本實驗中對1KHz波形測定效果良好,如果頻率過大或過小會出現(xiàn)不可

28、避免的錯誤。七、總結(jié)心得自己寫寫吧,這就不幫了八、實驗標準程序(含液晶部分)#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */#include <mc9s12xs128.h>#include "stdio.h" /程序中使用了sprintf函數(shù),必須聲明其頭文件/*LCD模塊*/#define LCDData PORTB /lcd顯示數(shù)據(jù)傳送口#define L

29、CDData_D DDRB /數(shù)據(jù)口方向寄存器#define LCDCtrl_D DDRM /控制口方向寄存器#define RS PTM_PTM2 /lcd寄存器選擇信號PTM2#define RW PTM_PTM3 /讀寫信號接PTM3#define E PTM_PTM5 /lcd使能信號接PTM5#define LCD_position_phase 0x84 /液晶顯示位置坐標#define LCD_position_frequency 0x94 uchar const table1="相位度數(shù)"uchar const table2="頻率數(shù)值"u

30、char const table3="自動化二班"uchar const table4="童二寶制作"uint num;uint LCD3;uint Data_lcd=0;char temp4;/*/uchar Counter_f=0;/為余2算法提供比較值,脈波uchar Counter_t=0;/同上,頻率uint phase_last=0; /兩個方波經(jīng)過門電路處理后相位差脈波,初始時任一沿觸發(fā)時累加器計數(shù)值uint phase_now=0; /兩個方波經(jīng)過門電路處理后相位差脈波,下一個觸發(fā)沿時累加器計數(shù)值uint phase=0; /兩個方波經(jīng)過

31、門電路處理后相位差脈波所對應(yīng)的計數(shù)值=phase_now-phase_lastuint frequency_last=0;/計算所給方波頻率初始時任一下降沿時的累加器計數(shù)值uint frequency_now=0;/計算所給方波頻率下一個下降沿時的累加器計數(shù)值uint frequency=0;/方波頻率所對應(yīng)的計數(shù)值=frequency_now-frequency_lastuint phase_transformation=0; /轉(zhuǎn)換為標準相位差(單位度數(shù),精確到0.01)uint frequency_transformation=0; /轉(zhuǎn)換為標準頻率數(shù)(單位Hz,精確到1)/*鎖相環(huán)模塊

32、*/void pll(void) REFDV=0x01;/PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) SYNR =0x03;/ =2*16M*4/2=64M while (!(CRGFLG & 0x08); /等待時鐘頻率已穩(wěn)定鎖相環(huán)頻率已鎖定 CLKSEL=0x80;/BUSCLK=pllclk/2=32M/*PWM模塊*/void pwm_ini(void) PWME=0x00;/禁止PWM PWMPRCLK=0x22;/預(yù)分頻 CH_A=CH_B=BUS_FREQ/4=32M/4=8 PWMSCLA=4;/CH_SA=8M/(4*2)=1M (PWM 0

33、 1 4 5 選擇A SA為時鐘源) PWMSCLB=4;/CH_SB=8M/(4*2)=1M (PWM 2 3 6 7 選擇B SB為時鐘源) PWMCTL_CON01=1;/PWM 0 1級聯(lián)(舵機1) PWMCLK_PCLK1=1;/PWM1(01級聯(lián)) 使用SA PWMCTL_CON67=1; /PWM 6 7級聯(lián) PWMCLK_PCLK7=1; /PWM7 使用SB PWMPOL=0xff;/極性選擇 PWM07初始均為高電平 PWMCAE=0x00;/左對齊 PWMPER01=1000;/頻率=CH_SA/1000=1KHz PWMDTY01=100;/占空比=PWMDTY01/P

34、WMPER01 對應(yīng)相角=PWMDTY01/PWMPER01*360 PWMPER67=1000;/產(chǎn)生頻率為CH_SB/1000=1KHz的方波 PWMDTY67=500;/即對應(yīng)占空比為50% PWME_PWME1=1;/使能PWM01 PWME_PWME7=1;/使能PWM67/*/*捕捉脈波初始化*/void vinterruptsinit(void) TSCR1=0x80;/TIMER 定時器禁止 TIE =0x00;/禁止中斷 TCTL3=0x00;/EDGnB EDGnA 1表示上升沿, 2表示下降沿, 3表示任何沿 TCTL4=0x0b;/通道0任何沿觸發(fā),通道1下降沿觸發(fā) T

35、IOS =0x00;/每一位對應(yīng)通道的: 0輸入捕捉,1輸出比較 TIE_C1I=1;/通道1中斷禁止 TIE_C0I=1;/通道0中斷禁止/通道0 計數(shù)相位差/通道1 計數(shù)頻率/*/*LCD模塊驅(qū)動*/void delay(uint i) /延時程序 while(-i); void read_busy() uchar busy; do RS=0; RW=1; E=1; busy=PORTB&0x80; E=0; while(busy);void write_lcd_command(uchar value) /read_busy(); delay(300); RS=0; RW=0;/d

36、elay(200); LCDData =value; E=1;/delay(200); E=0;/delay(600);void write_lcd_data(uchar value) /read_busy(); delay(300); RS=1; RW=0;/delay(200); LCDData =value; E=1;/delay(600); E=0;void LCDInit(void) delay(5000); write_lcd_command(0x30); /DL=1: 8-BIT 控制接口; RE=0: 基本指令集 delay(5000); write_lcd_command(0

37、x01); /清除顯示,即清屏 delay(5000); write_lcd_command(0x06); /進入點設(shè)定,I/D=1光標右移,AC自動加1; SH=0:整體顯示不移動 delay(5000); write_lcd_command(0x0c); /D=1:整體顯示ON; C=1:光標顯示OFF; B=0:光標位置不反白閃爍(即整體顯示、關(guān)游標、不反白)void int_char(uint LCD_lcd) LCD2=LCD_lcd%10; LCD1=(unsigned int)(LCD_lcd%100-LCD2)/10); LCD0=(unsigned int)(LCD_lcd/

38、100);void LCD_ini(void) delay(10000); LCDData=0x00; LCDData_D = LCDCtrl_D = 0xFF; LCDInit(); delay(100); LCDInit(); delay(100); LCDInit(); delay(100); LCDInit(); delay(100); write_lcd_command(0x80); /在DDRAM地址0x80處顯示"相角度數(shù)" for(num=0;num<8;num+) write_lcd_data(table1num); delay(10); write

39、_lcd_command(0x90); /在DDRAM地址0x90處顯示"頻率數(shù)值" for(num=0;num<8;num+) write_lcd_data(table2num); delay(10); write_lcd_command(0x88); /在DDRAM地址0x90處顯示"自動化二班" for(num=0;num<10;num+) write_lcd_data(table3num); delay(10); write_lcd_command(0x98); /在DDRAM地址0x90處顯示"童二寶制作" fo

40、r(num=0;num<10;num+) write_lcd_data(table4num); delay(10); delay(10000); delay(10000); void LCD_control(uint LCD_data,uint LCD_position) sprintf(temp,"%d",LCD_data); if(LCD_data>=0&&LCD_data<10) write_lcd_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼就是"

41、0x33",液晶模塊說明書最后一個表可查詢ASCII碼 delay(500); write_lcd_data(temp0); delay(10); write_lcd_data(0x20); /消零 delay(10); if(LCD_data>=10&&LCD_data<100) write_lcd_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼就是"0x33",液晶模塊說明書最后一個表可查詢ASCII碼 delay(500); for(num=0;num<

42、;2;num+) write_lcd_data(tempnum); delay(10); write_lcd_data(0x20);/消零 delay(10); if(LCD_data>=100&&LCD_data<1000) write_lcd_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼就是"0x33",液晶模塊說明書最后一個表可查詢ASCII碼 delay(500); for(num=0;num<3;num+) write_lcd_data(tempnum);

43、 delay(10); write_lcd_data(0x20); /消零 delay(10); if(LCD_data>=1000&&LCD_data<10000) write_lcd_command(LCD_position);/當(dāng)i=0時,本句及下句式顯示數(shù)字"0",其ASCII碼就是"0x33",液晶模塊說明書最后一個表可查詢ASCII碼 delay(500); for(num=0;num<4;num+) write_lcd_data(tempnum); delay(10); write_lcd_data(0x20); /消零 delay(10); / delay(5000); / delay(5000); /*以上為LCD模塊程序*/*主函數(shù)*/void main(void) DisableInterrup

溫馨提示

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

評論

0/150

提交評論