ATMEGA8超声波测距程序

发布者:chenxiaohong68最新更新时间:2015-06-15 来源: 51hei关键字:ATMEGA8  超声波测距 手机看文章 扫描二维码
随时随地手机看文章
几天前把超声波做出来以后  准确度可以提高到1cm   然后放到小车上

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

超声波的程序  

/********************************************************************* 
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;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  { 
  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  超声波测距 引用地址:ATMEGA8超声波测距程序

上一篇:仍在连接中, 请给 MCU 上电...(解决方案)
下一篇:一款串口输出超声波测距模块使用范例

推荐阅读最新更新时间:2024-03-16 14:03

ATmega8 掉电模式
当SM2..0 为010 时, SLEEP 指令将使MCU 进入掉电模式。在此模式下,外部晶体停 振,而外部中断、两线接口地址匹配及看门狗(如果使能的话)继续工作。只有外部复 位、看门狗复位、BOD 复位、两线接口地址匹配中断、外部电平中断INT0 或INT1,或 外部中断INT2 可以使MCU 脱离掉电模式。这个睡眠模式停止了所有的时钟,只有异步 模块可以继续工作。 当使用外部电平中断方式将MCU 从掉电模式唤醒时,必须保持外部电平一定的时间。具 体请参见 P 62“ 外部中断” 。 从施加掉电唤醒条件到真正唤醒有一个延迟时间,此时间用于时钟重新启动并稳定下来。 唤醒周期与由熔丝位CKSEL 定义的复位周期是一样的,如
[单片机]
基于AT89S52单片机的超声波测距原理图
该超声波测距系统,电路简单,工作稳定,无需调试,制作成功率高。采用AT89S52单片机作处理器,工作电源:AC6V及电脑USB口两种供电方式;测距范围:40cm~700cm(盲区40cm),测量结果由三位数码管直接显示出来,当测量超过上限值收不到回波时显示 C C C , 测量低于下限值40cm时显示 - - - 。模块上设有一输出端口,用于输出报警信号,当测量结果小于设定的报警值时继电器吸合。报警值可通过板上的两个按键开关K1、K2设定,设定值范围40cm~600cm。 51单片机超声波DIY
[单片机]
atmega8 例程:AD中断方式采集
/*********************************************************** * 函数库说明:ATMEGE8 AD模数转换 * 版本: v1.0 * * 说明: 中断方式AD采集 * * 版本更新: 详见readme.txt *
[单片机]
atmega8535 Ad转换的c程序
atmega8535 Ad转换的c程序 #include io8535v.h #define uchar unsigned char #define uint unsigned int uchar Table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar Data ={0,0,0,0}; void DelayMs(uint i) //0.25ms {uchar j; for(;i!=0;i--) {for(j=250;j!=0;j--) {;}} } void Display(uchar *p) //间隔5ms显示 {uchar i,sel=0x
[单片机]
基于MSP430的自动避让小车的设计与实现
0 引言 机器人竞赛是近些年国际上开展的一项高科技活动,它集高新技术、娱乐和竞赛于一体,受到众多学者的广泛关注和极大兴趣。机器人小车子系统其性能和运动时的避让控制是自动控制系统中重要的处理技术之一,也是整个系统中至关重要的部分。本文设计了一个基于低功耗单片机MSP430F149的智能自动避让小车控制系统,系统由两个基本相同的小车为主要载体,搭配对应的无线通讯模块、电机驱动模块、循迹模块以及超声波测距模块。系统控制方案主要通过nrf905无线通信模块来实现甲,乙两小车的呼叫、应答信号。通过超声波模块来确定甲乙两小车的相互位置关系。利用红外遁迹模块来确保两小车在规定的车道里面行驶以及即时确定小车已经到达的位置来调整小车自身车位。设计
[单片机]
基于MSP430的自动避让小车的设计与实现
Arduino生成ATmega8的运行程序并下载
§01 利用Arduino生成ATmega8执行程序   基于Arduino IDE的 Scratch完成程序的开发,借助于现在这个生态环境中越来越多积累下的软件包,的确可以加速软件的开发。满足更新的需要。   在 利用Arduino IDE对ATMEGA8等单片机编程 测试了对于Arduino IDE增加 MinCore的软件包,使其能够对于 ATmega48~ATmega328 进行开发支持。下面通过实验测试: 通过Arduino IDE生成ATmega8的执行程序,使用自行制作的Bootloader完成ATmega8程序上传,看是否可以进行正常执行。 将Arduino IDE生成的程序自行上传之后,测试是否它也就同时
[单片机]
Arduino生成<font color='red'>ATmega8</font>的运行程序并下载
STM32驱动URM04超声波测距模块
URM04简介: URM04采用了RS485串行通信总线的架构,支持多传感器的并行工作,有着两个RS-485接口,最多支持32个超声波的并联, 内置温度传感器辅助校正距离值,同时支持温度的测量 应用场合:移动机器人,停车场,安全检测,超声波空间定位。 性能描述: 工作电源:+5V 接口方式:RS485 RS485总线通讯, 超声波距离测量: 最大距离4cm―500cm 测量范围角度: 60度 芯片型号:Atmel公司的ATmega8芯片 MAX202 MAX485 ST温度测量芯片 测量流程: 1触发超声波与温度测量指令 发送指令后,超声波开始测量,温度开始测量,无返回值 2延时30MS 超声波最大测距5米,
[单片机]
STM32驱动URM04<font color='red'>超声波测距</font>模块
基于P89LPC932超声波测距
0 引言 一些传统的距离测量方式在某些特殊场合存在不可克服的缺陷。例如,液面测量就是一种距离测量,传统的电极法是采用差位分布电极,通过给电或脉冲来检测液面,电极长时间浸泡于水中或其他液体中,极易被腐蚀、电解,失去灵敏性。利用超声波测量距离可以解决这些问题,因此超声波测量距离技术在工业控制、勘探测量、机器人定位和安全防范等领域得到了广泛应用。所谓超声波是指频率高于20 kHz的机械波,具有强度大、方向性好等特点。其一般由压电效应或磁致伸缩效应产生。 本文设计的超声波测距仪用三种测距模式选择跳线J1(短距、中距、可调距)。其整体方案为当按下测量键,探头就发送超声波,当超声波遇到障碍物时将产生回波信号;系统将探头接收到的回波信号放
[单片机]
基于P89LPC932<font color='red'>超声波测距</font>仪
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved