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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(CT107D 测试程序3.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CT107D 测试程序3.docx

1、CT107D 测试程序3超声波测距定时器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 dis

2、p_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; /启动定时器0 ET0=1; /打开定时器溢出0中断 ET2=1; /打开定时器2溢出中断 CP_RL2=1; /定时器2进行捕获模式 EXEN2

3、=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

4、);/溢出标志 等待测量的结果,周期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_

5、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=le

6、doutflag; 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

7、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,outcom

8、eH,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; /

9、打开定时器0中断 ET1=1; /打开定时器1中断 EX0=0; /关闭外部中断 EA=1; /打开总中断0 void 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

10、=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_dat

11、a; 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

12、 =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_

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1