ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:47.06KB ,
资源ID:2139071      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2139071.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(具有实时语音播报功能的超声波测距仪.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

具有实时语音播报功能的超声波测距仪.docx

1、具有实时语音播报功能的超声波测距仪 具有实时语音播报的超声波测距仪的源程序 #include #include sbit cs=P35; sbit sid=P36; sbit sclk=P37; sbit fang=P33; / squart wave sbit ensp=P25; sbit dr=P24; /dangerous distance led sbit hy=P23; /hold distance led sbit sg=P22; /safe distance led sbit dpl=P21; /drop power led sbit re=P20; /receive led s

2、bit vc=P30; /voltage compare sbit dq=P31; /18B20 data bit sbit hold=P26; /hold sbit play=P27; /play /* bit ff; unsigned char flag; unsigned char pf=3; /显示警告标志 unsigned char soubuf6; unsigned char disbufs6; /distance memory unsigned char disbuft8; /temperature memory unsigned char timeh,timel; /time

3、memory unsigned char temp2; /temp1温度的高位与temp0低位 unsigned char code word9=当前距离:; unsigned char code wordt5=温度:; unsigned char code wordd8=危险距离; unsigned char code wordh8=保持距离; unsigned char code words8=安全距离; unsigned char code wordpower12=电源电压正常; unsigned char code worddrop12=请您更换电池; unsigned char co

4、de check13=系统正在自检!; unsigned char code sound10=74,10,16,22,30,37,43,51,58,67; /声音地址 点:92;米: 83/* void lcdbusy(void); void sendbyte(unsigned char ds); void wrlcd(unsigned char sta,ks); void ex0(void); void computers(unsigned int v); void display(void); void send(void); void intlcd(void); unsigned int

5、 computerv(void); void de750ms(void); void init18b20(void); void wr18b20(unsigned char ks); unsigned read18b20(void); void gettemper(void); void computert(void); void checkself(void); void speak(void); /* void init18b20(void) / 初始化18B20 unsigned char i; dq=1; _nop_(); dq=0; for(i=255;i0;i-); dq=1; f

6、or(i=30;i0;i-); for(i=120;i0;i-) if(dq=0) flag=1;break;/led=0; for(i=100;i0;i-); dq=1; /* void wr18b20(unsigned char ks) unsigned char i,j; for(i=8;i0;i-) dq=0; for(j=6;j0;j-) ; _nop_(); dq=(bit)(ks&0x01); for(j=24;j0;j-); dq=1; ks=ks1; /* unsigned read18b20(void) /先读出的是低位后读出的是高位,读一个字节子程序 unsigned c

7、har i,j,tdata; tdata=0; for(j=8;j0;j-) tdata=tdata1; dq=0; for(i=6;i0;i-); _nop_(); dq=1; for(i=6;i0;i-); if(dq=1) tdata=tdata|0x80; for(i=28;i0;i-); dq=1; return(tdata); /* void gettemper(void) init18b20(); if(flag=1) /跳过ROM匹配 wr18b20(0xcc); /发出温度转换命令 wr18b20(0x44); flag=0; de750ms(); init18b20();

8、if(flag=1) wr18b20(0xcc); /读温度命令 wr18b20(0xbe); temp0=read18b20(); temp1=read18b20(); flag=0; else flag=0; /*/ void computert(void) /温度处理子程序,temp1温度的高位与temp0低位 unsigned char aa,i; unsigned int cc; aa=temp1&0xf8; if(aa=0xf8) disbuft5=0x2d; /处理负温度 temp0=temp0; temp1=temp1; if(temp0=0xff) temp1=temp1+1

9、; temp0=temp0+1; aa=(temp1&0x07)4); disbuft4=aa/10; disbuft3=(aa%10); aa=temp0&0x0f; cc=(int)(aa*625); disbuft3=cc/10000+disbuft3; if (disbuft3=10) disbuft3=disbuft3&0xff;disbuft4=disbuft4+1; cc=cc%10000; disbuft2=cc/1000; cc=cc%1000; disbuft1=cc/100; cc=cc%100; disbuft0=cc/10; else aa=(temp1&0x07)4

10、); disbuft0=aa/10; disbuft1=aa%10; aa=temp0&0x0f; cc=(int)(aa*625); disbuft1=cc/10000+disbuft1; if (disbuft1=10) disbuft1=0;disbuft0=disbuft0+1; cc=cc%10000; disbuft3=cc/1000; cc=cc%1000; disbuft4=cc/100; cc=cc%100; disbuft5=cc/10; disbuft6=cc%10; for(i=0;i7;i+) disbufti=disbufti|0x30; disbuft2=0x2e

11、; /* unsigned int computerv(void) unsigned char a; unsigned int v; temp1=temp1&0x07; a=temp14); a=a*6; v=3320+a; return(v); /* void de750ms(void) /750ms unsigned char i,j,k; for(i=6;i0;i-) for(j=255;j0;j-) for(k=255;k0;k-); /* void lcdbusy(void) unsigned char i,c; while(1) sendbyte(0xfc); sclk=1; c=

12、sid; sclk=0; for(i=0;i15;i+) sclk=1; sclk=0; if(c=0) break; /* void sendbyte(unsigned char ds) /向LCD中发送一个字节 unsigned char i; for(i=0;i8;i+) sclk=1; sid=ds&0x80; / if(ds&0x80)=0x80) sid=1; / else sid=0; sclk=0; ds=ds1; /* void wrlcd(unsigned char sta,ks) /向LCD中写入一个起始字节与一个数据 unsigned char hdata,ldata;

13、 hdata=ks&0xf0; ks=ks&0x0f; ks=ks4; ldata=ks; cs=1; lcdbusy(); sendbyte(sta); sendbyte(hdata); sendbyte(ldata); cs=0; /* void ex0(void) interrupt 0 using 0 EX0=0; TR0=0; timeh=TH0; timel=TL0; TH0=0; TL0=0; ff=1; re=0; /* void computers(unsigned int v) unsigned long s; unsigned int ss; unsigned char

14、i; v=v/2; s=timeh; s=s8; s=s+timel; s=s*v; ss=s/100000; disbufs0=s/100000000; s=s%100000000; disbufs1=s/10000000; s=s%10000000; disbufs3=s/1000000; s=s%1000000; disbufs4=s/100000; soubuf0=sounddisbufs0; soubuf1=sounddisbufs1; soubuf2=92; soubuf3=sounddisbufs3; soubuf4=sounddisbufs4; soubuf5=83; for(

15、i=0;i5;i+) disbufsi=disbufsi|0x30; disbufs2=0x2e; disbufs5=0x6d; if(ss200&ss300) pf=2; else pf=3; /* void display(void) unsigned char i; wrlcd(0xf8,0x80); for(i=0;i9;i+) wrlcd(0xfa,wordi); for(i=0;i6;i+) wrlcd(0xfa,disbufsi); wrlcd(0xf8,0x92); for(i=0;i8;i+) if(pf=0) wrlcd(0xfa,worddi);dr=0;sg=1;hy=

16、1; if(pf=1) wrlcd(0xfa,wordhi);hy=0;dr=1;sg=1; if(pf=2) wrlcd(0xfa,wordsi);sg=0;dr=1;hy=1; wrlcd(0xf8,0x89); for(i=0;i12;i+) if (vc=1) wrlcd(0xfa,wordpoweri);dpl=1; if (vc=0) wrlcd(0xfa,worddropi);dpl=0; wrlcd(0xf8,0x98); for(i=0;i5;i+) wrlcd(0xfa,wordti); for(i=0;i8;i+) wrlcd(0xfa,disbufti); wrlcd(

17、0xf8,0x9e); wrlcd(0xfa,0xa1); wrlcd(0xfa,0xe6); /* void speak(void) unsigned char i,j,k,h; for(i=1;i0;j-) for(k=255;k0;k-) for(h=250;h0;h-); play=1; for(j=190;j0;j-) for(k=255;k0;k-); /* void send(void) unsigned char i,j,k; EX0=0; TH0=0; TL0=0; re=1; for(i=20;i0;i-) fang=1; for(j=5;j0;j-); fang=0; f

18、or(j=4;j0;j-); TR0=1; for(j=2;j0;j-) /延时消除余震3ms 3,255 for(i=255;i0;i-); IE0=0; EX0=1; for(k=2;k0;k-) /等待中断回波 for(i=255;i0;i-) for(j=255;j0;j-); /* void intlcd(void) /初始化LCD /delay40(); de750ms(); wrlcd(0xf8,0x30); /功能设定 wrlcd(0xf8,0x30); /功能设定 wrlcd(0xf8,0x30); /功能设定 wrlcd(0xf8,0x0c); /显示状态 wrlcd(0x

19、f8,0x06); /显示右移 /* void checkself(void) unsigned char i; unsigned char j,k; P1=97; P2=0x00; wrlcd(0xf8,0x81); for(i=0;i13;i+) wrlcd(0xfa,checki); for(i=0;i20;i+) for(j=0;j255;j+) for(k=0;k255;k+); play=1; P2=0x7f; /* void main(void) TMOD=0x01; TH0=0; TL0=0; EA=1; EX0=0; IT0=1; IE0=0; ff=0; P2=0xff; intlcd(); checkself(); while(1) ss: send(); if(ff=0) goto ss; ff=0; gettemper(); computert(); re=1; computers(computerv(); display(); if(ensp=0) speak(); hl: if(hold=0) goto hl; /*

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2