电子科大通信大类认知探索51课实验报告Word格式.docx
- 文档编号:16809208
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:3.87MB
电子科大通信大类认知探索51课实验报告Word格式.docx
《电子科大通信大类认知探索51课实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《电子科大通信大类认知探索51课实验报告Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
四.基本理论及原理
基本理论分为三个板块,超声波模块,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点阵使用说明》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子科 大通 大类 认知 探索 51 实验 报告