第10章利用CCP模塊設(shè)計(jì)頻率計(jì)5程序設(shè)計(jì)_第1頁(yè)
第10章利用CCP模塊設(shè)計(jì)頻率計(jì)5程序設(shè)計(jì)_第2頁(yè)
已閱讀5頁(yè),還剩4頁(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、第10章利用CCP模塊設(shè)計(jì)頻率計(jì)10.5程序設(shè)計(jì)10.5.4程序清單#include<pic.h>#include<stdio.h>#include/本程序利用constchar<math.h>CCP1模塊實(shí)現(xiàn)一個(gè)“簡(jiǎn)易數(shù)字頻率計(jì)”的功能table11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0xFF;/不帶小數(shù)點(diǎn)的顯示段碼表constchartable011=0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xFF;/帶小數(shù)點(diǎn)的顯示段碼表bank

2、3intcp1z11;/定義一個(gè)數(shù)組,用于存放各次的捕捉值unioncp1inty1;unsignedcharcp1e2;cp1u;/定義一個(gè)共用體unsignedcharCOUNTW,COUNT;/測(cè)量脈沖個(gè)數(shù)寄存器unsignedcharCOUNTER,data,k;unsignedcharFLAG0XEF;#defineFLAGIT(adr,bit)(unsigned)(&adr)*8+(bit)/絕對(duì)尋址位操作指令staticbitFLAG1FLAGIT(FLAG,0);staticbitFLAG2FLAGIT(FLAG,1);staticbitFLAG3FLAGIT(FLAG

3、,2);unsignedchars4;/定義一個(gè)顯示緩沖數(shù)組intT5,uo;doubleRE5;doublepuad5;/spi方式顯示初始化子程序voidSPIINIT()PIR1=0;SSPCON=0x30;SSPSTAT=0xC0;設(shè)置SPI的控制方式,允許SSP方式,并且時(shí)鐘下降沿發(fā)送,與"74HC595,當(dāng)其/SCLk從低到高跳變時(shí),串行輸入寄存器"的特點(diǎn)相對(duì)應(yīng)TRISC=0xD7;TRISA5=0;FLAG1=0;FLAG2=0;FLAG3=0;COUNTER=0X01;/CCP模塊工作于捕捉方式初始化子程序voidccpint()CCP1CON=0X05;T

4、1CON=0X00;PEIE=1;CCP1IE=1;TRISC2=1;/系統(tǒng)其它部分初始化子程序voidinitial()COUNT=0X0B;TRISB1=0;TRISB2=0;TRISB4=1;TRISB5=1;RB1=0;RB2=0;/SPI傳送數(shù)據(jù)子程序voidSPILED(data)SSPBUF=data;do/SDO引腳為輸出,SCK引腳為輸出/RA5引腳設(shè)置為輸出,以輸出顯示鎖存信號(hào)/首先設(shè)置CCP1捕捉每個(gè)脈沖的上升沿/關(guān)閉TMR1震蕩器/外圍中斷允許(此時(shí)總中斷關(guān)閉)/允許CCP1中斷/設(shè)置RC2為輸入/為保證測(cè)試精度,測(cè)試5個(gè)脈沖的參數(shù)后/求平均值,每個(gè)脈沖都要捕捉其上升、

5、下降沿,/故需要有11次中斷/設(shè)置與鍵盤有關(guān)的各口的輸入、輸出方式/建立鍵盤掃描的初始條件/啟動(dòng)發(fā)送while(SSPIF=0);連續(xù)發(fā)送4個(gè)DARK,使顯示好看一些/最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成/以上確定是哪個(gè)鍵按下/恢復(fù)PORTB的值若按下S9鍵,貝UCOUNTER力口1FLAG1=1;/若有鍵按下,則建立標(biāo)志FLAG1/若無(wú)鍵按下,貝清除標(biāo)志FLAG1SSPIF=0;/顯示子程序,顯示4位數(shù)voiddisplay()RA5=0;/準(zhǔn)備鎖存for(COUNTW=0;COUNTW<4;COUNTW+)data=sCOUNTW;data=data&0x0F;if(COUN

6、TW=k)data=tableOdata;/第二位需要顯示小數(shù)點(diǎn)elsedata=tabledata;SPILED(data);/發(fā)送顯示段碼for(COUNTW=0;COUNTW<4;COUNTW+)data=0xFF;SPILED(data);RA5=1;/鍵盤掃描子程序voidkeyscan()if(RB4=0)|(RB5=0)elseFLAG1=0;/鍵服務(wù)子程序voidkeyserve()PORTB=0XFD;if(RB5=0)data=0X01;if(RB4=0)data=0X03;PORTB=0XFB;if(RB5=0)data=0X02;if(RB4=0)data=0X0

7、4;PORTB=0X00;if(data=0x01)COUNTER=COUNTER+1;if(COUNTER>4)COUNTER=0x01;/若COUNTER超過(guò)4,貝又從1計(jì)起if(data=0x02)COUNTER=COUNTER-1;/若按下S11鍵,則COUNTER減1if(C0UNTER<1)COUNTER=0x04;/若COUNTER小于1,則又循環(huán)從4計(jì)起if(data=0x03)FLAG2=1;if(data=0x04)FLAG2=0;/中斷服務(wù)程序voidinterruptcp1int(void)CCP1IF=0;1e0=CCPR1L;1e1=CCPR1H;cp1

8、zdata=cp1u.y1;CCP1CON=CCP1CONA0X01;data+;COUNT-;/周期處理子程序voidPERIOD()T5=cp1z10-cp1z0;RE5=(double)T5;RE5=RE5/5;/頻率處理子程序voidFREQUENCY()PERIOD();RE5=/RE5;/若按下S10鍵,則建立標(biāo)志FLAG2/若按下S12鍵,則清除標(biāo)志FLAG2/清除中斷標(biāo)志/存儲(chǔ)1次捕捉值/把CCP1模塊改變成捕捉相反的脈沖沿/求得5個(gè)周期的值/強(qiáng)制轉(zhuǎn)換成雙精度數(shù)求得平均周期,單位為卩s/先求周期1000000,得頻率,/周期值求倒數(shù),再乘以/單位為HZ/脈寬處理子程序voidP

9、ULSE()intpu;for(data=0,puad5=0;data<=9;data+)/求得5個(gè)脈寬的和值/求得平均脈寬/先求脈寬/暫存脈寬值/再求周期/求得占空比/SPI方式顯示初始化/CCP模塊工作于捕捉方式初始化/系統(tǒng)其它部分初始化/第一個(gè)存儲(chǔ)COUNTER的值/后面的LED將顯示"DARK"/調(diào)用顯示子程序/鍵盤掃描/存儲(chǔ)數(shù)組指針賦初值/定時(shí)器1清0/清除CCP1的中斷標(biāo)志,以免中斷一打開(kāi)就進(jìn)入/中斷/中斷允許/定時(shí)器1開(kāi)pu=cp1zdata+1-cp1zdata;puad5=(double)pu+puad5;data=data+2;RE5=puad5/

10、5;/占空比處理子程序voidOCCUPATIONAL()PULSE();puad5=RE5;PERIOD();RE5=puad5/RE5;/主程序main()SPIINIT();while(1)ccpint();initial();if(FLAG2=0)s0=COUNTER;s1=0X0A;s2=0X0A;s3=0X0A;display();keyscan();data=0x00;TMR1H=0;TMR1L=0;CCP1IF=0;ei();TMR1ON=1;while(1)if(COUNT=0)break;/等待中斷次數(shù)結(jié)束di();/禁止中斷TMR1ON=0;/關(guān)閉定時(shí)器keyscan()

11、;/鍵盤掃描if(FLAG1=1)keyserve();/若確實(shí)有鍵按下,則調(diào)用鍵服務(wù)程序if(FLAG2=0)continue;/如果沒(méi)有按下確定鍵,則終止此次循環(huán),/繼續(xù)進(jìn)行測(cè)量/如果按下了確定鍵,則進(jìn)行下面的數(shù)值轉(zhuǎn)換和顯示工作if(COUNTER=0x01)FREQUENCY();/COUNTER=1,則需要進(jìn)行頻率處理if(COUNTER=0x02)PERIOD();/COUNTER=2,則需要進(jìn)行周期處理if(COUNTER=0x03)OCCUPATIONAL();/COUNTER=3,則需要進(jìn)行占空比處理if(COUNTER=0x04)PULSE();/COUNTER=4,則需要進(jìn)行脈寬處理k=5;if(RE5<1)RE5=RE5*1000;k=0x00;elseif(RE5<10)RE5=RE5*1000;k=0x00;elseif(RE5<100)RE5=RE5*100;k=0x01;elseif(RE5<1000)RE5=RE5*10;k=0x02;elseRE5=RE5;uo=(int

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論