• 大小: 7KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: 超声波  avr  源码  

资源简介

超声波的AVR源码,附带有超声波的详细使用资料

资源截图

代码片段和文件信息

/************************************************************************************************************************************
                                             超声波测距(12864串行,以5位毫米值显示)
本程序不带温度补偿,取声速为340m/s给发射角一个10--25us的高电平,模块会自动发射8个40KHZ的脉冲,接收端高电平的持续时间就是超声波在空气中的传播时间,根据
公式:length= [time(us) * 340(m/s) / 2 ](mm),能测量30mm--2500mm15°夹角
发射脚(trig):PB1
接收脚(echo):PB2
***********************************************************************************************************************************/
#include 
#include 
#define F_CPU 8000000UL
#include 
#define uchar unsigned char 
#define uint unsigned int 

uchar table[]={};  //存放以毫米显示的5位长度值
/******************12864液晶引脚定义********************/
#define LCD_CS_H      PORTD|=(1<<4)     
#define LCD_CS_L      PORTD&=~(1<<4)     
#define LCD_SID_H     PORTD|=(1<<5)      
#define LCD_SID_L     PORTD&=~(1<<5)     
#define LCD_SCLK_H    PORTD|=(1<<6)      5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
#define LCD_SCLK_L    PORTD&=~(1<<6) 
/***************MCU向液晶模块发送1一个字节的数据*********
参    数:type--数据类型,0--控制命令,1--显示数据
          transdata--发送的数据
*********************************************************/
void LCD_SEND(unsigned char typeunsigned char transdata)
{
unsigned char firstbyte=0xf8;  //如果type为0 则STD的第一个字节直接赋为1111 1000因为只写,所以RW一直为0,发送命令,所以RS也为0
unsigned char tempij=3;
   if(type) firstbyte |= 0x02;    //因为串行STD的第1个字节为1111 1(RW)(RS)0 若RS为1,说明为发送数据
LCD_CS_H;   //将CS置高  
    LCD_SCLK_L; //将时钟先置低
    while(j>0)
    {
     if(j==3)      temp = firstbyte;
        else if(j==2) temp = transdata&0xf0; //因为串行STD的第2个字节为1111 0000只保留高4位
        else          temp = (transdata<<4)&0xf0;  //因为串行STD的第3个字节为0000 1111,但是他把低四位整个的移到了前边           
        for(i = 8;i > 0;i--)  //通过循环移位发送第一个字节,每次发送一位,首先发送最高位
        {
         if(temp&0x80) {LCD_SID_H;} //如果最高位为1,则SID置1
            else       {LCD_SID_L;} //如果最高位为0,则SID置0即先将数据放在SID端口上
            LCD_SCLK_H;  //然后将时钟拉高
            temp <<= 1;  //将要传送的数据移一下位   
            LCD_SCLK_L;
        }
        if(j==3) _delay_us(600); 
        else     _delay_us(200);
        j--;
    }    
    LCD_SID_L;       
    LCD_CS_L;  //每发送完一个字节CS都要置低
}
/*******************液晶初始化函数***************************/
void LCD_init(void)
{
DDRD |= 0XF0;
PORTD |= 0XF0;
_delay_ms(10);      //延时等待液晶完成复位
    LCD_SEND(00x30);   /*功能设置:一次送8位数据基本指令集*/
    _delay_ms(1);
    LCD_SEND(00x02);   /*DDRAM地址归位*/
    _delay_ms(1);
    LCD_SEND(00x0c);   /*显示设定:开显示不显示光标不做当前显示位反白闪动*/
    _delay_ms(1);
    LCD_SEND(00x01);   /*清屏,将DDRAM的位址计数器调整为“00H”*/
    _delay_ms(1);
    LCD_SEND(00x06);   /*功能设置,点设定:显示字符/光标从左到右移位DDRAM地址加1*/
    _delay_ms(1);
LCD_SEND(00x80);   //设定显示的起始地址
_delay_ms(100);     //必须延时,否则第一行显示错误并且延时过短第一行也会出现错误
}
/***********************精确延时24.

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-03-10 08:37  超声波的AVR程序\
     文件        3126  2011-03-14 17:39  超声波的AVR程序\2011-01-10-chaoshengbo-1.aps
     文件         300  2011-05-08 17:17  超声波的AVR程序\2011-01-10-chaoshengbo-1.aws
     文件        4882  2011-03-14 17:39  超声波的AVR程序\2011-01-10-chaoshengbo-1.c
     目录           0  2012-03-10 08:37  超声波的AVR程序\default\
     文件        4882  2011-03-14 17:39  超声波的AVR程序\复件 2011-01-10-chaoshengbo-1.c

评论

共有 条评论