汽车信号灯和里程表单片机模拟系统讲解Word文件下载.docx
《汽车信号灯和里程表单片机模拟系统讲解Word文件下载.docx》由会员分享,可在线阅读,更多相关《汽车信号灯和里程表单片机模拟系统讲解Word文件下载.docx(58页珍藏版)》请在冰豆网上搜索。
2.整体方案设计
汽车信号灯和里程表单片机模拟系统以AT89S52单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个汽车信号灯和里程表单片机模拟系统。
该系统通过单片机扩展8255接口,将A口连接开关量模块用以控制各个信号灯的输入,C口连接信号灯显示相应的信号。
单片机的P1口作为液晶显示的数据输出口以显示相应的里程数和信号灯,P3口作为液晶显示的控制端口。
汽车信号灯和里程表单片机模拟系统的结构图如图2-1所示。
图2-1汽车信号灯和里程表单片机模拟系统结构图
本系统硬件主要由开关量、LED灯显示系统、12864液晶显示系统、外部脉冲输入等几部分组成。
各模块的主要功能如下:
(1)开关量模块作为信号灯的输入模块,用来实施对远光灯、近光灯、刹车灯、倒车灯、左转向、右转向灯以及双闪灯的控制。
8个开关从低位到高位依次定义为远光灯、近光灯、刹车灯、倒车灯、左转向、右转向、双闪灯的控制开关,最高位的开关为复位开关。
(2)LED灯显示系统的8个等从低位到高位分别定义为远光灯、近光灯、刹车灯、倒车灯、左转向、右转向灯以及双闪灯,其中双闪灯占用最后两个LED灯。
远光灯、近光灯、刹车灯、倒车灯的开关置为高电平时,相应的灯亮;
左转向、右转向灯的开关置为高电平时,相应的转向灯闪烁;
双闪灯的开关置高电平时,两个双闪灯一起闪烁显示,且其他开关的任何状态均无效。
(3)12864液晶显示系统负责里程数和远光灯、近光灯、左转向、右转向灯及双闪紧急情况的文字显示。
双闪灯亮时,停止里程计数,并闪烁“紧急!
”字样。
其他情况下,以上四个灯哪个亮显示对应的文字,且左右转向为动态显示,远近光灯为动态显示。
(4)外部脉冲输入是由试验箱上的直流电机无极调速产生脉冲,连接到T0计数器,且每计数12次,产生T0中断,而相关的里程计数对应加一。
系统的整体设计方案设计图如图2-2所示。
图2-2系统的整体方案设计图
3.系统硬件电路设计
3.1时钟电路
在51单片机XTAL1和XTAL2外接晶振就构成了内部振荡器
图3-1时钟电路
3.2复位电路
复位方式为上电自动复位。
当单片机上电后后,复位动作自动完成。
图3-2复位电路
3.3LED显示电路
LED显示电路采用扩展的8255芯片,以其A口作输入C口作输出的方式工作。
课程设计中,用试验箱上LED显示模块作为车辆运行的信号灯,以及,试验箱上开关模块中开关的变化作为控制信号灯的信号,并用汇编程序控制信号灯的亮灭状态。
8255芯片中,A0-A7为PA口,C0-C7为PC口,D0-D7为数据口,剩下的为其控制端。
其与单片机的接口电路如图3-3所示。
图3-38255电路与信号灯、开关量的连接图
3.4液晶显示与蜂鸣器电路
单片机中的P10-P17为12864液晶的数据端口,P3.0-P3.3和P3.5为12864的控制端,蜂鸣器一端接双闪灯的C7口,另一端接地。
图3-4液晶显示器与蜂鸣器电路
3.5单片机控制模块
单片机的P0接地址译码芯片,且P3.4为外部计数端口,计外部直流电机产生的脉冲数,计算里程数。
图3-5单片机控制模块
4.系统程序设计
4.1主程序流程图
首先进行系统的初始化,LED灯全灭,液晶显示器上显示里程数为0,并开始计数。
拨动开关可使相应的灯亮或者闪烁显示。
有远光近光左右转向灯亮情况时,在液晶显示器上显示对应的文字,当左右转向灯均开,则俩灯均不亮,为互锁状态,同理远近光灯也是。
在12864显示液晶上远近光为静态显示,左右转向为闪烁显示,且其闪烁频率和左右转向等的闪烁频率一致。
系统主程序流程图如图4-1所示。
图4-1主程序流程图
4.2LED信号灯子程序流程图
LED显示系统的8个灯从低位到高位分别定义为远光灯、近光灯、刹车灯、倒车灯、左转向、右转向灯以及双闪灯,其中双闪灯占用最后两个LED灯。
远光灯、近光灯、刹车灯、倒车灯的开关置为高电平时,相应的等亮;
双闪灯的开关置高电平时,两个双闪灯一起闪烁显示,且不理会其他开关的高低电平。
图4.2LED信号灯子程序流程图
4.3液晶显示信号灯状态子程序路程图
液晶显示信号灯状态子程序流程图如图4-3所示。
图4-3液晶显示信号灯状态子程序路程图
4.4液晶显示里程数子程序流程图
通过计数器T0对外部脉冲进行计数,T0工作在方式一。
给T0一个初值,使其每计数12个脉冲便产生中断,里程数加一。
当双闪灯开启时停止计数,双闪灯灭时继续计数。
图4-4液晶显示里程数子程序流程图
5.系统调试
5.1Proteus软件仿真调试
(1)调试过程
首先用Proteus软件结合我们实验箱的资源,绘制出其电路图,并用Keil软件运行汇编程序,产生HEX文件,导入仿真图的单片机中,点击运行按钮,进行软件仿真。
其仿真过程图如下:
图5-1整体仿真电路图
由于有8个开关,和8个LED灯,故我们将其安排在底部,再由于此系统连线复杂,故我们对其均采用了总线的连接方式,减少了连线复杂带来的视觉疲劳,也避免产生连线错误。
图5-2开关处于全关状态,里程表计数
上图为程序运行起来后的状况,所有开关均处于关状态,T0一上电,便开始计数,里程数递加。
图5-3远光灯,倒车灯,右转向开启,右转向灯闪烁,右转向文字闪烁
如上图所示,里程数已经计数到466了,此时打开远光开关,右转向开关,倒车开关,右转LED灯闪烁,12864上面“右转向”文字闪烁,“远光灯”文字静态显示,说明运行正常。
图5-4近光灯,左转向开启,左转向灯闪烁,左转向文字闪烁
图5-5远近光灯都开时,则俩灯都不亮
如上图,此时远近光灯均开,则远近光LED灯均不亮,此为其互锁状态,左转向开关接高电平,左转向闪烁显示。
图5-6开双闪
当打开双闪开关时,俩个双闪LED灯闪烁,其他6个灯全部灭了,且里程数停止计数,在12864上面显示闪烁的“紧急!
图5-7开复位开关
当打开复位开关后,对12864进行清屏,且把里程数重新置为0,所以的8个LED灯均亮,当把复位开关再掰为低电平时,则退出复位,开始计数。
(2)调试时应注意的问题
在调试中不应该将开关的名称和LED灯的名称取相同,在使用总线时要小心,注意标号要标清楚,且能表明所在管脚的大概含义。
在选择文件时,不知其名字时,可以XX查询,方便快速找到想要的芯片。
(3)分析遇到的问题及问题的解决方法
1)在给开关和LED灯命名时,命重了,就发现8255的PA口读不了开关量开关的状态,后来经过仔细查看,发现是重名会使开关失去作用,遂改名了。
2)由于实验箱上是由P0和P2来控制8255的,但是由于找不到试验箱上译码的芯片,遂查看单片机原理的课本,将电路连成如书上的样式,只用P0口来控制数据和地址,这样每次要把仿真的程序倒到实验箱中进行实物仿真,就必须对8255的PA,PC和控制器地址进行修改。
在仿真中,PA,PB.PC,控制器的地址为#0FF7CH,#0FF7DH,#0FF7EH,#0FF7FH,而实验箱中对应的地址分别为#0FF28H,#0FF29H,#0FF2AH,#0FF2BH.
5.2硬件调试
1)LED调试电路
由于先编写了液晶显示模块,占用了P1和P3的5个IO口,所以在编灯的程序时,就想用P0口作为输出口,但是程序运行不成功,经过几番波折,终于发现是P0口驱动力不足导致的。
由于P0口为双向口,且外部没加上拉电阻,不能将其当做普通的准双向的IO口使用,然后我们翻阅实验箱使用说明,得知P0和P2均连接到82C55的数据端和控制端,又考虑到82C55有PA,PB,PC三个IO口,刚好够我们使用,于是我们用了8255扩展,用PA口作为输入,PC口作为输出。
然后再后面编LED灯时,我们误以为其为高电平点亮的,然后发现其实际是为低电平点亮的,遂将输出给PC口的值全部取反后才输出。
2)液晶显示电路
最初以为试验箱的12864是有带字库的,后来发现其没带字库,最后上网用汉字取模软件将所需用的字的字码表导入,才实现了汉字的输出。
在后面调试远近光灯的显示时,一直发现将远光灯关掉时,液晶上仍然显示着,后才发现要在12个查询语句中那些没显示远近关灯的程序里,给远近光灯的显示空间上写上空数据,以使其得到消除。
在硬件的调试过程中还发现,在我们没对其写的液晶空间上,有时会出现乱码覆盖,后才发现是由于在显示过程中由于对累加器ACC赋值不当,导致数据溢出,覆盖到其他未控制的空间,最终对累加器的赋值进行改进,修复了大部分情况,不过偶尔也会出现溢出情况(这些乱码大都出现在里程数计数到2000多后),这一问题仍需要以后慢慢研究。
1)每次连接好线路并检查无误后再打开实验箱电源,以免破坏实验箱电路,并注意要保护好仿真器的插口。
2)由开关量开关输入给PA口的连线颖看清楚哪个对应的是高位,哪个对应的是低位,以免高低位错乱。
3)当发现程序烧不进单片机时,要检查是否将仿真器的开关掰上。
1)遇到程序烧不进去时,我就将单片机重新插一遍,或是将仿真器开关重新打开就好了。
2)遇到12864产生乱码,后来发现是因为12864的管脚插松了,紧一紧就又正常了。
3)有次遇到某个LED灯不管开关怎样都不亮,后来发现是连线断了,重新换一根就好了。
6.程序清单
///////////////////端口定义//////////////////////////
OUTPUTEQUP1;
液晶数据口定义
CSAEQUP3.5
CSBEQUP3.3
RSEQUP3.0;
液晶控制口定义
RWEQUP3.1
EEQUP3.2
FUNEQU01H;
LED灯口定义
COMEQU21H
DATEQU22H
CODESEQU23H
COLUMNEQU24H
PAGEFEQU25H
CPAGEEQU26H
CCOLUMNEQU27H
COLUMN2EQU28H;
液晶变量定义
PAGEF2EQU29H
CPAGE2EQU2AH
CCOLUMN2EQU2BH
COUNTEQU2CH
COUNT1EQU2DH
COUNT2EQU2EH
LOADEQU2FH;
拨码开关口定义
COLUMN1EQU30H
PAGEF1EQU31H
CPAGE1EQU32H
CCOLUMN1EQU33H
COLUMN3EQU34H
PAGEF3EQU35H
CPAGE3EQU36H
CCOLUMN3EQU37H
SECONDEQU45H
MINUTEEQU46H;
计数器变量定义
HOUREQU47H
SHUJI1EQU50H
SHUJI2EQU51H
SHUJI3EQU52H;
6位里程数定义
SHUJI4EQU53H
SHUJI5EQU54H
SHUJI6EQU55H
BT0BIT20H.0
BT1BIT20H.1
BT2BIT20H.2;
标志位定义
BT3BIT20H.3
BT4BIT20H.4
BT5BIT20H.5
BT6BIT20H.6
////////////////////////////////////////////////////
ORG0000H
LJMPSTART
ORG000BH;
程序地址
LJMPINTP0
ORG0100H
;
********************主程序开始*************************
START:
MOVTMOD,#05H
MOVTH0,#0FFH;
计数器初值
MOVTL0,#0FAH
MOV45H,#00H
MOV46H,#00H
MOV47H,#00H
MOV50H,#00H;
6位里程数设初值
MOV51H,#00H
MOV52H,#00H
MOV53H,#00H
MOV54H,#00H
MOV55H,#00H
LCALLINT;
调用初始化子程序
LCALLCLEAR;
调用清屏子程序
LCALLDE
MOVDPTR,#0FF2BH;
8255控制字初始化
MOVA,#90H;
A输入C输出
MOVX@DPTR,A
//////////////////////////////////////////////
MAIN:
LCALLCHULI
LCALLDISPLAY;
调用显示程序
MOVCOM,#00
LCALLPRR0
LCALLPRM0
LCALLDISPLAY55
MOVDPTR,#0FF28H;
PA口
MOVXA,@DPTR
MOVLOAD,A
ANLA,#33H
MOVFUN,A
MOVA,LOAD
ANLA,#80H
CJNEA,#80H,PXSTART
AJMPSTART
PXSTART:
ANLA,#40H
CJNEA,#40H,PX00
CLREA;
满足只是双闪为高条件
LCALLSETALL
LCALLSHAN1O
LCALLDISPLAY33
MOVR2,#20H
LCALLDELY
LCALLSHAN1X
LCALLDISPLAY5
LCALLDISPLAY44
AJMPMAIN
SETALL:
MOVDPTR,#0FF2AH;
关所有灯的子程序
MOVA,#0FFH
RET
SHAN1O:
MOVDPTR,#0FF2AH
MOVA,#3FH
SHAN1X:
MOVDPTR,#0FF2AH
PX00:
SETBEA
SETBET0
SETBTR0
PX01:
MOVA,FUN
CJNEA,#00H,PX02
LCALLDISPLAY44;
左右转向灯均关,远近光灯均关
ANLA,#0CH
CPLA
MOVDPTR,#0FF2AH
MOVX@DPTR,A
LJMPMAIN
PX02:
CJNEA,#01H,PX03
LCALLDISPLAY3
MOVA,LOAD;
左右转向灯均关,远光灯开
ANLA,#0DH
PX03:
CJNEA,#02H,PX04
LCALLDISPLAY4
ANLA,#0EH;
左右转向灯均关,近光灯开
PX04:
CJNEA,#03H,PX05
MOVX@DPTR,A;
左右转向灯均关,远近光灯均开
PX05:
CJNEA,#10H,PX06
ANLA,#1CH
LCALLDISPLAY1;
左转向灯开,远近光灯均关
LCALLDISPLAY11
LJMPMAIN
PX06:
CJNEA,#11H,PX07
MOVA,LOAD;
左转向灯开,远光灯开
ANLA,#1DH
LCALLDISPLAY1
LCALLDELY
PX07:
CJNEA,#12H,PX08
ANLA,#1EH
CPLA;
左转向灯开,近光灯开
ANLA,#0EH
PX08:
CJNEA,#13H,PX09
MOVDPTR,#0FF2AH;
左转向灯开,远近光灯均开
LCALLDELY
PX09:
CJNEA,#20H,PX10
ANLA,#2CH
右转向灯开,远近光灯均关
LCALLDISPLAY2
LCALLDISPLAY22
PX10:
CJNEA,#21H,PX11
ANLA,#2DH
CPLA;
右转向灯开,远光灯开
PX11:
CJNEA,#22H,PX12
MOVA,LO