超声波Word格式.docx
- 文档编号:19820604
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:13
- 大小:18.08KB
超声波Word格式.docx
《超声波Word格式.docx》由会员分享,可在线阅读,更多相关《超声波Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
voidmeasure(void)
uchartemp=0,wait=0;
SREG|=BIT(7);
Tx_1;
//
delay_us(20);
while
(1)
{
wait=Rx_v;
if(wait==1)
break;
}
while(!
flag_int0_down);
flag_int0_down=0;
flag_timer0_full)
Lcd_DisplayData(0,3,distance);
flag_timer0_full=0;
SREG&
=~BIT(7);
voidmain(void)
measure_init();
lcd_init();
lcd_clr();
Lcd_DisplayString(0,0,"
距离:
cm"
);
measure();
/*
超声波测距程序
接口定义:
Echo接PD0(外部中断0)Trig接PD1
*/
#defineucharunsignedchar
#defineuintunsignedint
//引脚定义
#defineEcho_outDDRD|=BIT(0)
#defineEcho_inDDRD&
=~BIT(0)
#defineEcho1PORTD|=BIT(0)
#defineEcho0PORTD&
#defineEcho_vPIND&
BIT(0)
#defineTrig_outDDRD|=BIT
(1)
#defineTrig_inDDRD&
=~BIT
(1)
#defineTrig1PORTD|=BIT
(1)
#defineTrig0PORTD&
voiddelay(uintms);
voiddelay_us(uintus);
voidinit(void);
voidinit_ultrasonic();
voiddisplay(uinta);
voidultrasonic(void);
#pragmainterrupt_handlertimer1_ovf:
/*数码管显示段码和位码*/
constuchartable_duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
constuchartable_wei[]={0x01,0X02,0X04,0X08};
ucharge=0,shi=0,bai=0,qian=0;
ucharflag_timer1_full=0,flag_int0_down=0;
uintdistance=0;
init();
init_ultrasonic();
delay(200);
ultrasonic();
display(distance);
voidinit(void)
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
DDRD=0XFF;
DDRE=0XFF;
PORTD=0XFF;
voidinit_ultrasonic()
Echo_in;
Echo1;
Trig_out;
Trig0;
EICRA|=BIT
(1);
//初始化外部中断0,用于检测接收到的脉冲
EIMSK|=BIT(0);
TCCR1B|=BIT
(1);
//定时器初始化
voidtimer1_ovf(void)
flag_timer1_full=1;
/********************************************************************
*名称:
ultrasonic()
*功能:
超声波测距函数
*输入:
无
*输出:
测量值
***********************************************************************/
voidultrasonic(void)
//开中断
Trig1;
//发送声波20us
wait=Echo_v;
if(wait==1)
{
break;
}
flag_int0_down);
flag_int0_down=0;
flag_timer1_full)
flag_timer1_full=0;
display()
4位数码管的显示函数
显示值,最大值为9999
voiddisplay(uinta)
ge=a%10;
shi=(a/10)%10;
bai=(a/100)%10;
qian=(a/1000)%10;
PORTA=~table_duan[qian];
PORTB=table_wei[0];
delay
(1);
PORTA=~table_duan[bai];
PORTB=table_wei[1];
PORTA=~table_duan[shi];
PORTB=table_wei[2];
PORTA=~table_duan[ge];
PORTB=table_wei[3];
delay()
8M晶振时延时1ms
时间值
voiddelay(uintms)
uintx,y;
for(x=0;
x<
ms;
x++)
for(y=0;
y<
1141;
y++);
voiddelay_us(uintus)//1us延时程序,用于使端口输出稳定
uintx_us,y_us;
for(x_us=0;
x_us<
us;
x_us++)
for(y_us=0;
y_us<
1;
y_us++);
AVR的超声波测距程序---基于定时器外部捕捉功能
/**
AVRmega128
8M晶振
本程序使用了F口作为12864的数据口,故下载程序前应该把JTAG功能关闭
***/
mega128.h>
#include<
delay.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineulong
unsignedlong
//LCD端口定义
#defineE
PORTA.2
#defineRW
PORTA.1
#defineRS
PORTA.0
#definePSBPORTA.3
#defineRSTPORTA.4
#defineLCD_Data
PORTF
//超声波端口定义
#defineTRING
PORTA.5
#defineECHO
PINE.7
//变量定义
ulongov_counter=0;
uintrising_edge,falling_edge;
ulongpulse_clocks;
ulongecho_data;
doublespeed;
uint
temp;
unsignedcharflashnumlist[]="
0123456789"
;
unsignedcharflashaddrlist[32]=
{0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f};
voidInit_Port();
voidInit_Reg();
voidEcho_scan();
voidCeliang();
voidLcd_Init();
//12864初始化
voidLcd_Write_Str(unsignedcharflash*s);
//12864写汉字
voidLcd_Write_Cmd(ucharcom);
//12864写数据
voidLcd_Write_Data(uchardat);
voidLcmPrint(unsignedcharx,unsignedchary,unsignedcharflash*adata);
voidLcd_WriteNum(uchari,ucharj,ulongnumber);
voidJiemian()
{
Lcd_Write_Cmd(0x88);
Lcd_Write_Str("
"
Lcd_Write_Cmd(0x88+6);
mm"
delay_ms(60);
voidmain()
Init_Port();
//端口初始化
Init_Reg();
//寄存器初始化
Lcd_Init();
//12864液晶初始化
Jiemian();
//画出基本界面
//使能T/C3扑捉中断
{
Echo_scan();
//超声波模块启动测量
Celiang();
//计算距离
Lcd_WriteNum(3,4,echo_data);
//显示距离
}
}
//*************超声波扫描**********
voidEcho_scan()
TRING=1;
TRING=0;
voidCeliang()
pulse_clocks=(double)pulse_clocks;
echo_data=pulse_clocks*0.340/2-18;
//*****************中断服务程序******************
interrupt[TIM3_OVF]voidTimer3_ovf_isr()
ov_counter++;
interrupt[TIM3_CAPT]voidTimer3_capt_isr()
if(ECHO){
rising_edge=ICR3L;
temp=ICR3H;
rising_edge|=temp<
<
8;
TCCR3B&
=0xbf;
ov_counter=0;
else{
falling_edge=ICR3L;
falling_edge|=temp<
TCCR3B|=0x40;
pulse_clocks=(ulong)falling_edge-(ulong)rising_edge
+(ulong)ov_counter*0x10000;
//////////////////////////////////////
voidLcd_Init()
RST=0;
delay_ms(100);
RST=1;
Lcd_Write_Cmd(0x30);
//选择基本指令集
//选择8bit数据流
Lcd_Write_Cmd(0x03);
Lcd_Write_Cmd(0x01);
//清除显示,并且设定地址指针为00H
Lcd_Write_Cmd(0x0c);
//开显示(无游标、不反白)
voidInit_Port()
PORTE=0XFF;
DDRE=0X7F;
//PORE.7超声波信号输入
PORTF=0xff;
DDRF=0xff;
PORTA=0xff;
DDRA=0xff;
voidInit_Reg()
TCCR3B=0X42;
ETIMSK=0X24;
#asm("
sei"
voidLcd_WriteNum(uchari,ucharj,ulongnumber)/*在第i行第j列开始写3位数据*/
uchara,b,c,d,e,f,g;
//a=number/1000000;
//b=(number%1000000)/100000;
c=(number%100000)/10000;
d=(number%10000)/1000;
e=(number%1000)/100;
f=(number%100)/10;
g=number%10;
Lcd_Write_Cmd(addrlist[8*i+j-9]);
//Lcd_Write_Data(numlist[a]);
//Lcd_Write_Data(numlist[b]);
Lcd_Write_Data(numlist[c]);
Lcd_Write_Data(numlist[d]);
Lcd_Write_Data(numlist[e]);
Lcd_Write_Data(numlist[f]);
Lcd_Write_Data(numlist[g]);
//在坐标(x,y)处显示字符串
voidLcmPrint(unsignedcharx,unsignedchary,unsignedcharflash*adata)
if((y>
3)||(x>
7))
return;
//如果指定位置不在显示区域内,则不做任何写入直接返回
switch(y)
case0:
Lcd_Write_Cmd(0x80+x);
break;
case1:
Lcd_Write_Cmd(0x90+x);
case2:
Lcd_Write_Cmd(0x88+x);
case3:
Lcd_Write_Cmd(0x98+x);
while(*adata>
0)
Lcd_Write_Data(*adata);
////写8位的字符数据
adata++;
////指针指向下一个地址单元
unsignedcharLcd_CheckBusy(void)
unsignedcharBusy;
LCD_Data=0xff;
RS=0;
RW=1;
E=1;
delay_us
(1);
Busy=LCD_Data&
0x80;
E=0;
returnBusy;
/***********************************
从LCD中读出数据
************************************/
unsignedcharLcd_ReadData(void)
unsignedcharTemp;
while(Lcd_CheckBusy());
RS=1;
RW=1;
E=1;
delay_us
(1);
Temp=LCD_Data;
E=0;
returnTemp;
//-------------12864写数据函数-----------------
voidLcd_Write_Data(uchardat)
delay_ms(3);
RS=1;
RW=0;
LCD_Data=dat;
//-------------12864写命令函数----------------
voidLcd_Write_Cmd(ucharcom)
delay_ms(5);
LCD_Data=com;
//-------------12864显示写汉字函数---------------
voidLcd_Write_Str(unsignedcharflash*s)
while(*s>
0)
Lcd_Write_Data(*s);
s++;
delay_ms
(1);
//
原文是delay(50);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超声波