关键词不能为空

当前您在: 主页 > 英语 >

超声波测距C程序

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-09 07:56
tags:

-

2021年2月9日发(作者:随意)



//


晶振


=8M


//MCU=STC10F04XE


//P0.0-P0.6


共阳数码管引脚



//Trig



= P1^0


//Echo



= P3^2


#include






//


包括一个


52


标准内核的头文件



#define uchar unsigned char //


定义一下方便使用



#define uint



unsignedint


#define ulong unsigned long


//*********************** ************************


sfr



CLK_DIV = 0x97; //


STC


单片机定义


,

< p>
系统时钟分频
























//< /p>



STC


单片机的


IO


口设置地址定义



sfr




P0M1




= 0X93;


sfr




P0M0




= 0X94;


sfr




P1M1




= 0X91;


sfr




P1M0




= 0X92;


sfr


P2M1




= 0X95;


sfr


P2M0




= 0X96;


//****************** *****************************


sbit Trig



= P1^0; //


产生脉冲引脚



sbit Echo



= P3^2; //


回波引脚



sbit test



= P1^1; //


测试用引脚




uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB 0,0x99,0x92,0x82,0xF8,0x80,0x90};//


数码管< /p>


0-9


uint distance[4];



//


测距接收缓冲区



ucharge,shi,bai,temp,flag,outcomeH,outcomeL,i;



//


自定义寄存器



bit succeed_flag;



//


测量成功标志



//********


函数声明



void conversion(uinttemp_data);


void delay_20us();


//void pai_xu();



void main(void)




//


主程序



{



uintdistance_data,a,b;


uchar CONT_1;








CLK_DIV=0X03; //


系统时钟为


1/8


晶振(


pdf-45


页 )








P0M1 = 0;




//


将< /p>


io


口设置为推挽输出








P1M1 = 0;







P2M1 = 0;







P0M0 = 0XFF;







P1M0 = 0XFF;







P2M0 = 0XFF;


i=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;










//


打开总中断


0






while(1)










//


程序循环




{




EA=0;








Trig=1;










delay_20us();










Trig=0;










//


产生 一个


20us


的脉冲,在


Trig


引脚











while(Echo==0); //


等待


Echo


回波引脚变高电平< /p>




succeed_flag=0; //


清测量成功标志









EX0=1;











//


打开外部中断







TH1=0;











//< /p>


定时器


1


清零











TL1=0;











//< /p>


定时器


1


清零









TF1=0;











//










TR1=1;











//


启动定时器


1





EA=1;









while(TH1 < 30);//

等待测量的结果,周期


65.535


毫秒(可用中断实现)







TR1=0;











//


关闭定时器


1










EX0=0;











//


关闭外部中断




if(succeed_flag==1)








{






distance_data=outcomeH;

















//


测量 结果的高


8




distance_data<<=8;




















//


放入


1 6


位的高


8






distance_data=d istance_data|outcomeL;//


与低


8< /p>


位合并成为


16


位结果数据



distance_data*=12;



















//


因为定时器默认为


12


分频



distance_data/=58;




















//


微秒 的单位除以


58


等于厘米












}







































//< /p>


为什么除以


58


等于厘米,




Y


< br>=



X



*344



/2












































// X



=




2*Y


米)


/344 ==

< p>


X



=0.0058* Y




==


》 厘米


=


微秒


/58



if(succeed_flag==0)







{

-


-


-


-


-


-


-


-



本文更新与2021-02-09 07:56,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/619884.html

超声波测距C程序的相关文章