新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ATMEGA8超聲波測距程序

        ATMEGA8超聲波測距程序

        作者: 時間:2016-11-30 來源:網絡 收藏
        幾天前把超聲波做出來以后 準確度可以提高到1cm 然后放到小車上

        做了一個超聲波蔽障 現在小車可以光電循跡 和超聲波蔽障了 下面是

        本文引用地址:http://www.104case.com/article/201611/324023.htm

        超聲波的程序

        /*********************************************************************
        Project :超聲波測距
        Chip type : ATMEGA8
        Clock frequency: 8.000000MHz
        *********************************************************************/
        #include
        #include
        #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.
        {
        TCNT0=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;idelay_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{
        delay_1ms();
        }
        }

        void send40kHz(void) //發射40KHz超聲波
        {
        count=0;
        TIMSK&=0XDF;//禁止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< delay_us(100);
        PORTC=(1<}
        }

        void mcu_init(void)//MCU初始化
        {
        DDRD=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();
        }

        }



        關鍵詞: ATMEGA8超聲波測

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 河西区| 桂东县| 秀山| 乌兰浩特市| 烟台市| 邯郸县| 平顶山市| 淮北市| 团风县| 广元市| 泸水县| 蒙自县| 宁夏| 错那县| 花莲市| 保亭| 乌鲁木齐市| 格尔木市| 石河子市| 福海县| 巴楚县| 南部县| 若尔盖县| 武陟县| 政和县| 墨玉县| 五莲县| 巴马| 绥阳县| 定兴县| 京山县| 双江| 浦东新区| 谷城县| 裕民县| 乌鲁木齐市| 修武县| 东阿县| 荥阳市| 泗水县| 安阳市|