单片机大作业.docx
《单片机大作业.docx》由会员分享,可在线阅读,更多相关《单片机大作业.docx(27页珍藏版)》请在冰豆网上搜索。
单片机大作业
课程设计报告
题目:
基于单片机的公交车
嘀声提醒及文字显示系统
**************************************
学生学号:
**********
系别:
电气信息工程学院
专业:
电子信息科学与技术
届别:
12级电技<1>班
********************************
课程设计题目:
基于单片机的公交车嘀声提醒及文字显示系统
学生:
刘亚楠
指导教师:
***
电气信息工程学院电子信息科学与技术专业
摘要
这个设计主要是为了方便提醒乘客到站,并且使乘客知晓本站及下站名称,以做好下车准备。
本设计主要运用到了单片机AT89C51及LCD文字液晶显示,有到站按下键“嘀”声提醒和液晶显示本站及下站名称的功能。
此设计可以防止出现乘客下错站的现象,避免给乘客造成时间金钱上的损失,同时也是对乘客个人利益的保护。
关键词:
单片机、蜂鸣器、LCD液晶显示、键盘
1、课题设计的背景
随着城市化的进展和经济的快速发展,大城市人口高度集中并大幅度增长,同时汽车越来越普及,交通需求迅速扩大,而道路交通基础设施建设的发展相对滞后。
城市交通需求与供给之间的矛盾越来越突出,城市“乘车难”、“行车难”的局面在加剧,交通堵塞呈现出点到线,由线到面的扩展趋势,交通拥挤、交通延误、交通堵塞以及由此引起的噪音、废气污染,城市空气质量指数的严重跌落严重影响着居民的正常生活以及社会经济的持续、健康发展。
而与出租车和私家车相比,公交车人均占道面积少、成本低、运载能力高,同时它的通行路线覆盖面广,在缓解交通拥堵,节能减排方面都有较好的作用,因此很多城市建议人们出门乘坐公交车[1]。
然而,大家乘坐公交车都知道,由于公交车上人多,有些吵杂,难免会坐过站,当然,经常是下错站。
这样以来,有可能造成一些不必要的损失,个人利益不能得到很好的保护。
基于此,我选择了这个课题--------公交车的报站系统设计。
目前语音报站器技术主要有以下四种[2]:
1)手动语音报站器。
这类控制器是由乘务人员按动进站按钮开始报站,出站时,由乘务人员按下出站按钮,开始预报下站的站名,通过序号来记录各个站点;
2)门控语音报站器。
它是将开门,关门时转换信号和语音报站器连接,开门和关门时自动报站;
3)无线信标语音报站器[3]。
它是在每个公交车站点设置发射信标点,公交车临近到站点左右会收到信标信号,开始自动报站,出站后信号消失,开始预报下一站,此报站器报站准确,但需要为每个站点组建无线发射信标,建设复杂、费用高,大部分站点无电源供应,公交车数量多时存在频率干扰问题,而且较严重,用户修改站点非常不方便,系统维护成本高。
GPS自动语音报站器[4]。
此报站器是在公交车上安装GPS自动语音报站器,自动识别站点并报告站点信息。
从技术层面讲,此方案从原理上解决了可靠性低的问题,问题是如何把一个先进的原理性的技术成果转化成为“产品化”的产品,还存在一些不足,如:
把要报站的语音内容事先固化到语音芯片中,这种设计在很多应用中普遍采用,但就这个项目而言,却十分不合理,因为它有悖于“通用化”设计原则。
其次,把显示屏要显示的报站内容也事先固化到车载控制系统内,从用户角度看,通过有线的串行口配置或更新一个已经安装完成的“移动式”的车载设备谈何容易。
由于各方面的原因,在本公交车报站系统中,我选择第一种。
不过为了更节约资源,不铺张浪费,能够大范围的使用,低成本的解决问题,不采用语音报站,而是用单片机上的蜂鸣器,通过“嘀”声提醒来代替。
本设计主要采用人工按键的操作方式,当公交车到达某一站是,乘务人员只需要按动按键,就可以使单片机的蜂鸣器发出“嘀”声提醒,同时,LCD液晶显示屏上显示本站名称。
并且又有下站名称的显示,人们也能看到下站的名称,从而做好下车准备。
2、课题设计方案制定
2.1课题设计的原理
AT89C51是一种带4KB闪烁可编程可擦除只读存储器(FlashProgrammableandErasableReadOnlyMemory,FPEROM)的低电压、高性能CMOS型8位微处理器,俗称单片机。
该器件采用ATMEL公司高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,能够进行1000次写/擦循环,数据保留时间为10年。
他是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
因此,在智能化电子设计与制作过程中经常用到AT89C51芯片。
其主要参数及引脚图及其功能如下:
主要性能参数:
1)与MCS-51产品指令系统完全兼容
2)4k字节可重擦写Flash闪速存储器
3)1000次擦写周期
4)全静态操作:
0Hz—24MHz
5)三级加密程序存储器
6)128*8字节内部RAM
7)32个可编程I/O口线
8)低功耗空闲和掉电模式
9)6个中断源
AT89C51是一个低电压,高性能CMOS8位单片机,片内含4Kbytes的可反复擦写的只读程序存储器(EPROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储器单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。
图1AT89C51引脚图
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏极开路双向1/0口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在Flash编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高.
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接出4TTTL门电流.P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故.在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口管脚被外部拉底,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在Flash编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在Flash编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用做对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用做外部存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H—FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET:
当/EA端保持高电平时,此间内部程序存储器。
在Flash编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
[5]
在对AT89C51的理解基础上,使用其上的蜂鸣器,以及利用LCD显示模块,设计公交车到站提示及下车准备系统。
2.2课题设计的技术方案
本公交报站系统工作原理为公交车每到一站,乘务人员通过按键中断的方式让报站器播报当前站名和下一站站名,提醒乘客到车下车,下一站下车的乘客做好下车准备,这样方便了乘客使其不至错过了车站;并带有LCD显示系统,告知乘客当前的站点。
在本次设计中,系统由以下几部分电路构成:
单片机主控电路、语音录放电路、液晶显示电路、按键电路、复位电路。
采用AT89C51单片机作为主控芯片,利用ISD4004数码语音芯片实现语音报站,显示采用LCD1602,键盘采用通用按键开关,简单易行且控制方便。
图2.1是整一个系统构成框图[6]。
图2系统总框图
3、课题设计方案实施
3.1主控单元模块功能
主控电路是由AT89C51单片机及其相关外围电路组成,AT89C51在系统中实现对蜂鸣器的控制,实现蜂鸣器的“嘀”声响起,并响应按键引起的中断,播放合适的语音,同时调用字符库在液晶上显示相关站点名称。
总之,AT89C51在系统中实现对整个系统的全局控制,是该系统的指挥部件。
结构如图3所示。
图3主控电路
3.2液晶显示单元模块
3.2.1LCD与LED的比较
LCD显示器的原文是LiquidCrystalDisplay,取每字的第一个字母组成,中文多称「液晶平面显示器」或「液晶显示器」。
其工作原理就是利用液晶的物理特性:
通电时排列变得有序,使光线容易通过;不通电时排列混乱,阻止光线通过,说简单点就是让液晶如闸门般地阻隔或让光线穿透。
与CRT显示器相比,LCD的优点主要包括零辐射、低功耗、散热小、体积小、图像还原精确、字符显示锐利等。
[7]当然,LCD与LED比较,相对于视角、清晰度、亮度来说,LED更胜一筹。
但就节能、大众化来说,还是选择了LCD。
不可避免的,由于时间的不允许,只好先研究相对简单的LCD。
3.2.2液晶模块LCD的功能介绍及电路设计
本系统液晶模块选用LCD1602。
控制电路选用单片机AT89C51,本电路/EA接高电平,没有扩展ROM。
LCD1602液晶显示模块的RS,RW,E分别与51单片机的P3^5,P3^6,P3^7端口连接,进行程序的读写数据,字符操作。
而D0~D7分别与51单片机的P0口进行连接,用来输出数据与字符。
如图4所示。
图4液晶显示电路
LCD1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式的显示模块。
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)。
表2.1是1602液晶模块内部的控制器共有11条控制指令。
表11602液晶模块内部的控制器共用11条控制指令
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
LCD1602液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图5是1602的内部显示地址。
图5LCD1602内部显示地址
3.2.3按键模块的功能介绍
在本次按键模块的设计中,我选择了拥有8个按键的矩阵式键盘模块。
矩阵式键盘的工作过程可分为两步:
第一步是CPU首先检测键盘上是否有按键按下;第二步是识别哪一个键按下。
1)检测键盘上是否有按键按下的处理方法是:
将列线送入全扫描字,读入行线的状态来辨别。
其过程如下:
PA口输出00H,即所有列线置成低电平,然后将行线的电平状态读入累加器A中。
如果有按键按下,总会有一根行线的电平被拉至低电平,从而使行输入状态不全为“1”。
2)识别键盘中哪一个键按下的处理方法是:
将列线逐列置成低电平,检查行输入状态,称为逐列扫描。
其具体过程如下:
从PA0开始,依次输出“0”,置对应的列线为低电平,然后从PC口读入行线状态,如果全为“1”,则按下的键不在此列;如果不全为“1”,则按下的键必在此列,而且是该列与“0”电平行线相交的交点上的那个键。
为求取编码,在逐列扫描时,可用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的首键码加列号得到当前按键的编码。
实际按键操作中,若无意中同时或先后按下两个以上的键,系统确认哪个键操作是有效的,完全由设计者的意志决定。
如视按下时间最长者为有效键,或认为最先按下的键为当前按键,也可以将最后释放的键看成是输入键。
不过微型计算机控制系统毕竟资源有限。
交互能力不强,通常总是采用单键按下有效,多键同时按下无效的原则(若系统没有复合键,当然应该另当别论)。
有时,由于操作人员按键动作不够熟练,会使一次按键产生多次击键的效果,即重键的情况。
为了排除重键的影响,编制程序时,可以将键的释放作为按键的结束。
等键释放电平后再转去执行相应的功能程序,以防止一次击键多次执行的错误发生。
键盘,作为向系统提供操作人员的干预命令的接口,以其特定的按键序列代表着各种确定的操作命令。
所以,准确无误地辨认每个键的动作及其所处的状态,是系统能否正常工作的关键。
多数键盘的按键均采用机械弹性开关。
一个电信号通过机械触点的断开、闭合过程,完成高、低电平的切换。
由于机械触点的弹性作用,一个按键开关在闭合及断开的瞬间必然伴随有一连串的抖动。
抖动过程的长短由按键的机械特性决定,一般为10~20ms。
为了使CPU对一次按键动作只确认一次,必须排除抖动的影响,可以从硬件及软件两个方面着手解决。
(1)硬件防抖动技术
通过硬件电路消除按键过程中抖动的影响是一种广为才用的措施。
这种做法,工作可靠,且节省机时。
下面介绍两种硬件防抖动电路。
①滤波防抖动电路
利用RC积分电路对干扰脉冲的吸收作用,选择好电路的时间常数,就能在按键抖动信号通过此滤波电路时,消除抖动的影响。
图6滤波防抖动电路
当键K未按下时,电容C两端电压均为0,非门输出为1。
当K按下时,由于C两端电压不可能产生突变。
尽管在触点接触过程中可能出现抖动,只要适当选取R1、R2和C的值,即可保证电容C两端的充电电压波动不超过非门的开启电压(TTL为0.8V),非门的输出将维持高点平。
同理,当触点K断开时,由于电容C经过电阻R2放电,C两端的放电电压波动不会超过非门的关闭电压,因此,非门的输出也不会改变。
总之,只要R1、R2和C的时间常数选取得当,确保电容C由稳态电压充电到开启电压,或放电到关闭电压的延迟时间等于或大于10ms,该电路就能消除抖动的影响。
②双稳态防抖动电路
用两个与非门构成一个RS触发器,即可构成双稳态防抖动电路。
设按键K未按下时,键K与键A端(ON)接通。
此时,RS触发器的Q端为高电平1,致使
端为低电平0。
此信号引致1#与非门的输入端,将其锁住,使其固定输出为1。
每当开关K被按动时,由于机械开关具有弹性,在A端将形成一连串的抖动波形。
而
端在K到达B端之前始终为0。
这时,无论A处出现怎样的电压(0或1),Q端恒为1.只有当K到达B端,使B端为0,RS触发器产生翻转,
变为高电平,导致Q降为0,并锁住门2,使其输出恒为1。
此时,即使B处出现抖动波形,也不会影响
端的输出,从而保证Q端恒为0。
同理,在释放键的过程中,只要一接通A,Q端就升为1。
只要开关K不再与B端接触,双稳态电路的输出将维持不变
图7双稳态防抖动电路
(2)软件防抖动方法
若采用硬件防抖动电路,则N个键就必须配有N个防抖动电路。
因此,当键的个数比较多时,硬件防抖动将无法胜任。
在这种情况下,可以采用软件的方法进行防抖动。
当第一次检测到有键按下时,先用软件延时(10~20ms),而后再确认该键电平是否仍维持闭合状态电平。
若保持闭合状态电平,则确认此键确已按下,从而消除了抖动的影响。
4、课题设计的仿真
本次设计的课题是基于单片机的公交车汉字显示报站系统,因此主要功能是完成公交车报站。
采用AT89C51单片机作为主控芯片,用蜂鸣器与LCD1602进行控制,实现嘀声报站,同时显示站名。
键盘采用通用按键开关,简单易行且控制方便。
在本次软件设计中,主要设计了4站,通过三个按键进行控制。
具体如下:
k1键——起始键
现象:
蜂鸣器嘀声响起,同时LCD1602上显示“HuanYingChengZuo”。
k2键——上一站,k3键——下一站,
现象:
num=1,蜂鸣器嘀声响起,同时LCD1602上显示“HuanYingChengZuo”。
num=2,蜂鸣器嘀声响起,同时LCD1602上显示“ShiYuanDaoLe”。
num=3,蜂鸣器嘀声响起,同时LCD1602上显示“HuaiNanXiZhanDaoLe”。
num=4,蜂鸣器嘀声响起,同时LCD1602上显示“QuanShanLuDaoLe”。
num=5,蜂鸣器嘀声响起;”,同时LCD1602上显示“QuanShanDaoLe”。
num=6,蜂鸣器嘀声响起,同时LCD1602上显示“XieXieChengZuo”。
4.1仿真软件介绍
4.1.1Proteus仿真软件介绍
Proteus软件是英国Lab-centerelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(软件仿真),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Kell和MPLAB等多种编译器。
Proteus软件具有其它EDA工具软件(例:
Multistate)的功能。
这些功能是:
(1)原理布图
(2)PCB自动或人工布线
(3)SPICE电路仿真
革命性的特点
(1)互动的电路仿真
用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
(2)仿真处理器及其外围电路
可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型
上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。
[8]
4.1.2Keil仿真软件介绍
keiluvision4C51软件是目前功能最强大的单片机c语言集成开发环境。
下面我们通过图解的方式来KeilC51软件的使用教程,学习最简单的,如何输入源程序→新建工程→工程详细设置→源程序编译得到目标代码文件。
第一步:
双击KeiluVision2的桌面快捷方式(图8),启动Keil集成开发开发软件。
软件启动后的界面如图9所示。
图8启动KeiluVision4单片机集成
图9软件启动后的界面
第二步:
新建文本编辑窗。
点击工具栏上的新建文件快捷按键,即可在项目窗口的右侧打开一个新的文本编辑窗。
第三步:
新建立Keil工程。
如图6所示,点击"工程"→"新建工程"命令,将出现保存对话框。
第四步:
选择CPU型号。
如图8所示,为工程选择CPU型号,本新建工程选择了ATMEL公司的AT89C51单片机。
第五步:
ADD添加工程。
如图10.
图10新建文本编辑窗
第六步:
建立hex文件,与Proteus级联。
[9]
4.2课题设计仿真实现
本次单片机软件仿真系统我选择了Proteus。
在整个系统软件设计中,从液晶显示以及按键这两大部分进行综合考虑。
LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
其实用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
在本次设计中,LCD1602液晶显示模块的RS,RW,E分别与51单片机的P3^5,P3^6,P3^7端口连接,进行程序的读写数据,字符操作。
而D0~D7分别与51单片机的P0口进行连接,用来输出数据与字符,这样就可以在液晶上显示出自己想要的字符[10]。
在此次仿真过程中,总共设计了4个按键,k