第14届蓝桥杯模拟赛第一套(超声波+串口)

 题目来源http://t.csdn.cn/56aVJ

第14届蓝桥杯模拟赛第一套(超声波+串口)_第1张图片 第14届蓝桥杯模拟赛第一套(超声波+串口)_第2张图片

第14届蓝桥杯模拟赛第一套(超声波+串口)_第3张图片

第14届蓝桥杯模拟赛第一套(超声波+串口)_第4张图片

第14届蓝桥杯模拟赛第一套(超声波+串口)_第5张图片

第14届蓝桥杯模拟赛第一套(超声波+串口)_第6张图片

完整代码

#include 
#include 
#include 

#define u8 unsigned char
#define u16 unsigned int
sbit RX=P1^1;
sbit TX=P1^0;
u8 code Nodat[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

u8 L1=0,L2=0,L3=0;
u8 smg_i=0,smgmode=0,tab[8];
u8 keyval=0;
u16 cont2;
u16 distance=0,parm=30;

bit flag10ms,flag100ms,flag200ms;

//======== ==================初始化函数=========================
void initsystem()
{
	P0=0; P2=0xa0; P2=0;
	P0=0xff; P2=0x80; P2=0;
}
void Delay14us()		//@12.000MHz
{
	unsigned char i;

	_nop_();
	_nop_();
	i = 39;
	while (--i);
}
//======== T0测距
void Timer0Init(void)		//微秒@12.000MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x00;		//设置定时初值
	TF0 = 0;		//清除TF0标志
}
//======== T1串口
void UartInit(void)		//[email protected]
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设定定时器1为16位自动重装方式
	TL1 = 0xE6;		//设定定时初值
	TH1 = 0xFF;		//设定定时初值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA=1;
}
//======== T2定时
void Timer2Init(void)		//1毫秒@12.000MHz
{
	AUXR &= 0xFB;		//定时器时钟12T模式
	T2L = 0x18;		//设置定时初值
	T2H = 0xFC;		//设置定时初值
	AUXR |= 0x10;		//定时器2开始计时
	IE2 |= 0x04;  
	EA=1;
}
//======== =================数据读取函数=========================

//======== 测距数据T0
u16 read_distance()
{
	u8 i;
	u16 val;
	for(i=0;i<8;i++)
	{
		TX=1;
		Delay14us();
		TX=0;
		Delay14us();
	}
	TR0=1; 
  while((RX==1)&&(TF0==0));
	TR0=0;
	if(TF0==1)
	{
		val=999; TF0=0; 
		TH0=0x00; TL0=0x00;
	}
	if(RX==0)
	{
		val=(TH0<<8 |TL0)*0.017;
		TH0=0x00; TL0=0x00;
	}
	return val;
}
//======== 串口打印T1
void sendbyte(u8 udat)
{   
	 SBUF=udat;
	 while(TI==0);
	 TI=0;
}
char putchar(char c)
{
	sendbyte(c);
	return c;
}
//======== 定时函数T2
void t2int() interrupt 12           //中断入口
{
	cont2++;
	if(cont2==1000)
		cont2=0;
	if(cont2%2==0)
	{
		P0=~(L1+2*L2+4*L3); P2=0x80; P2=0;
		P0=0; P2=0xc0; P2=0;
	    P0=tab[smg_i]; P2=0xe0; P2=0;
		P0=(1<parm) 
					L3=!L3;
				else L3=0;
				setsmg();	
				distance=read_distance();				
		}
	}
  		
	}
}
	

驱动程序 

 居然一个都没有使用!!!!

你可能感兴趣的:(蓝桥杯单片机,单片机,嵌入式硬件,蓝桥杯)