超聲波程序(共24頁)_第1頁
超聲波程序(共24頁)_第2頁
超聲波程序(共24頁)_第3頁
超聲波程序(共24頁)_第4頁
超聲波程序(共24頁)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、超聲波程序(chngx)/*包含(bohn)頭文件*/#include#include#include#include#define NOP _nop_();_nop_();_nop_()#define uchar unsigned char#define uint unsigned int#define ufloat unsigned float#define ulong unsigned long/*常量(chngling)定義*/#definecircle0 xf2/循環(huán)播放#definestop_play 0 xfe/停止播放#definevo_00 xe0/音量1#definevo_

2、10 xe1/音量2#definevo_20 xe2/音量3#definevo_30 xe3/音量4#definevo_40 xe4/音量5#definevo_50 xe5/音量6#definevo_60 xe6/音量7#definevo_70 xe7/音量8/*位定義*/sbit RST=P20;sbit CS=P21;/片選端sbit CLK=P22;/時(shí)鐘sbit DAT=P23;/數(shù)據(jù)位sbit busy=P30;/忙信號(hào)/*函數(shù)名:void send_com(uchar add)/功能:發(fā)碼播放,add為語音地址*/sbit DQ = P26; /定義DS18B20端口DQuchar

3、 presence ;uchar temp_data2=0 x00,0 x00;uchar display5=0 x00,0 x00,0 x00,0 x00,0 x00;uchar code ditab16=0 x00,0 x01,0 x01,0 x02,0 x03,0 x03,0 x04,0 x04, 0 x05,0 x06,0 x06,0 x07,0 x08,0 x08,0 x09,0 x09;bit flash=0; /顯示(xinsh)開關(guān)標(biāo)記/*位定義(dngy)/*/sbit csb=P36;sbit green=P23;sbit yellow=P24;sbit red=P25;b

4、it flag_1=0;uchar vo_vo=0 xe7;uint speed=340;uint temp2;uint temp;#definenop_nop_()uint count=0;uchar high_time,low_time,flag=0,tc=2;uchar flag_2=0;uchar tc_say=0;uint dis,dis_49;#define uchar unsigned char#define uint unsigned int/*12864LCD引腳定義(dngy)*/sbit LCD_CS=P10; /寄存器選擇輸入sbit SID=P11; /液晶讀/寫控制

5、sbit SCLK=P12; /液晶使能控制#define delayNOP(); _nop_();_nop_();_nop_();_nop_();/*延時(shí)*/void delay_ms(uint t)unsigned char i;while(t-)for(i=123;i0;i-) ;void delay(int ms) while(ms-) uchar i; for(i=0;i246;i+) _nop_();_nop_();_nop_();_nop_(); void delay_tms(uint t) uchar k; while(t-) for(k=0; k125; k+) /*延時(shí)函數(shù)

6、(hnsh)200us*/void delay_lcd(int ms) uchar t; while(ms-) for(t=0; t20; t+) ; /*延時(shí)n個(gè)ms函數(shù)(hnsh)*/void delay_nms(uint ms) /delay ms function uchar i;while(ms-) for(i = 0; i 0;j-);/*發(fā)送(f sn)一個(gè)字節(jié)*/void sendbyte(uchar bbyte) uchar i; for(i=0;i8;i+) SID=bbyte&0 x80; /取出最高位 SCLK=1; _nop_(); _nop_(); SCLK=0;

7、bbyte=1; /左移 /*寫指令或數(shù)據(jù)函數(shù)*/void write(bit start, uchar ddata) uchar start_data,Hdata,Ldata; if(start=0) /11111,(0),(0),0 start_data=0 xf8; /寫指令(zhlng) else /11111,(0),(1),0 start_data=0 xfa; /寫數(shù)據(jù)(shj)Hdata=ddata&0 xf0; /取高四位(s wi) Ldata=(ddata4)&0 xf0; /取低四位 sendbyte(start_data); /發(fā)送起始信號(hào) delay_lcd(1);

8、 /延時(shí) sendbyte(Hdata); /發(fā)送高四位 delay_lcd(1); /延時(shí) sendbyte(Ldata); /發(fā)送低四位 delay_lcd(1); /延時(shí) /函數(shù)名:void lcd_pos(uchar X,uchar Y)/功能: 設(shè)定顯示位置*/void lcd_pos(uchar X,uchar Y) uchar pos; if (X=1) X=0 x80; elseif (X=2)X=0 x90;elseif (X=3)X=0 x88;elseif (X=4)X=0 x98; pos = X+Y ; write(0,pos);/lcd_wcmd(pos); /寫位

9、置(wi zhi)命令/*函數(shù)(hnsh)名:show(uint ss)/功能(gngnng):顯示測(cè)試數(shù)據(jù)*/void show(uint ss) uchar data_s2,i; data_s0=ss/10000; /數(shù)據(jù)的處理 if(data_s0=0) /測(cè)量數(shù)據(jù)的十米位為0 data_s0=0 x20; else data_s0=data_s+0 x30;/? data_s1=ss%10000/1000+0 x30; lcd_pos(3,5); /第三行,第七個(gè)(2*n+1)字節(jié)位置顯示 write(1,data_s1);/for(i=0;i2;i+) / /write(1,data

10、_si);/lcd_wdat(data_si); /顯示米位數(shù)據(jù) /delay(1);/ data_s0=ss%1000/100+0 x30; data_s1=ss%100/10+0 x30; lcd_pos(3,6); for(i=0;i2;i+) write(1,data_si);/lcd_wdat(data_si); /顯示分米和厘米位數(shù)據(jù) delay(1); write(1,ss%10+0 x30);/lcd_wdat(ss%10+0 x30); /顯示(xinsh)毫米位數(shù)據(jù) delay(1);/*程序功能:ST7920控制芯片(漢字庫),串口模式。12864 圖片與文字(wnz)顯

11、示*/uchar code DIS1 = 超聲波測(cè)距中.;uchar code DIS3 = 距障礙物: . m;uchar code DIS4 = 測(cè)距情況(qngkung): 安全 ;uchar code DIS5 = 測(cè)距情況: 請(qǐng)保持;uchar code DIS6 = 測(cè)距情況: 危險(xiǎn)!;uchar code DIS8 = ;uchar code DIS9 = 超聲波倒車測(cè)距儀;uchar code DIS10= V1.0 2008.12.4 ;uchar code point4= .;uchar code space4= ;/*初始化LCD*/void lcd_init() del

12、ay_lcd(10); /延時(shí)等待LCM進(jìn)入工作狀態(tài) LCD_CS=1; /片選 高電平有效 write(0,0 x30); /基本指令操作 write(0,0 x0c); /顯示打開,光標(biāo)關(guān),反白關(guān) write(0,0 x01); /清屏,將DDRAM的地址計(jì)數(shù)器歸零 write(0,0 x06);/*圖形顯示*/void photodisplay(uchar *bmp) uchar i,j; write(0,0 x34); /寫數(shù)據(jù)時(shí),關(guān)閉圖形顯示 for(i=0;i32;i+) write(0,0 x80+i); /先寫入水平(shupng)坐標(biāo)值 write(0,0 x80); /寫入

13、垂直(chuzh)坐標(biāo)值 for(j=0;j16;j+) /再寫入兩個(gè)(lin )8位元的數(shù)據(jù) write(1,*bmp+); delay_lcd(1); for(i=0;i32;i+) write(0,0 x80+i); write(0,0 x88); for(j=0;j16;j+)write(1,*bmp+);delay_lcd(1); write(0,0 x36); /寫完數(shù)據(jù),開圖形顯示/*函數(shù)名:void clr_screen()/功能: LCD清屏*/void clr_screen() write(0,0 x34);/lcd_wcmd(0 x34); /擴(kuò)充指令操作 delay(5

14、); write(0,0 x30);/lcd_wcmd(0 x30); /基本指令操作 delay(5); write(0,0 x01);/lcd_wcmd(0 x01); /清屏 delay(5);/*函數(shù)名:void displayall()/功能:主顯示函數(shù)*/void displayall() uchar i; delay(2); lcd_init(); /初始化LCD lcd_pos(2,0); /設(shè)置顯示(xinsh)位置為第二行 for(i=0;i16;i+) write(1,DIS9i);/lcd_wdat(DIS9i); delay(30); lcd_pos(3,0); /設(shè)

15、置顯示(xinsh)位置為第三行 for(i=0;i16;i+) write(1,DIS10i);/lcd_wdat(DIS10i); delay(30); delay(1000); clr_screen(); /清屏 delay(500); clr_screen();/上電,等待(dngdi)穩(wěn)定 lcd_pos(1,0); /設(shè)置顯示位置為第一行 for(i=0;i16;i+) write(1,DIS1i);/lcd_wdat(DIS1i); delay(2); lcd_pos(3,0); /設(shè)置顯示位置為第三行 for(i=0;i16;i+) write(1,DIS3i);/lcd_wd

16、at(DIS3i); delay(2); lcd_pos(4,0); /設(shè)置顯示位置為第四行 for(i=0;i16;i+) write(1,DIS8i);/lcd_wdat(DIS8i); delay(2); delay(1000);/*函數(shù)(hnsh)名:void show_one(uchar DIS8,uchar hh)/功能:設(shè)置(shzh)行顯示*/void show_one(uchar DIS16,uchar hh)uchar i; lcd_pos(hh,0); /設(shè)置(shzh)顯示位置行 for(i=0;i16;i+) write(1,DISi);/lcd_wdat(DISi)

17、; delay(1); void send_com(uchar add)uchar i;RST=1;RST=0;delay_nms(3);RST=1;delay_nms(20);CS=0;delay_nms(5);for(i=0;i1;CS=1;/*函數(shù)(hnsh)名:void sound(uint soud)/功能:播報(bào)(b bo)測(cè)距距離*/void sound(uint soud)uchar i,j,k,l;send_com(vo_vo);while(!busy);i=soud/1000;j=soud%1000/100;k=soud%100/10;l=soud%10;send_com(i

18、);delay_nms(30);while(!busy);send_com(10);/播放(b fn)“點(diǎn)”delay_nms(30);while(!busy);send_com(j);delay_nms(30);while(!busy);send_com(k);delay_nms(30);while(!busy);if(l!=0)send_com(l);delay_nms(30);while(!busy);send_com(11);/播放米delay_nms(30);while(!busy);/*/函數(shù)(hnsh)名:void soundplay(uint dis_say)/功能(gngnn

19、g):播放“測(cè)量(cling)距離”*/void soundplay(uint dis_say)if(busy!=0)sound(dis_say);/播放“測(cè)量距離”void Delay_1(uint num) /延時(shí)函數(shù)while( -num );/*函數(shù)名:Init_DS18B20/功能:DS18B20初始化*/Init_DS18B20(void)/初始化ds1820 DQ = 1; /DQ復(fù)位 Delay_1(8); /稍做延時(shí) DQ = 0; /單片機(jī)將DQ拉低 Delay_1(90); /精確延時(shí) 大于 480us DQ = 1; /拉高總線 Delay_1(8); presence

20、 = DQ; /如果=0則初始化成功 =1則初始化失敗 Delay_1(100); DQ = 1; return(presence); /返回信號(hào),0=presence,1= no presence/*函數(shù)名:ReadOneChar(void)/功能:從18B20中讀一個(gè)字節(jié)數(shù)據(jù)*/ReadOneChar(void)/讀一個(gè)字節(jié)unsigned char i = 0;unsigned char dat = 0;for (i = 8; i 0; i-) DQ = 0; / 給脈沖(michng)信號(hào) dat = 1; DQ = 1; / 給脈沖(michng)信號(hào) if(DQ) dat |= 0

21、 x80; Delay_1(4); return (dat);/*函數(shù)(hnsh)名:WriteOneChar(uchar dat)/功能:寫入一個(gè)字節(jié)數(shù)據(jù)*/WriteOneChar(uchar dat)/寫一個(gè)字節(jié)unsigned char i = 0; for (i = 8; i 0; i-) DQ = 0; DQ = dat&0 x01; Delay_1(5); DQ = 1; dat=1; /*函數(shù)名:Read_Temperature(void)/功能:讀取溫度*/Read_Temperature(void)/讀取溫度Init_DS18B20(); if(presence=1) fl

22、ash=1; /DS18B20不正常 else flash=0; WriteOneChar(0 xCC); / 跳過讀序號(hào)列號(hào)的操作(cozu) WriteOneChar(0 x44); / 啟動(dòng)溫度(wnd)轉(zhuǎn)換 Init_DS18B20(); WriteOneChar(0 xCC); /跳過讀序號(hào)列號(hào)的操作(cozu) WriteOneChar(0 xBE); /讀取溫度寄存器 temp_data0 = ReadOneChar(); /溫度低8位 temp_data1 = ReadOneChar(); /溫度高8位/*函數(shù)名:Disp_Temperature()/功能:顯示溫度*/Disp

23、_Temperature()/顯示溫度unsigned char n=0, word16=環(huán)境溫度: ;show_one(word,4);write(1,wordn); */ lcd_pos(4,5); /設(shè)置顯示位置為第三行 write(1,display3+0 x30);/lcd_wdat(display3+0 x30); /溫度值百位不顯示elsewrite(1,0 x20);/lcd_wdat(0 x20); */ delay(1);if(display3=0)&(display2=0) write(1,0 x20);/lcd_wdat(0 x20);elsewrite(1,displ

24、ay2+0 x30);/lcd_wdat(display2+0 x30); delay(1);write(1,display1+0 x30);/lcd_wdat(display1+0 x30);delay(1);write(1,.);/lcd_wdat(.);delay(1);write(1,display0+0 x30);/lcd_wdat(display0+0 x30);delay(1);/*函數(shù)(hnsh)名:void temp_all(void)/功能:進(jìn)行溫度(wnd)補(bǔ)償*/void temp_all() Read_Temperature();display4=temp_data0

25、&0 x0f;display0=ditabdisplay4; /查表得小數(shù)位的值display4=(temp_data0&0 xf0)4)|(temp_data1&0 x0f)50)/溫度高于50度,則不修正flash=1;if(flash=0)&(flag_1=0)Disp_Temperature();if(flash=0) /溫度傳感器正常檢測(cè)到溫度并溫度小于50度speed=(uint)(331+(display4*61+display0*6+45)/100);/*函數(shù)名:uint Distance_count()/功能:距離計(jì)算函數(shù)*/ Distance_count() float t

26、emp1; ulong tt; temp2=high_time*256+low_time; temp=high_time*256+low_time; tt=(ulong)temp*344 ; temp1=(float)(tt/2000.0); temp=(uint)(temp1); temp=(uint)(temp1+0.5); / return temp;/*函數(shù)(hnsh)名:uint do_s(uint dis_1)/功能:距離(jl)補(bǔ)償*/uint do_s(uint dis_1)uchar n;if(dis_170)&(dis_10;i-)csb=!csb;nop;nop;nop;

27、nop;nop;nop;nop;nop;nop;csb=1;delay_ms(1);EX1=1;delay_ms(30);if(flag=1)Distance_count(); dis=temp;flag=0;else dis=0;void tran1()uchar i;TH0=0;TL0=0;TR0=1;for(i=20;i0;i-)csb=!csb;nop;nop;nop;nop;nop;nop;nop;nop;nop;csb=1;delay_ms(2);EX1=1;delay_ms(50);if(flag=1)Distance_count(); dis=temp;flag=0; else

28、 dis=0; void tran2()uchar i;TH0=0;TL0=0;TR0=1;for(i=16;i0;i-)csb=!csb;nop;nop;nop;nop;nop;nop;nop;nop;nop;csb=1;delay_ms(20);EX1=1;delay_ms(150);if(flag=1)Distance_count(); dis=temp;flag=0; else dis=0; /*函數(shù)(hnsh)名:void dis_all(uint dis_s)/功能:控制LED指示燈和語音(yyn)播報(bào)*/void dis_all(uint dis_s)show(dis_s); if(dis_s2000) show_one(DIS4,2); green=0;red=1;yellow=1; if(flag_2!=1) flag_2=1; else if(dis_s500)&(dis_s100)&(dis_s500) show_one(DIS6,2); green=1;red=0;yellow=1; if(flag_2!=3) flag_2=3; else show_one(DIS8,2); yellow=1; if(dis_s100) red=!red;green=1; else green=!green;red=1; /*函數(shù)(hnsh)名:void

溫馨提示

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