📄 chaoshengbo.c
字号:
unsigned int distance=0,value = 0,lastdistan=0;
unsigned char Dis[5]=" . ";
unsigned char cont=0;
long double times,vliu;
unsigned char flag=0;
unsigned char Wucha = 9;
/***********************************************
函数名:delay_ms
子函数:无
输 入:n
输 出:无
功 能:延迟n*0.05MS子程序
------------------------------------------------
************************************************/
void delay_ms(unsigned int n)
{
unsigned int i=114;
for(;n>0;n--)
{
while(i--);
i=114;
}
}
/***********************************************
函数名:SIGNAL(SIG_INTERRUPT0)
子函数:无
输 入:无
输 出:无
功 能:外中断0服务程序
------------------------------------------------
************************************************/
SIGNAL(SIG_INTERRUPT0)
{
GICR&=~(1<<INT0);
if(flag == 0)
{
GICR |= 0x40;
flag = 1;
}
else
{
TCCR2 = 0x00;//停止定时器
value = TCNT2;
times = (long double)((value+cont*255)*0.004);//ms单步是8us,由于是反射的波所以用4us
vliu = (long double)(33.15+0.06*(TEMP_int+0.1*TEMP_flo));//cm/ms
lastdistan = (unsigned int)(times*vliu)-Wucha;
if(lastdistan>7)
{
distance = lastdistan;
Dis[0] = DataString[distance%1000/100];
Dis[2] = DataString[distance%100/10];
Dis[3] = DataString[distance%10];
Dis[4] = '\0';
dispstr_12864(3,1,Dis);
if(distance>200){WORDFLAG = 0;PORTA = 0x01;}
else if(distance>100){WORDFLAG = 1;PORTA = 0x00;}
else if(distance>50){WORDFLAG = 2;PORTA = 0x02;}
else {WORDFLAG = 3;PORTA = 0x04;}
}
}
}
void init_devices(void)
{
cli(); //禁止所有中断
RD7 = 1;
OD7 = 0;
RD2 = 0;
MCUCR |= 0x03;
//GICR |= 0x40;
TCCR2 = 0x00;//停止定时器
TCNT2 = 0x00;//初始值
OCR2 = 0x00;//匹配值
TIMSK |= 0x40;//中断允许
//TCCR2 = 0x05;//启动定时器
sei();//开全局中断
}
//T2溢出中断服务程序
SIGNAL(SIG_OVERFLOW2)
{
cont++;
TCNT2 = 0x00;
}
//测距离
void Distance(void)
{
unsigned char i,j;
TIMSK &= ~(1<<TOIE0); // T0溢出中断允许
flag = 0;
init_devices();
TCNT2 = 0;
cont = 0;
TCCR2 = 0x05;//启动定时器,单步8us
for(j=0;j<7;j++)
{
OD7 = 1;
for(i=0;i<29;i++)asm("nop");
OD7 = 0;
for(i=0;i<49;i++)asm("nop");
}
delay_ms(3);
GICR |= 0x40;
delay_ms(1300);
GICR&=~(1<<INT0);
TIMSK |= (1<<TOIE0); // T0溢出中断允许
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -