第10章利用CCP模塊設(shè)計頻率計5程序設(shè)計_第1頁
第10章利用CCP模塊設(shè)計頻率計5程序設(shè)計_第2頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第10章利用CCP模塊設(shè)計頻率計10.5程序設(shè)計10.5.4程序清單#include<pic.h>#include<stdio.h>#include/本程序利用constchar<math.h>CCP1模塊實現(xiàn)一個“簡易數(shù)字頻率計”的功能table11=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0xFF;/不帶小數(shù)點的顯示段碼表constchartable011=0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xFF;/帶小數(shù)點的顯示段碼表bank

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

3、,2);unsignedchars4;/定義一個顯示緩沖數(shù)組intT5,uo;doubleRE5;doublepuad5;/spi方式顯示初始化子程序voidSPIINIT()PIR1=0;SSPCON=0x30;SSPSTAT=0xC0;設(shè)置SPI的控制方式,允許SSP方式,并且時鐘下降沿發(fā)送,與"74HC595,當其/SCLk從低到高跳變時,串行輸入寄存器"的特點相對應(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è)置為輸出,以輸出顯示鎖存信號/首先設(shè)置CCP1捕捉每個脈沖的上升沿/關(guān)閉TMR1震蕩器/外圍中斷允許(此時總中斷關(guān)閉)/允許CCP1中斷/設(shè)置RC2為輸入/為保證測試精度,測試5個脈沖的參數(shù)后/求平均值,每個脈沖都要捕捉其上升、

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

6、TW=k)data=tableOdata;/第二位需要顯示小數(shù)點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超過4,貝又從1計起if(data=0x02)COUNTER=COUNTER-1;/若按下S11鍵,則COUNTER減1if(C0UNTER<1)COUNTER=0x04;/若COUNTER小于1,則又循環(huán)從4計起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鍵,則建立標志FLAG2/若按下S12鍵,則清除標志FLAG2/清除中斷標志/存儲1次捕捉值/把CCP1模塊改變成捕捉相反的脈沖沿/求得5個周期的值/強制轉(zhuǎn)換成雙精度數(shù)求得平均周期,單位為卩s/先求周期1000000,得頻率,/周期值求倒數(shù),再乘以/單位為HZ/脈寬處理子程序voidP

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

11、;/鍵盤掃描if(FLAG1=1)keyserve();/若確實有鍵按下,則調(diào)用鍵服務(wù)程序if(FLAG2=0)continue;/如果沒有按下確定鍵,則終止此次循環(huán),/繼續(xù)進行測量/如果按下了確定鍵,則進行下面的數(shù)值轉(zhuǎn)換和顯示工作if(COUNTER=0x01)FREQUENCY();/COUNTER=1,則需要進行頻率處理if(COUNTER=0x02)PERIOD();/COUNTER=2,則需要進行周期處理if(COUNTER=0x03)OCCUPATIONAL();/COUNTER=3,則需要進行占空比處理if(COUNTER=0x04)PULSE();/COUNTER=4,則需要進行脈寬處理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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論