#include "stc15f2k60s2.h"
#include "intrins.h"
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
sbit TX=P1^0;
sbit RX=P1^1;
uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,\
0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,\
0XBF,0XFF};
uchar Digbuf[]={0,1,2,3,4,5,6,7};
uchar Digcom=0;
void Allinit();
void delayms(uint ms);
void Timer2Init(void);
void DIG_Show();
//超声波
void Delay14us();
void Wave_send();
void Wave_measure();
void Timer0Init(void);
uchar trie=0;
bit wave_flag=0;
uchar Distance=0;
void main(void)
{
Allinit();
Timer2Init();
Timer0Init();
while(1)
{
Wave_measure();
DIG_Show();
}
}
void Wave_send()
{
uchar i;
for(i=0;i<8;i++)
{
TX=1;
Delay14us();
TX=0;
Delay14us();
}
}
void DIG_Show()
{
Digbuf[0]=21;Digbuf[1]=21;Digbuf[2]=21;Digbuf[3]=21;Digbuf[4]=21;Digbuf[5]=21;
Digbuf[6]=Distance/10;Digbuf[7]=Distance%10;
}
void Wave_measure()
{
if(wave_flag==1)
{
wave_flag=0;
Wave_send();
TR0=1;
while((RX==1)&&(TF0==0));
TR0=0;
if(TF0==1)
{
TF0=0;
Distance=99;
}
else
{
Distance=((TH0<<8)|TL0)*0.017;
Distance=Distance/12;
}
TH0=TL0=0;
}
}
void Timer0Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
}
void Timer2Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0x20; //设置定时初值
T2H = 0xD1; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2|=0X04;
EA=1;
}
void timer2() interrupt 12
{
P0=0XFF;
P2|=0XC0;P2&=0XDF;P2&=0X1F;
P0=0XFF;
P2|=0XE0;P2&=0XFF;P2&=0X1F;
P0=(1<<Digcom);
P2|=0XC0;P2&=0XDF;P2&=0X1F;
P0=tab[Digbuf[Digcom]];
P2|=0XE0;P2&=0XFF;P2&=0X1F;
if(++Digcom==8)Digcom=0;
trie++;
if(trie==200)
{
trie=0;
wave_flag=1;
}
}
void Allinit()
{
P0=0X00;P2|=0XA0;P2&=0XBF;P2&=0X1F;
P0=0XFF;P2|=0X80;P2&=0X9F;P2&=0X1F;
P0=0XFF;P2|=0XC0;P2&=0XDF;P2&=0X1F;
P0=0XFF;P2|=0XE0;P2&=0XFF;P2&=0X1F;
}
void delayms(uint ms)
{
uint i,j;
for(i=0;i>ms;i++)
for(j=845;j>0;j--);
}
void Delay14us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 39;
while (--i);
}
蓝桥杯 ——超声波
最新推荐文章于 2024-08-04 15:46:46 发布