




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
超声波测距定时器2捕获超声波测距外部中断捕获温度显示 DS18B20超声波测距定时器2捕获#include /包括一个52标准内核的头文件#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;/数码管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; /关蜂鸣器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; /产生一个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);/溢出标志 等待测量的结果,周期65.535毫秒 TR2=0; /关闭定时器2 if(succeed_flag=1) distance_data=RCAP2H; /测量结果的高8位 distance_data=8; /放入16位的高8位 distance_data=distance_data|RCAP2L;/与低8位合并成为16位结果数据 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; /关闭 EXF2=0; 超声波测距外部中断捕获/*将P11与P32短接*/#include /包括一个52标准内核的头文件#define BYTE unsigned char #define uint unsigned int#define ulong unsigned longsbit Trig = P10; /产生脉冲引脚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;/数码管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; /关蜂鸣器 flag=0;test =0;Trig=0; /首先拉低脉冲输入引脚TMOD=0x11; /定时器0,定时器1,16位工作方式TR0=1; /启动定时器0 IT0=0; /由高电平变低电平,触发外部中断ET0=1; /打开定时器0中断 ET1=1; /打开定时器1中断EX0=0; /关闭外部中断EA=1; /打开总中断0void main(void) / 主程序 sys_ini();while(1) /程序循环uint x=0; EA=0; Trig=1; x+;x+;x+;x+;x+;x+;x+; /14us Trig=0; /产生一个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);/溢出标志 等待测量的结果,周期65.535毫秒(可用中断实现) TR1=0; /关闭定时器1 EX0=0; /关闭外部中断 if(succeed_flag=1) distance_data=outcomeH; /测量结果的高8位 distance_data=8; /放入16位的高8位 distance_data=distance_data|outcomeL;/与低8位合并成为16位结果数据 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; /关闭外部中断 /*/定时器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; /小数部分的二进制对应的实际温度 四舍五入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 温度转换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;/关蜂鸣器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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年烘焙师初级考试必-备知识点梳理
- 2025年医学行业招聘面试预测题解析及备考指南
- 2025年计算机等级考试题库及解析含编程与设计
- 申请书课件教学课件
- 2025年物资供应链安全管理面试技巧与模拟题
- 创意英语教学课件
- 包耳旁教学课件
- 创意教学课件制作教程
- 江苏苏州2020-2024年中考满分作文67篇
- 儿童教学互动课件制作
- ABS风口供货合同范本
- 2025年燃气经营企业从业人员专业考试历年参考题库含答案详解(5套)
- 2025年食品安全法试题带答案
- 植物生物技术概论
- 食品委托加工协议书范文6篇
- 充电桩检定培训课件
- 2025年黑龙江省哈尔滨市南岗区事业单位招聘考试卫生类医学检验专业知识试卷
- 人社法律法规知识竞赛考试题及答案
- 2025年青海省中考英语试卷真题(含答案及解析)
- NB/T 11636-2024煤矿用芳纶织物芯阻燃输送带
- 2025贵州航空产业城集团股份有限公司旗下子公司贵州安立航空材料有限公司面向社会招聘61人笔试历年参考题库附带答案详解
评论
0/150
提交评论