超声波测距仪源程序.doc_第1页
超声波测距仪源程序.doc_第2页
超声波测距仪源程序.doc_第3页
超声波测距仪源程序.doc_第4页
超声波测距仪源程序.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

以下是ZY1420语音模块的录音源程序清单:/*ZY1420语音模块的录音程序录音方法:开始工作后,按下K1键,根据设定的录音地址和时间开始录音。 放下K1键,本次录音结束。 再按下K1键,开始下次录音。录音顺序按预先设定的,用P1来送地址*地址:0x00 0x06 0x0c 0x12 0x18 ox24 ox2a 0x30 0x36 0x3c 0x42 ox48内容: 1 2 3 4 5 6 7 8 9 十 点 米时间: 0.5s*地址: 0x4e 0x66 0x7e 0x96内容: 危险距离 保持距离 安全距离 本次测量的距离为时间: 2s 2s 2s 2s*/#include#include#define uchar unsigned char#define uint unsigned intsbit REC=P24; /录音控制sbit PLAYE=P30; /控制触发录音sbit PLAYE=P31; /控制电平放音sbit Y=P23; /K1键extern unsigned long int distance;uchar addr;uint t;/*延时函数.延时为N*100ms*/void delay(uint n) reentrantuint t1,i,j;for(t1=1;t1=n;t1+)for(i=1;i=235;i+)for(j=1;j=60;j+);/*播放函数1*/void paly()delay(1);PLAYL=1;P1=addr; /播放起始地址为addr的内容。PLAYL=0; /PLAYL低电平放音。delay(t); /延时t*100ms。PLAYL=1;/*查地址和时间函数*/void find(uint n)switch(n)case 1:addr=0x00;t=5; break; /1case 2:addr=0x06;t=5; break; /2case 3:addr=0x0c;t=5; break; /3case 4:addr=0x12;t=5; break; /4case 5:addr=0x18;t=5; break; /5case 6:addr=0x1e;t=5; break; /6case 7:addr=0x24;t=5; break; /7case 8:addr=0x2a;t=5; break; /8case 9:addr=0x30;t=5; break; /9case 0:addr=0x36;t=5; break; /0case 11:addr=0x3c;t=5; break; /十case 12:addr=0x42;t=5; break; /点case 13:addr=0x48;t=5; break; /米case 14:addr=0x4e;t=20; break; /危险距离case 15:addr=0x66;t=20; break; /保持距离case 16:addr=0x7e;t=20; break; /安全距离case 17:addr=0x96;t=20; break; /测量结果为default:addr=0x00;t=00;/*主函数*/void speaker(void) reentrantuchar a5=0,0,0,0,0; /设定待播放的数值。find(17); /放测量结果为play();a0=distance/1000; /将数据写入。a1=(distance%1000)/100;a2=(distance%100)10;a3=distance%10;while(1) /放第一个数字。if(a0=0) break; /第一个数字是否为0?是则跳出循环。find(a0); /不是则放音。play();find(11); /放十。play();break;while(1) /放第二个数字。if(a1!=0) /若第二个数字不为0,则播放。find(a1);play();break;else if(a0=0) /如果第二个数字为0,判断第一个数是否为0。find(a1);play();break; /若第一个数也为0,则放0else break; /若第一个数不为0,则直接放点find(12); /放点play();while(1) /放第三个数字。 find(a2); /否则播放。 play(); break;while(1) /放第四个数字。find(a3); /否则播放。play();break;find(13); /放米play();以下是具有实时语音播放的超声波测距仪主程序清单。/*- 超声波测距主程序-*/#include#include#includetypedef unsigned char uchar;typedef unsigned int uint;sbit LED_AQ=P20;sbit LED_BC=P21;sbit LED_WX=P22;sbit LINE0=P27;sbit LINE1=P26;sbit LINE2=P25;sbit REV=P32;sbit PLAYE=P30; /控制触发放音。sbit PLAYE=P31; /控制电平放音。unsigned long int distance; /距离存储变量。int data temp; /室温存储变量。uint data temp_need;uchar code ready=Already to work;/* Function states*/extern void CJ_T(void); /超声波发生子程序。/LCD function statesextern void initial_lcd(void); /initial lcdextern void clr_distance(uchar i) reetrant; /clr display on lineextern void display_t(uchar l,uchar kind) reentrant; /write set charextern void display_st(uchar *buf) reetrant; /display alreadyextern void display2(void)reentrant; /显示室温。extern void write(uchar A,uchar din) reetrant;/DS18B20 funtion statesextern void tem_start(void); /start temperature coverextern void readtemp(void); /read temp/AT24C04 function statesextern void r_at24(void);extern void w_at24(void);extern unsigned long int distance;uchar addr;uint tt2;/* 超声波接收中中断子程序(INTO)*/void cj_r(void) interrupt 0TR0=0;ET0=0;EX0=0;EA0=0;/* 延时1ms子程序*/void delay 1ms(void)uchar i,j;for(i=0;i2;i+)for(j=0;j20;j+);/* 延时N*100ms子程序*/void delay(uint n) reentrantuint t1,i,j;for(t1=1;t1=n;t1+)for(i=1;i=235;i+)for(j=1;j=60;j+);/* 播放函数*/void play()delay(1);PLAYL=1;P1=addr; /播放起始地址为addr的内容。PLAYL=0; /PLAYL低电平放音。delay(tt2); /延时 t*100msPLAYL=1;/* 查地址和时间函数*/void find(uchar n)switch(n)case1: addr=0x00;tt2=2; break; /1case2: addr=0x06;tt2=2; break; /2case3: addr=0x0c;tt2=2; break; /3case4: addr=0x12;tt2=2; break; /4case5: addr=0x18;tt2=2; break; /5case6: addr=0x1e;tt2=2; break; /6case7: addr=0x24;tt2=2; break; /7case8: addr=0x2a;tt2=2; break; /8case9: addr=0x30;tt2=2; break; /9case0: addr=0x36;tt2=2; break; /0case11: addr=0x3c;tt2=2; break; /十case12: addr=0x42;tt2=2; break; /点case13: addr=0x48;tt2=2; break; /米case14: addr=0x4e;tt2=4; break; /危险距离case15: addr=0x66;tt2=4; break; /保持距离case16: addr=0x7e;tt2=5; break; /安全距离case17: addr=0x96;tt2=10; break; /测量结果为default:addr=0x00;tt2=00;/*/void sys_init(void)P0=0Xff;/p1=0xff;p2=0xff;TMOD=0X01; /定时器方式,16位。IT0=0; /低电平触发中断。/if(LINE1=0)/r_at24(); /read at24c04 上一次测量值。/*/void diatance(void)float vel;unsigned long int data timevalue;timevalue=TH0;timevalue=(timevalue8)|TL0;vel=331.4+0.061*temp;/distance=timevalue*vel*1.08507;distance=timevalue*vel*1.064;distance/=20000;/* 显示距离*/void display1(uchar choose)unsigned long int temp1=0;uint tem_need;uchar data buffer5;uchar data i;if(choose)temp1=distance;elsetemp1=tem_need; /display value oncebuffer0=temp1/1000;buffer1=(temp1%1000)/100;buffer2=(temp1%100)/10;buffer3=temp1%10;for(i=0;i4;1+)if(buffer0=0)buffer0=0x20;elsebufferi+=0x30;write(0,0x94);write(1,buffer0);write(1,buffer1);write(1,0x2e);write(1,buffer2);write(1,buffer3);write(1,0x4d);/*/void speaker(void)uchar data buffer5;find(16); /放测量结果为。play();buffer0=distance/1000;buffer1=(distance%1000)/100;buffer2=(distance%100)/10;buffer3=distance%10;while(1) /放第一个数字。if(buffer0=0) break; /第一个数字是否为0?是则跳出循环。find(buffer0); /不是则放音。Play();find(11); /放“十”play();break;while(1) /放第二个数字。if(buffer1!=0) /若第二个数字不为0,则播放。find(buffer1);play();break;else if(buffer0=0) /如果第二个数字为0,判断第一个数是否为0。find(buffer1);play();break; / 若第一个数也为0,则放“0”。else break ; /若第一个数不为0,则直接放“点”。find(12); /放“点”play();while(1) /放第三个数字。find(buffer2); /否则播放。Play();break;while(1) /放第四个数字。find(buffer3); /否则播放。Play();break;find(13); /放“米”。play;/* main主程序*/void main(void)unsigned long idata i;uchar j,m;for(j=0;j255;j+)for(m=0;m255;m+);sys_init();inital_lcd();display_st(ready); /Display Already to workwhile(1)waiting:while()LINE0)for(i=0;i=10;i+)delay 1ms();if(LINE0) goto waiting;LED_WX=1;LED_BC=1;LED_AQ=1;tem_start();i=14000; /delaywhile(-i);readtemp(); /读

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论