蓝桥杯单片机学习过程记录(二十七)超声波模块

蓝桥杯单片机学习过程记录(二十七)超声波模块

超声波模块的学习,未验证。

/*
-------------------
超声波模块
没模块未验证
2020.3.16
-------------------
*/
#include<STC15F2K60S2.H>
#include<intrins.h>
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
sbit TX=P1^0;
sbit RX=P1^1;
bit flag_wave;
unsigned int t_0,distance;
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char seg[]={0xc0,0xa4,0xf9,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
void allinit();
void display_12(yi,er);
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void Timer0Init(void);
void Timer1Init(void);
void send_wave();
unsigned char rect_wave();
void main(){
	allinit();
	Timer0Init();Timer1Init();EA=1;ET0=1;
	yi=10;er=10;san=10;si=10;wu=10;liu=10;qi=10;ba=10;
	while(1){
		//每隔200ms采集一次超声波
		if(flag_wave==0) distance=rect_wave(); 		
		yi=flag_wave;er=10;san=10;si=10;wu=10;liu=10;qi=10;ba=10;
		//数码管
		display_12(yi,er);
		display_34(san,si);
		display_56(wu,liu);
		display_78(qi,ba);
	}
}
//发送超声波
void send_wave(){
	unsigned char i=8;
	while(i--){
		TX=1;
		somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;
		TX=0;
		somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;
	}
}
//接收超声波
unsigned char rect_wave(){
	unsigned int temp;
	send_wave();
	TR1=1;
	while((RX==1)&&(TF1==0));
	TR1=0;
	//如果溢出,显示999
	if(TF1==1){
		TF1=0;
		temp=999;
	}
	//如果接收到信号,则进行换算。
	else {
		temp=TH1;
		temp=(temp<<8)|TL1;
		TH1=0;TL1=0;
		temp=temp*0.017/12;
		//temp*340 / 1000000 * 100 / 2 
		//计时* 空气传播速度
	}
	return temp;
}
//2ms设置flag_wave
void time0() interrupt 1{
	t_0++;
	if(t_0==100){
		t_0=0;
		flag_wave=!flag_wave;
	}
}
//定时2ms
void Timer0Init(void)		
{
	AUXR |= 0x80;		
	TMOD &= 0xF0;		
	TL0 = 0x9A;		
	TH0 = 0xA9;		
	TF0 = 0;		
	TR0 = 1;		
}
//定时器1
void Timer1Init(void)	
{
	AUXR |= 0x40;	
	TMOD &= 0x0F;	
}
void delayms(int ms){
	int q,w;
	for(q=0;q<ms;q++)
		for(w=0;w<845;w++);
}
void allinit(){
	P2=0XA0;P0=0X00;
	P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;
	P2=0X80;P0=0XFF;
}
void display_12(yi,er){
	P2=0XC0;P0=0X01;P2=0XE0;P0=seg[yi];delayms(1);
	P2=0XC0;P0=0X02;P2=0XE0;P0=seg[er];delayms(1);
}
void display_34(san,si){
	P2=0XC0;P0=0X04;P2=0XE0;P0=seg[san];delayms(1);
	P2=0XC0;P0=0X08;P2=0XE0;P0=seg[si];delayms(1);
}
void display_56(wu,liu){
	P2=0XC0;P0=0X10;P2=0XE0;P0=seg[wu];delayms(1);
	P2=0XC0;P0=0X20;P2=0XE0;P0=seg[liu];delayms(1);
}
void display_78(qi,ba){
	P2=0XC0;P0=0X40;P2=0XE0;P0=seg[qi];delayms(1);
	P2=0XC0;P0=0X80;P2=0XE0;P0=seg[ba];delayms(1);
	P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;delayms(1);
}
发布了74 篇原创文章 · 获赞 59 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44747240/article/details/104903668