汽车信号灯和里程表单片机模拟系统设计.docx

上传人:b****5 文档编号:30161640 上传时间:2023-08-05 格式:DOCX 页数:26 大小:179.85KB
下载 相关 举报
汽车信号灯和里程表单片机模拟系统设计.docx_第1页
第1页 / 共26页
汽车信号灯和里程表单片机模拟系统设计.docx_第2页
第2页 / 共26页
汽车信号灯和里程表单片机模拟系统设计.docx_第3页
第3页 / 共26页
汽车信号灯和里程表单片机模拟系统设计.docx_第4页
第4页 / 共26页
汽车信号灯和里程表单片机模拟系统设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

汽车信号灯和里程表单片机模拟系统设计.docx

《汽车信号灯和里程表单片机模拟系统设计.docx》由会员分享,可在线阅读,更多相关《汽车信号灯和里程表单片机模拟系统设计.docx(26页珍藏版)》请在冰豆网上搜索。

汽车信号灯和里程表单片机模拟系统设计.docx

汽车信号灯和里程表单片机模拟系统设计

沈阳航空航天大学

课程设计

(论文)

 

题目汽车信号灯和里程表单片机模拟系统设计

 

班级84070102

学号2008040701049

学生姓名冯天宇

指导教师胡立夫

目录

0.前言1

1.总体方案设计1

2.硬件电路设计2

2.1单片机主机系统电路的设计2

2.2汽车信号灯模拟系统电路的设计3

2.2.1输入口电路的设计3

2.2.2输出口电路的设计4

2.3汽车里程表模拟系统电路的设计5

3.软件编程7

3.1T1计数子程序的设计9

3.2外部中断0子程序的设计9

3.3外部中断1子程序的设计10

3.4里程数处理及显示子程序的设计11

4.系统调试与分析11

4.1软件调试11

4.2软硬联调12

4.3调试问题及原因分析12

5.结论及进一步设想13

参考文献13

课设体会14

附录Ⅰ元件清单15

附录Ⅱ总体电路图16

附录Ⅲ源程序17

 

汽车信号灯和里程表单片机模拟系统设计

冯天宇沈阳航空航天大学自动化学院

摘要:

本文设计的是基于单片机的汽车信号灯和里程表模拟系统,本系统设计以AT89C51单片机为核心,分成两个模块,一是信号灯模拟系统:

此系统采用多路采集电路,实现12个开关分别控制12个灯的状态;另一个是里程表模拟系统:

此系统主要实现对外部脉冲的计数,并用LED数码管将其结果动态显示。

其中采用多路采集电路可以减少单片机端口的使用,简化系统电路和软件编程;LED数码管的动态显示可以及时准确的将里程数显示出来,在实际应用中很方便。

关键词:

AT89C51单片机;多路采集;脉冲计数;动态显示

0.前言

随着城市改革开放的进一步深化,汽车行业迅速发展,汽车里程表的市场需求量也大大增加,同时对汽车的性能要求也越来越高。

经过了早期的机械齿轮结构和采用手摇计算机与机械结构相结合的半机械半电子化的里程表后,全电子化里程表终于应运而生了。

因为单片机兼容性强,性能价格比高,且软件、硬件应用设计资源资料丰富,它以其极高的性能价格比受到人们的重视和关注。

单片机以及外围芯片的不断发展促进了里程表的发展,而且随着电子技术的发展以及对里程表的不断改进和完善,也产生了诸多附加功能。

因此以单片机为核心的里程表以其体积小,抗干扰能力强,对环境的要求不高,价格低廉,可靠性高,开发较为容易,并可获得较高的经济效益等特点,很快占有了汽车里程表领域的市场。

本课题就如何利用单片机和其他元器件构成汽车信号灯和里程表模拟系统做一些研究。

汽车信号灯模拟系统是实现12个开关分别对12个灯的控制,此系统采用多路采集电路,节省了端口的资源;汽车里程表模拟系统是实现里程计算及LED动态显示,使里程数一目了然。

1.总体方案设计

整个电路是采用一个AT89C51单片机芯片控制两个分电路,实现灯的状态控制和LED数码管动态显示两个功能。

其中单片机的P1口为数据采集口,两个74LS541芯片输入端分别接6个开关,输出端接P1口;两个74LS373芯片输出端分别接6个灯,输出端也接P1口,即组成了信号灯模拟系统电路,实现12个灯分别控制12个开关的功能。

而里程表模拟系统电路主要由4位LED数码管和单片机组成,外部脉冲接在P3.5口,采用单片机定时器T1进行计数,两个按键分别接P3.2口和P3.3口,控制计数器的开始和停止;LED数码管的段码口与P0口相连,位码口与P2.0-P2.3相连,实现了4位数显。

汽车信号灯和里程表单片机模拟系统基本组成框图如图1所示。

 

图1信号灯和里程表单片机模拟系统基本组成框图

2.硬件电路设计

由单片机硬件设计原理可知:

(1)尽可能采用功能强的芯片,以简化电路;

(2)留有余地。

在设计硬件电路时,要考虑到将来修改、扩展的方便。

因此在AT89C51芯片本身的最小系统需求外,还选择了74LS541和74LS373进行了简单的扩展。

2.1单片机主机系统电路的设计

单片机主机系统原理图如图2所示。

 

图2单片机主机系统原理图

由图2可知,此系统有两部分:

时钟电路和复位电路。

时钟电路:

AT89C51内部有一个用于构成震荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。

这个放大器与作为反馈元件的片外晶体或陶瓷谐振器一起构成一个自激振荡器。

外接晶体以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。

(晶体可在1.2MHz~12MHz之间任选,电容C1和C2的典型值在20pF~100pF之间选择)

复位电路:

本系统的复位电路是采用按键复位的电路,复位输入引脚RET为AT89C51提供了初始化的手段。

当89C51的ALE及PSEN两引脚输出高电平,RET引脚高电平到时,单片机复位。

按下按钮,则直接把+5V加到了RET端从而复位称为手动复位。

复位后,P0到P3并行I/O口全为高电平,其它寄存器全部清零,只有SBUF寄存器状态不确定。

2.2汽车信号灯模拟系统电路的设计

独立键盘与74LS541相连接至P0口,用于高低电平的输入。

LED灯组与数据选择器74LS373相连接至P0口,用于输出各灯的状态。

没有开关闭合时,12个LED灯全部处于熄灭状态。

开关K1~K12按下时,分别对应的左转,右转,左转刹车,右转刹车,近光灯,远光灯等状态。

这两部分组成一多路采集系统。

此系统减少了端口的使用,简化了电路,方便了电路以后的使用和修改。

2.2.1输入口电路的设计

输入口电路是采用两片74LS541芯片进行扩展。

74LS541芯片的引脚排列图如图3所示。

 

图374LS541芯片的引脚排列图

74LS541芯片内部有2个4位的三态缓冲器,

为三台门的门控端,低电平有效,表1为它的功能表。

D0~D7为三态门的输入,Q0~Q7为三态门的输出。

同时输入低电平时,74LS541的输入和输出状态相同;当

输入高电平时,74LS541输入与输出之间呈高阻态。

 

表174LS541功能表

三态门输入

三态门输出

L

L

L

L

L

H

×

高阻

H

L

×

高阻

图4是本设计采用74LS541扩展的输入口电路。

 

图4采用74LS541扩展的输入口电路

在图中,开关K1~K12的状态读入单片机中,开关闭合时,输入低电平;开关断开时,输入高电平。

输入数据通过数据总线(P1口)与单片机相连,当P2.4=0且P2.5=0(即

为低电平)时,输入与输出状态相同。

2.2.2输出口电路的设计

输出口电路是采用两片地址锁存器74LS373芯片分别于6个LED灯连接。

 

图574LS373芯片的引脚排列图

74LS373是三态输出的8位锁存器,

为输出控制端,

为使能端,D0~D7为输入,Q0~Q7为输出。

表2为它的功能表。

=1时,输出为高阻态;当

=0,LE出现高电平时,输出端随输入端变化而变化;LE端电平由高变低时,输出端8位信息被锁存。

表274LS373功能表

0

1

1

1

0

1

0

0

0

0

×

1

×

×

高阻

图6是本设计采用地址锁存器74LS373芯片与LED灯组成的输出口电路。

 

图6用74LS373扩展输出口的电路

在图6中,数据由单片机的P0口读出,经锁存器送至LED灯,送低电平灯亮,高电平灯灭。

=0且LE=1时,灯的状态随数据的变化而变化;当

=0且LE由高电平变到低电平时,信息被锁存,灯的状态不受数据变化的影响;

2.3汽车里程表模拟系统电路的设计

函数信号发生器输出脉冲作为输入接至P3.5口,由单片机内部计数器T1进行计数,选用7段4位共阳极数码管,将它的A~DP引脚与单片机的P0口相连,4个位选端分别与单片机的P2.0~P2.3口相连组成显示电路,实现里程数的动态显示。

单片机的两个外部中断引脚P3.2(

)和P3.3(

)分别于按键

相连,作为暂停键和开始键,控制数码管显示状态。

在多位LED显示时,为了简化电路,节省I/O口,降低成本,动态显示方案具备一定的实用性,也是目前单片机数码管显示较为常用的一种显示方法。

在本设计课题中采用的是7段4位共阳极LED数码管,它的引脚图如图7所示。

 

图77段4位共阳极LED数码管引脚图

7段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,7段数码管分共阴和共阳两种显示方式,本设计中采用共阳极显示器。

共阳极显示器的发光二极管的阳极连接在一起,当公共阳极接电源+5V时,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。

通常将控制发光二极管发光的8位字节数据编码称为LED显示的段选码,要构成多位LED显示时,除需要段选线外,还需要位选线,以确定段选码对应的显示位,位选线控制第几个LED显示。

段选线控制显示字形。

8个阴极分别与8个限流电阻相连,在接到相应的电路中(发光二极管的工作电流选取在10-20ma,限流电阻太大,数码管会太亮),其连接图如图8所示。

图87段共阳极LED连接图

表模拟系统电路如图9所示,当信号发生器输出脉冲时,内部定时器T1开始计数,脉冲数相当于里程数,脉冲数通过单片机内部算法经数码管显示结果。

按键

为暂停键,模拟汽车停止时,里程表显示此时里程数不变;按键

为开始键,模拟汽车重新启动时,里程表继续上次里程数计数。

 

图9汽车里程表模拟系统电路

3.软件编程

在单片机系统的程序的设计开发中,单片机就如同整个系统的交通中枢,而程序就是组成交通中枢的条条大道,各个部分的模块化的程序就是整个系统的组成成份。

软件编写的好坏,语句运用的是否简洁直接关系单片机的工作效率。

在各个模块化的程序中尽量用最少的语句作最多的事情,不让语句出现歧义,这样就可以使整个程序可以在系统中更好的运行,使单片机工作效率大大的提高。

本系统编程部分是利用C语言完成的,采用模块化的设计方法,各子程序作为实现各部分功能和过程的入口,完成对灯的控制,脉冲计数和LED动态显示等部分的设计。

该课题的软件设计采用了模块化设计的思想即将程序划分为若干个相对独立的功能模块,画出每一个功能模块的详细流程图,并根据流程图编写程序,最后按照软件设计的总体结构框图,将各模块连接成一个完整的主程序。

在主程序的设计中要合理地调用各模块程序。

模块化设计的优点是:

无论是硬件还是软件,每一个模块都相对独立,故能独立地进行设计、研制、调试和修改,从而使复杂的工作得以简化。

模块之间的相互独立也有助于研制任务的分解和设计人员之间的分工合作,这样可提高工作效率和仪表的研制速度。

本课题设计要求共有两个模块,分别为12个开关控制12个灯状态子程序和四位LED数码管动态显示子程序。

本设计分别对以上各模块进行设计和调试,然后把它们连接起来,进行总调。

完成设计要求。

下面就对本次设计的软件部分作些介绍。

如图10所示为软件总体流程图。

子程序包括:

T1计数程序的设计,外部中断0子程序的设计,外部中断1子程序的设计,里程数处理及显示子程序,延时子程序。

下面就其主要部分分别分析。

T1计数程序是将信号发生器产生的脉冲接入计数器T1口,然后计数器开始计数,当计数到一定数目时,计数器产生溢出中断。

外部中断0子程序和外部中断1子程序即为按键子程序,分别实现对计数器暂停和重新启动。

里程数处理及显示子程序是将计数器接受的脉冲数进行数据处理,将数据处理的结果送显示器显示。

延时子程序是为了数码管能够稳定的显示里程数。

 

图10软件总体流程图

3.1T1计数子程序的设计

由于本设计采用计数器T1,当计数器计满后,就会产生溢出,因此编写子程序。

本设计将计数器T1设置为工作方式1,当计数到0FFFFH时,在计一个数计数器就会产生溢出,采用此方法就可以计得脉冲数。

如图11为此程序的流程图。

 

图11T1计数子程序流程图

3.2外部中断0子程序的设计

在单片机外部中断0引脚处(

)接一按键

,控制数码管的停止状态。

当按键

被按下时,将会产生一外部中断,使计数器T1停止计数,数码管保持当前数值不变,即模拟汽车停止的情形。

如图12为此程序的流程图。

 

 

图12外部中断0子程序流程图

3.3外部中断1子程序的设计

在单片机外部中断1引脚处(

)接一按键

,控制数码管继续计数的状态。

在按键

已经被按过的前提下,当按键

被按下,将会产生一外部中断,使计数器T1再次启动,继续计数,数码管接着上次数值计数,即模拟汽车再次启动的情形。

如图13为此程序的流程图。

 

图13外部中断1子程序流程图

3.4里程数处理及显示子程序的设计

将计数器T1所计得的里程数赋给变量count,利用分离法将个、十、百、千位上的数分离出来,分别赋给变量count4、count3、count2、count1。

通过查表,将要显示的数送给数码管显示。

如图14为此程序的流程图。

 

图14里程数处理及显示子程序流程图

4.系统调试与分析

系统的硬件、软件独调和系统调试是系统最后的步骤也是系统特别重要的环节,因为设计和开发出的系统是否成功,功能是否完善只有在这里才能显现出来。

所以为了保证设计系统能够正常工作,必须对软件和硬件部分的每一个部分进行调试和分析。

本章详细的介绍了软件调试和软硬联调的过程,并对调试结果进行了介绍和分析。

4.1软件调试

本次设计采用的是keil仿真器进行软件调试,此系统可以开发应用软件,以及对硬件电路进行诊断、调试等。

它的具体功能是可以进行CPU仿真,可以单步、跟踪、断点和全速运行,而且,程序的编译过程中,可以对设计软件进行自诊断,并自动给出故障原因。

同时用户调试程序时,可以通过窗口观察寄存器的工作状况,以便及时发现和排除编程中可能出现的错误。

软件的调试是利用keil软件,模块化调试,通过观察存储单元数据的变化,查找并解决程序的语法和逻辑错误,具体的调试步骤如下:

1.把系统的各个模块在仿真软件中逐个调试,如信号灯模块、显示模块等。

2.对各个需要赋值模块调试时,赋入初值,单步调试,观察数据窗口,看输出结果是否为设计时想要的结果。

3.把各个模块组合起来,全速运行,看程序是否能流畅的,是否能实现设计的系统的所有功能。

4.2软硬联调

本设计是采用Proteus软件实现电路图设计和仿真的,Proteus软件与Keil软件联合使用,实现设计要求。

在Keil软件中创建新文件,输入所编写的c语言程序并保存,在编译源程序无误后,会产出相应的”.HEX”文件;将所生成的”.HEX”文件加载到已绘制好的Proteus原理图中,使Proteus与Keil真正连接起来,实现联合调试。

调试结果如图15所示。

图15调试结果图

 

4.3调试问题及原因分析

在本课题设计和调试过程中遇到了一些问题,下面就将遇到的问题和解决方法作一概要的叙述。

1.I/O端口不够用

在设计信号灯电路过程中,由于开关和灯的数量较多,占用了单片机的大部分引脚,后续电路无法连接。

因此,本课题在电路中加了两个缓冲器74LS541和地址存储器74LS373,用于I/O端口的扩展,减少了I/O端口的使用数量,也方便了后续电路的功能扩展。

2.信号灯不亮

在软硬联调信号灯模拟系统时,开关闭合,对应的灯不亮,而程序编译无误。

通过仔细的检查电路,得知选用二极管的限流电阻阻值过大,选用阻值小一些的电阻便解决了此问题。

3.4位数码管显示混乱

在调试里程表模拟系统时,数码管显示的结果为乱码。

经认真检查,发现两个错误。

一是4位数码管选用错误,本设计应选用共阳极数码管;另一个是总线标记重复,总线标记时,不区分英文大小写。

5.结论及进一步设想

该课题的主要任务是设计一个以89C51单片机为核心的汽车信号灯和里程表系统。

通过联调,实验验证了系统的可行,能满足设计要求,达到设计的指标,最后实现了对信号灯状态的控制和里程计算并用LED显示的目的。

这个开发过程主要包括了硬件电路仿真设计和软件编程两个部分。

从确定课设题目,到查阅质料确定总体方案设计,硬件电路仿真的设计,硬件电路的优化,软件的设计,软件的优化,检验仿真电路,调试软件程序,到最后的软硬件联调,其中的每一个过程都是精心设计、仔细完成的。

并且在这次设计中,我了解了单片机的各种问题以及单片机外围电路的设计,对外围电路所涉及的芯片也有了较深刻的理解。

同时对单片机的优点有了很好的认识。

虽然本次设计的系统具有电路简单、性能可靠、成本低,还有优化的程序等特点,但是该设计还是不够完善及人性化,比如加上AT24C02掉电存储芯片就可以在电源断开的时候,存储当前信息;还有计费功能,用微型打印机输出行驶里程总数和里程计费额,再加上语音的提示功能,则可能更会有生命力。

总之,智能仪器被广泛应用于工程之中,而汽车领域也被广泛用于实际的应用中,这也就是智能仪器的工程应用价值。

 

参考文献

[1]刘复华.单片机及其应用系统.北京:

清华大学出版社,1992

[2]周坚.单片机C语言轻松入门.北京:

航空航天大学出版社,2006

[3]侯玉宝,陈忠平.基于Proteus51系列单片机设计与仿真.北京:

电子工业出版社,2008

[4]戴佳,苗龙,陈斌.51单片机应用系统开发典型实例.北京:

中国电力出版社,2005

[2]张立科.单片机典型模块设计实例导航.北京:

中国邮电出版社,2006

课设体会

在老师的精心指导下两周的课程设计结束了,通过此次课程设计的训练,我深刻的体会到单片机技术是一门工程特点和实践性很强的学科。

刚刚拿到题目时我觉得很盲目,根本无从下手,但是经过老师的指导以及多方面查询资料,我终于得出了方案,完成了这次课程设计。

这次课程设计给我们提供了一个应用自己所学知识的机会,从到图书馆查找资料到对仪器的设计、调试,再到最后的成型,都对我所学的知识进行了检验。

不仅使学过的知识得到了巩固与复习,同时也锻炼了我们使用仪器和计算机辅助软件的技能。

但更重要的是把理论知识与实际联系在了一起,加强了思考问题的的完整性和可行性,锻炼了我的思考能力和动手能力。

使学习变成了一种乐趣,使知识形象具体地被掌握。

同时也为作好毕业设计做好准备工作。

两周的课程设计,通过自己的查资料,网上的搜索材料,同学的帮忙,做出个自己还算满意的课程设计。

在良好的学习环境中我们互相探讨问题,学习氛围很浓。

在这段课设时期里,

在课设期间我遇到了一些困难,老师都耐心的给我讲解,使我进一步理解课题,编写出程序。

他丰富的实践经验和广泛的专业知识使我受益非浅,在此表示衷心地感谢!

 

[2011年7月19日完成]

附录Ⅰ元件清单

元件名称

型号

数量

单片机

AT89C51

1

缓冲器

74LS541

2

锁存器

74LS373

2

发光二极管

LED-RED

12

开关

SWITCH

12

按键

BUTTON

3

信号发生器

CLOCK

1

4位数码管

7SEG-MPX4-CA

1

电阻

RES

26

晶振

CRYSTAL·0

1

电容

CAP

3

 

附录Ⅱ总体电路图

附录Ⅲ源程序

#include"reg51.h"

#defineucharunsignedchar

#defineuintunsignedchar

constuchartab[]={0XC0,0XF9,0XA4,0XB0,0X99,

0X92,0X82,0XF8,0X80,0X90};

longintcount,counth;

longintcount1,count2,count3,count4;

longinti;

sbitP20=P2^0;

sbitP21=P2^1;

sbitP22=P2^2;

sbitP23=P2^3;

sbitP24=P2^4;

sbitP25=P2^5;

sbitP26=P2^6;

sbitP27=P2^7;

voiddelay(void)

{uintj;

for(j=0;j<244;j++);

}

voidmain(void)

{

P24=1;

P25=1;

P26=0;

P27=0;

TMOD=0X60;

TH1=0XFE;

TL1=0XFE;

EX0=1;

EX1=1;

ET1=1;

TR1=1;

EA=1;

for(;;)

{P24=0;

P25=1;

P26=1;

P26=0;

P24=1;

P25=0;

P27=1;

P27=0;

count=i;

count1=count/1000;

counth=count%1000;

count2=counth/100;

count=counth%100;

count3=count/10;

count4=count%10;

P0=tab[count1];

P20=1;

delay();

P20=0;

P0=tab[count2];

P21=1;

delay();

P21=0;

P0=tab[count3];

P22=1;

delay();

P22=0;

P0=tab[count4];

P23=1;

delay();

P23=0;

}

}

voidzhongduan0(void)interrupt0

{

TR1=0;

}

voidzhongduan1(void)interrupt2

{

TR1=1;

}

voiddisplay(void)interrupt3

{

i++;

}

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

当前位置:首页 > 小学教育 > 小升初

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

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