电子科大通信大类认知探索51课实验报告Word格式.docx

上传人:b****5 文档编号:16809208 上传时间:2022-11-26 格式:DOCX 页数:18 大小:3.87MB
下载 相关 举报
电子科大通信大类认知探索51课实验报告Word格式.docx_第1页
第1页 / 共18页
电子科大通信大类认知探索51课实验报告Word格式.docx_第2页
第2页 / 共18页
电子科大通信大类认知探索51课实验报告Word格式.docx_第3页
第3页 / 共18页
电子科大通信大类认知探索51课实验报告Word格式.docx_第4页
第4页 / 共18页
电子科大通信大类认知探索51课实验报告Word格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

电子科大通信大类认知探索51课实验报告Word格式.docx

《电子科大通信大类认知探索51课实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《电子科大通信大类认知探索51课实验报告Word格式.docx(18页珍藏版)》请在冰豆网上搜索。

电子科大通信大类认知探索51课实验报告Word格式.docx

四.基本理论及原理

基本理论分为三个板块,超声波模块,51单片机,蜂鸣器,8*8点阵及1602模块。

本节将分块解释各模块基本原理。

(1)超声波模块

常用的是压电式超声波发生器,是利用压电晶体的谐振来工作的。

超声波传感器探头内部有两个压电晶片和一个共振板。

当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。

反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。

超声波传感器就是利用压电效应的原理将电能和超声波相互转化,即在发射超声波的时候,将电能转换成超声波发射出去;

而在接收时,则将超声振动转换成电信号。

超声波时序图:

以上时序图表示要发出一个10uS以上的脉冲信号,该模块内部将发出40KHz周期点评并检测回波。

一旦检测到回波信号则输出回响信号。

回响信号的脉冲宽度与测距的距离成正比,由此测的距离。

(2)51单片机

51单片机为整个系统的中枢,承担着接收信号,发送信号,响应等重要功能。

对于超声波模块,主要功能为发出信号使超声波模块工作并完成测距任务,接着接收信号,转换为数字信号并加以处理,好控制1602液晶,点阵,蜂鸣器等其他外设。

其负担着接收数据,处理数据,发送数据等重要功能,因此对51单片机的操作为本实验的核心。

本实验选择TX-1C开发板,其集成度高,性能稳定,便于操作。

(3)蜂鸣器

如图,P2^3口连接三极管基极,负责传送信号。

三极管其他部分与蜂鸣器共同组成开关电路,驱动蜂鸣器工作。

当输出高电平是打开开关电路,蜂鸣器鸣响。

(4)8*8点阵

8*8点阵其实是由64组发光二极管组成,点阵发光原理与发光二极管完全相同。

但此处为了提升效率,采用两片存储器来操作点阵。

点阵根据输入信号的不同,点亮不同位置的发光二极管。

(5)1602液晶屏

1602字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块,可显示2行,每行16个字符。

支持4位和8位数据传输方式。

提供5×

7点阵+光标的显示模式。

提供显示数据缓冲区DDRAM、字符发生器CGROM和字符发生器CGRAM,可以使用CGRAM来存储自己定义的最多8个5×

8点阵的图形字符的字模数据。

提供了丰富的指令设置:

清显示;

光标回原点;

显示开/关;

光标开/关;

显示字符闪烁;

光标移位;

显示移位等。

本实验中用1602显示距离与提示信息。

五.程序流程图

开始

初始化超声波模块,1602液晶屏

运行程序,触发超声波

计算距离信息

N

Y

1602显示距离,点阵根据距离显示不同数目的led灯

触发蜂鸣器,使点阵全屏闪烁,1602显示stop字样

距离小于100?

关闭电源,实验结束

六.实验器材及硬件原理图

TX-1C开发板及1602液晶

8*8点阵

蜂鸣器

七.完整代码及分析

/*写入接口定义的管脚,为之后程序做准备*/

#include<

reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitrs=P3^5;

sbitlcden=P3^4;

//定义lcd接口

sbitdula=P2^6;

//定义寄存器

sbitwela=P2^7;

ucharbeepnum;

sbitbeep=P2^3;

//哔!

哔!

sbittriger=P3^7;

//超声波串口

sbitecho=P3^2;

//超声波串口

sbitSH_CP=P1^2;

//点阵口定义

sbitDS=P1^0;

sbitST_CP=P1^1;

unsignedlongintdistance=150,counter=0,flag=0;

/*延时函数1,在lcd写入数据需要时间,无法立即完成。

需要使用延时函数使程序等待lcd写入完成。

延时函数2为蜂鸣器使用,通过不停的对蜂鸣器拉高拉低完成蜂鸣器的持续发声,延时作为高低电平输入间隔时间*/

voiddelay(uintx)//延时函数1

{

uinta,b;

for(a=x;

a>

0;

a--)

for(b=10;

b>

b--);

}

voiddelay1(uintz)//延时函数2(可与1合并)

uintx,y;

for(x=z;

x>

x--)

for(y=110;

y>

y--);

/*点阵由两个寄存器与单片机相连,因此需要操作寄存器,此函数操作寄存器*/

voidWriteByte(uchardat)(点阵写入函数)

{

uchark;

for(k=0;

k<

8;

k++)

{

dat=dat>

>

1;

DS=CY;

SH_CP=0;

SH_CP=1;

}

/*lcd使用前要完成一系列设置*/

voidinit()//lcd初始化程序

dula=0;

wela=0;

write_com(0x38);

delay(20);

write_com(0x0e);

write_com(0x06);

write_com(0x01);

/*lcd命令函数与数据写入函数,要想完成数据的写入,要先向其发送命令使其进入工作状态,再由lcd数据写入函数接收数据,显示字符*/

voidwrite_com(ucharcom)//LCD指令函数

P0=com;

rs=0;

lcden=0;

delay(10);

lcden=1;

voidwrite_date(uchardate)//LCD写入数据函数

P0=date;

rs=1;

/*此函数为程序的关键,将蜂鸣器,1602,点阵的处理都写入此函数内。

第一行一直到switch结束为拓展要求即根据距离控制点阵亮灯个数并在1602显示的控制程序。

点阵具体16进制值显示由二进制转换来。

例如00000001是亮起一行,16进制位0x01,以此类推,1602直接带入函数操作。

第二部分为基础要求即倒车雷达部分,代码比较简单,详见注释*/

voiddisplay()//三大外设控制函数

uinti=0,j=0;

ucharqian,bai,shi,ge;

//定义距离

write_com(0x80);

//写入lcd第一行

if(distance!

=0)

{

qian=distance%10000/1000+'

0'

;

//转化数据

bai=distance%1000/100+'

shi=distance%100/10+'

ge=distance%10+'

write_date(qian);

//写入数据

write_date(bai);

write_date(shi);

write_date(ge);

if(distance%1000/100==7)//距离量级判断

j=6;

if(distance%1000/100==6)

j=5;

if(distance%1000/100==5)

j=4;

if(distance%1000/100==4)

j=3;

if(distance%1000/100==3)

j=2;

if(distance%1000/100==2)

j=1;

if(distance%1000/100==1)

j=0;

if(distance%1000/100>

=8||distance%10000/1000!

j=7;

switch(j)//点阵控制

case0:

{WriteByte(0x00);

//清屏

WriteByte(0x01);

//点阵第1行亮起

ST_CP=0;

ST_CP=1;

break;

case1:

WriteByte(0x03);

case2:

WriteByte(0x07);

//点阵前2行亮起

case3:

WriteByte(0xf);

case4:

WriteByte(0x1f);

case5:

WriteByte(0x3f);

case6:

WriteByte(0x7f);

case7:

WriteByte(0xff);

}

//倒车雷达部分

if(distance<

100)//定义报警距离100

{

WriteByte(0x00);

write_com(0x01);

//LCD清零

write_date('

s'

);

//温馨提醒,stop字符

t'

o'

p'

for(beepnum=0;

beepnum<

beepnum++)//哔哔声响起

beep=0;

delay1(5);

beep=1;

WriteByte(0x00);

//点阵闪烁

}

/*中断函数初始化*/

voidTime0_Init()

TMOD=0x11;

//定时器工作方式为1,,1位定时器

EA=1;

//开总中断

ET0=1;

//开定时器0终端允许位

ET1=1;

//开定时器1终端允许位

EX0=1;

//外部中断0允许位

IT0=1;

//下降沿有效

TH0=(65536-10)/256;

TL0=(65536-10)%256;

//12MZ晶振,10us

TH1=0;

TL1=0;

voidmain()

chari=0;

init();

Time0_Init();

TR0=1;

//开定时器0

while

(1)

if(echo==1)//检测回声脚上升沿,因为51的外部中断脚

//只能有低电平有效和下降沿有效两种方式

//所以选择轮询检测上升沿

TR1=1;

//检测上升沿,立即打开定时器1进行测试

/*以下为超声波模块工作的核心,中断部分,详细解释见函数内部注释*/

voidINT0_Int()interrupt0//外部中断0中断处理函数

TR1=0;

//一旦检测到回声脚下降沿,立即关闭定时器1

distance=(TH1*256+TL1)*1.0f/1000*340/2;

//单位毫,避免浮点运算

TR0=0;

display();

//把显示函数放在中断中,可以快速检测回声脚上升沿

//定时器0中断处理函数

voidTime0_Int()interrupt1

triger=0;

//关闭超声波

//12MZ,10us

counter++;

if(counter>

=1500)//0.015s

counter=0;

triger=1;

//触发超声波

voidTime1_Int()interrupt3

distance=0;

八.测试图片

(1)倒车雷达装置

距离小于100时,屏幕显示stop字样,点阵全部频闪,蜂鸣器连续发出“哔哔声”。

(2)显示距离并根据远近控制点阵

100<

距离<

200亮起前一行点阵,1602显示距离。

200<

300亮起前两行点阵,1602显示距离。

300<

400亮起前三行点阵,1602显示距离。

以此类推,距离过大时,点阵全部亮起,1602显示距离。

九.出现问题及分析

实验时出过不少问题,如点阵函数写错无法控制。

超声波模块无法工作。

1602写入时没有清除原来数据出现乱码等。

当然,出现问题是要及时纠正的。

客观来讲,51单片机应用技术已十分成熟,网上也有大量的详细教程,当遇到困难时不要只是一个人埋头苦想,可以在网上寻求帮助,快速解决问题。

有时候程序出现bug时自己难以察觉,也可以请其他同学帮忙查错,毕竟,只有多经历失败,多总结,才能一步一步深入了解单片机的工作,写程序速度也会大大提高。

此外,不要仅仅局限于现有知识或单一的题目要求,可以自己玩出些花样,增加拓展目标,增大单片机的实用性和可玩性。

中断是单片机一大难点及重点,只有掌握中断才能游刃有余的玩转单片机。

当遇到失败时,应及时总结,修正程序,继续努力学习。

十.后记

(1)引用书籍,程序,开源datasheet:

《新概念51单片机C语言教程》—郭天祥

《超声波基础程序》—张亚乾学长

《模电》—童诗白华成英

《超声波模块说明书》

《lcd模块说明书》

《蜂鸣器说明书》

《74hc系列寄存器说明书》

《8*8点阵使用说明》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1