资讯详情

ATMEGA8超声波测距程序

几天前把超声波做出来以后 准确度可以提高到1cm 然后放到小车上

做了一个超声波蔽障 现在小车可以光电循迹 和超声波蔽障了 下面是

超声波的程序

/********************************************************************* Project : 超声波测距 Chip type : AT8 Clock frequency: 8.000000MHz *********************************************************************/ #include<iom8v.h> #include<macros.h> #pragma interrupt_handler intt0:10 //T0溢出中断 #pragma interrupt_handler icp_timer1:6 // T1捕捉中断 const unsigned char tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段译码字型表(lm,cm) unsigned char ledbuff[]={0X08,0X28,0X28};//显示缓冲区 unsigned char count; unsigned char newcount; unsigned char oldcount; void intt0(void)//T0中断定时程序,定时58US,即测距1CM. { TC0=0XC6; count++; } void icp_timer1(void)//ICP1捕捉中断,捕捉频率38.5~41.6 { if (96<=ICR1<=104) { SREG&=0X7f; newcount=count-13; ICR1=0; TCNT1=0; TCCR1B=0X81; } } void delay_1us(void)//1us { asm("nop"); } void delay_us(unsigned int t)//tus { unsigned int i=0; for(i=0;i<t;i++) delay_1us(); } void delay_1ms(void)//1ms { unsigned int i; for(i=1;i<1142;i++); } void delay_ms(unsigned char t) { unsigned char i=0; for(i=0;i<t;i++) { delay_1ms(); } }

void send40kHz(void) //发射40KHz超声波 { count=0; MSK&=0F;//禁止ICP1使能 OCR2=0X64; TCCR2=0X19; } void close40kHz(void) //停止发射超声波 { TCCR2=0X00; } void hextobcd(unsigned char m)//将count十六进制数据转换为LED七段码 { unsigned char temp; temp=m%10; ledbuff[0]=tab1[temp];//mm位 m=m/10; temp=m%10; ledbuff[1]=tab1[temp];//lm位 temp=m/10; ledbuff[2]=tab1[temp];//m位 } void display3led(void) //显示 { unsigned char i; for(i=0;i<3;i++) { PORTD=ledbuff[i]; PORTC=~(1<<i);//PC0-mm位,PC1-lm位,PC2-m位 delay_us(100); PORTC=(1<<i); } }

void mcu_init(void)//初始化 { D=0XFF; PORTD=0XFF; DDRC=0XDF; //PC5为输入 PORTC=0XFF; DDRB=0XFE; PORTB=0XF7; TCNT2=0X00; TCNT0=0XC6; //T0定时58US TCCR0=0X02; //T0定时器1/8分频 TCNT1=0X00; TCCR1A=0X00; TCCR1B=0X81; //输入捕获噪音抑制允许,ICP1下降沿触发,系统时钟 TIMSK=0X01; //使能T0定时溢出 } void main(void) { unsigned char i; mcu_init(); for(;;) { send40kHz(); SREG|=0X80; delay_us(50); close40kHz(); delay_us(20); TIMSK=0X21; if (newcount!=oldcount) oldcount=newcount; hextobcd(oldcount); for(i=0;i<20;i++) display3led(); } }

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台