CT107D 測試程序3.docx_第1頁
CT107D 測試程序3.docx_第2頁
CT107D 測試程序3.docx_第3頁
CT107D 測試程序3.docx_第4頁
CT107D 測試程序3.docx_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

超聲波測距定時器2捕獲超聲波測距外部中斷捕獲溫度顯示 DS18B20超聲波測距定時器2捕獲#include /包括一個52標準內(nèi)核的頭文件#define BYTE unsigned char #define uint unsigned int#define ulong unsigned longsbit LS138A=P25;sbit LS138B=P26;sbit LS138C=P27;BYTE code disp_duan10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/數(shù)碼管0-9BYTE code disp_wei=0x01,0x02,0x04,0x08;BYTE ledout4,flag,i=0;bit succeed_flag; /測量成功標志ulong distance_data,sum;ulong distance_data_buff2;void sys_ini() LS138C=1;LS138B=0;LS138A=1;P0=0; /關(guān)蜂鳴器T2=0; /首先拉低脈沖輸入引腳TMOD=0x01; /定時器0,16位工作方式TR0=1; /啟動定時器0ET0=1; /打開定時器溢出0中斷 ET2=1; /打開定時器2溢出中斷CP_RL2=1; /定時器2進行捕獲模式EXEN2=1; /打開定時器2捕獲中斷EA=1; /打開總中斷void main(void) / 主程序 sys_ini();while(1) uint x=0; EA=0; T2=1; x+;x+;x+;x+;x+;x+;x+; /14us T2=0; /產(chǎn)生一個20us的脈沖,在Trig引腳 while(!T2EX); /等待T2EX回波引腳變高電平 succeed_flag=0; /清測量成功標志 EXEN2=1; /打開定時器2外部捕獲中斷 TH2=0; /定時器2清零 TL2=0; /定時器2清零 TF2=0; /溢出標志 TR2=1; /啟動定時器2 EA=1; while(!TF2);/溢出標志 等待測量的結(jié)果,周期65.535毫秒 TR2=0; /關(guān)閉定時器2 if(succeed_flag=1) distance_data=RCAP2H; /測量結(jié)果的高8位 distance_data=8; /放入16位的高8位 distance_data=distance_data|RCAP2L;/與低8位合并成為16位結(jié)果數(shù)據(jù) distance_data=distance_data *1000/5813; distance_data_buffi=distance_data;sum+=distance_data_buffi;i+;if(i=2) i=0; distance_data=sum/2; ledout0=(disp_duandistance_data%10000/1000)&0x7f; ledout1=disp_duandistance_data%1000/100; ledout2 =disp_duandistance_data%100/10; ledout3=disp_duandistance_data%10; sum=0; /*/定時器0中斷,用做顯示void timer0() interrupt 1 / 定時器0中斷是1號 TH0=0xfd; /寫入定時器0初始值 TL0=0x77; LS138C=1;LS138B=1;LS138A=1;P0=ledoutflag; LS138C=1;LS138B=1;LS138A=0;P0=disp_weiflag; flag+; if(flag=4) flag=0; /*/定時器1中斷,用做超聲波測距計時void timer2() interrupt 5 / 定時器0中斷是1號 if(TF2) TH2=0;TL2=0; else if(EXF2) succeed_flag=1; /測量成功 EXEN2=0; /關(guān)閉 EXF2=0; 超聲波測距外部中斷捕獲/*將P11與P32短接*/#include /包括一個52標準內(nèi)核的頭文件#define BYTE unsigned char #define uint unsigned int#define ulong unsigned longsbit Trig = P10; /產(chǎn)生脈沖引腳sbit Echo = P32; /回波引腳sbit test = P06; /測試用引腳sbit HC138A=P25;sbit HC138B=P26;sbit HC138C=P27;BYTE code disp_duan10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/數(shù)碼管0-9BYTE code disp_wei=0x01,0x02,0x04,0x08;BYTE temp,flag,outcomeH,outcomeL; /自定義寄存器BYTE ledout4,flag,i=0;bit succeed_flag; /測量成功標志ulong distance_data,sum;ulong distance_data_buff3;uint temp_data;void sys_ini() HC138C=1;HC138B=0;HC138A=1;P0=0; /關(guān)蜂鳴器 flag=0;test =0;Trig=0; /首先拉低脈沖輸入引腳TMOD=0x11; /定時器0,定時器1,16位工作方式TR0=1; /啟動定時器0 IT0=0; /由高電平變低電平,觸發(fā)外部中斷ET0=1; /打開定時器0中斷 ET1=1; /打開定時器1中斷EX0=0; /關(guān)閉外部中斷EA=1; /打開總中斷0void main(void) / 主程序 sys_ini();while(1) /程序循環(huán)uint x=0; EA=0; Trig=1; x+;x+;x+;x+;x+;x+;x+; /14us Trig=0; /產(chǎn)生一個20us的脈沖,在Trig引腳 while(!Echo); /等待Echo回波引腳變高電平 succeed_flag=0; /清測量成功標志 EX0=1; /打開外部中斷 TH1=0; /定時器1清零 TL1=0; /定時器1清零 TF1=0; /溢出標志 TR1=1; /啟動定時器1 EA=1; while(!TF1);/溢出標志 等待測量的結(jié)果,周期65.535毫秒(可用中斷實現(xiàn)) TR1=0; /關(guān)閉定時器1 EX0=0; /關(guān)閉外部中斷 if(succeed_flag=1) distance_data=outcomeH; /測量結(jié)果的高8位 distance_data=8; /放入16位的高8位 distance_data=distance_data|outcomeL;/與低8位合并成為16位結(jié)果數(shù)據(jù) distance_data=distance_data *1000/5813; distance_data_buffi=distance_data;sum+=distance_data_buffi;i+;if(i=3) i=0; distance_data=sum/3; ledout0=(disp_duandistance_data%10000/1000)&0x7f; ledout1=disp_duandistance_data%1000/100; ledout2 =disp_duandistance_data%100/10; ledout3=disp_duandistance_data%10; sum=0; /*/外部中斷0,用做判斷回波電平void INTO_() interrupt 0 / 外部中斷是0號 outcomeH =TH1; /取出定時器的值 outcomeL =TL1; /取出定時器的值 succeed_flag=1; /至成功測量的標志 EX0=0; /關(guān)閉外部中斷 /*/定時器0中斷,用做顯示void timer0() interrupt 1 / 定時器0中斷是1號 TH0=0xfd; /寫入定時器0初始值 TL0=0x77; HC138C=1;HC138B=1;HC138A=1;P0=ledoutflag; HC138C=1;HC138B=1;HC138A=0;P0=disp_weiflag; flag+; if(flag=4) flag=0; /*/定時器1中斷,用做超聲波測距計時void timer1() interrupt 3 / 定時器0中斷是1號TH1=0;TL1=0;溫度顯示 DS18B20#include#include#define uchar unsigned char#define uint unsigned intsbit DQ=P14;uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code smg_we=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;uchar code xiaotable=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9; /小數(shù)部分的二進制對應的實際溫度 四舍五入uchar temp,tflag1,tflag2,weflag,xiao;void delayus(uint x);void delayms(uint x);void init_ds18b20();void wr_ds18b20(uchar byt);uchar re_ds18b20();uchar re_temp(); void display(uchar we,uchar du);void delayus(uint x) /延時25+(x-1)*9while(x-); void delayms(uint x)uchar i;while(x-)for(i=0;i120;i+);void init_ds18b20()DQ=1;delayus(4); /52usDQ=0;delayus(80); / 延時大于480usDQ=1;delayus(4);void wr_ds18b20(uchar byt)uchar i;for(i=0;i=1;uchar re_ds18b20() uchar i,byt; for(i=0;i=1;DQ=1; if(DQ)byt|=0x80;delayus(4); return byt;uchar re_temp()uchar low,high;uchar temp;init_ds18b20();delayms(1);wr_ds18b20(0xcc);wr_ds18b20(0x44); /跳過ROM 溫度轉(zhuǎn)換init_ds18b20();delayms(1);wr_ds18b20(0xcc);wr_ds18b20(0xbe);/跳過ROM讀暫存器low=re_ds18b20();high=re_ds18b20();xiao=low&0x0f;temp= high4);return temp;void display(uchar we,uchar du)P0=0xff;P2|=0xe0;P2&=0x1f;P0=smg_dudu;P2|=0xe0;P2&=0x1f;P0=smg_wewe;P2|=0xc0;P2&=0x3f;void main()P0=0;P2=0xa0;P2=0;/關(guān)蜂鳴器TMOD=0x02;TH0=0X06;TL0=0X06;ET0=1;TR0=1;EA=1;while(1);void to() interrupt 1tflag1+;tflag2+;if(tfla

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論