基于单片机与VB汽车尾灯控制课程设计报告.doc

上传人:laozhun 文档编号:2956704 上传时间:2023-03-05 格式:DOC 页数:38 大小:840KB
返回 下载 相关 举报
基于单片机与VB汽车尾灯控制课程设计报告.doc_第1页
第1页 / 共38页
基于单片机与VB汽车尾灯控制课程设计报告.doc_第2页
第2页 / 共38页
基于单片机与VB汽车尾灯控制课程设计报告.doc_第3页
第3页 / 共38页
基于单片机与VB汽车尾灯控制课程设计报告.doc_第4页
第4页 / 共38页
基于单片机与VB汽车尾灯控制课程设计报告.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《基于单片机与VB汽车尾灯控制课程设计报告.doc》由会员分享,可在线阅读,更多相关《基于单片机与VB汽车尾灯控制课程设计报告.doc(38页珍藏版)》请在三一办公上搜索。

1、课程设计(论文) 设计课题: 基于单片机的汽车尾灯控制 学校院系: 海南师范大学物电学院 专 业: 10电子一班 学生姓名: 学 号: 指导教师: 摘 要本次的课题是基于单片机的汽车尾灯控制器,该设计课题主要由STC89C52RC单片机为核心展开的汽车尾灯控制电路的设计方法,用发光二极管模拟汽车尾灯,可以用VB上位机界面和按键开关作为转弯等控制信号,并且把信息显示在LCD1602上。在VB6.0环境下,上位机利用MSCOMM通信控件与单片机之间串口通信实现上位机控制汽车尾灯。设计电路能很好的综合运用我们所学习到的单片机、C语言、VB上位机编程,熟悉电子电路设计的基本方法。关键词:STC89C5

2、2RC;发光二极管;单片机;C语言; VB上位机;MSCOMM控件 引言3一 设计任务31.1 任务说明31.2 任务分析3二 设计方案选择及论证42.1 方案一:采用555定时器等构成的汽车尾灯电路42.2 方案二:由STC89C52RC及其外围电路构成的汽车尾灯控制器42.3 方案比较和选择42.4 系统框图5三 系统硬件原理介绍73.1 单片机STC89C52RC介绍73.2 LCD1602液晶屏介绍83.3系统结构原理图、器件选择93.4 硬件电路总原理图143.5 硬件设计原理及状态图14四程序流程154.1下位机软件程序154.1.1 键盘扫程序设计流程图154.2.1 显示程序设

3、计流程图174.2 VB上位机界面设计184.2.1设计方案原理与设计特点分析18五仿真图实物调试205.1仿真图205.2实物图21六课设总结21参考文献22附录一23引言汽车作为现代交通工具已经大量进入人们的生活,随着电子技术的发展,对于汽车的控制电路也已经从过去的全人工开关控制发展到了智能化的控制。汽车尾灯控制器是随着汽车智能化技术的发展而迅速发展起来的,汽车尾灯一般基于微处理器的硬件电路结构构成,而正因为硬件电路的局限性,不能随意的更改电路的功能和性能,且可靠性得不到保证,因此对汽车尾灯控制系统的发展带来局限性,难以满足现代智能化的要求。本次的设计是基于单片机的汽车尾灯控制器,用发光二

4、极管模拟汽车尾灯,用VB上位机和按键开关作为汽车转弯等控制信号,实现汽车尾灯的智能化控制。一 设计任务1.1 任务说明 本次课题主要是以STC89C52RC为核心的单片机控制电路,它主要模拟了汽车尾灯系统的正常行驶、转弯、刹车、倒车、夜间行驶等状态下的发光情况,实现了汽车尾灯控制的智能化。1.2 任务分析设计一个基于单片机的汽车尾灯控制器,其具体设计要求如下:1)汽车白天正常行驶时指示灯全灭;2)汽车右(左)转弯时,前后最右(左)边和右(左)侧那个指示灯亮并闪烁;3)汽车临时刹车时车尾灯全部亮;4)汽车倒车时尾灯中间4个指示灯亮;5)汽车夜间行驶时,车前灯全亮,尾灯两边各中间的灯亮;6)可通过

5、串口连接PC控制车尾灯(自己发挥部分);二 设计方案选择及论证2.1 方案一:采用555定时器等构成的汽车尾灯电路采用译码器74LS138、计数器74LS161、脉冲产生器555、开光控制电路、显示驱动电路、发光二极管以及各种逻辑元件等构成的汽车尾灯控制电路。由于汽车左右转弯时,四个指示灯循环点亮,所以用四进制计数器控制译码器电路顺序输出低电平,从而控制尾灯按要求点亮,达到模拟汽车转弯、刹车、正常行驶等状态。由于行车时都是开关控制,所以每一个开关都应该有一个消除机械振动的装置,可以用基本SR触发器来实现。2.2 方案二:由STC89C52RC及其外围电路构成的汽车尾灯控制器 STC89C52R

6、C 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。本次单片机的控制系统以STC89C52RC为控制器,键盘为输入信号,由于STC89C52RC本身的功能强大,汽车转弯灯的驱动用单片机的驱动功能来完成。使得单片机的功能得到了充分的运用;并且显示电路从并行I/O口输出,由限流电阻和发光二极管组成,低电平使发光二极管导通,显示出相应的信号灯亮灭情况,实现了左转、右转、刹车、应急灯多种状态下的控制效果。2.3 方案比较和选择方案一中,要使用多种控制电路,实现的方法繁杂且不灵活,成本高,搭建好电路后调试起来不方便,不可以任意定义各种状态,电路的可靠性以及可扩展性不

7、高,且与本次课题所要求运用的知识相悖,因此不宜使用此方案。方案二中,以单片机为核心,而单片机的编程比较直接,且可重复擦除修改,硬件电路搭建方便简单。搭建好电路后通过STC89C52RC来编写程序,控制LED的亮灭,大大的简化了系统结构,降低材料的成本,提高系统的先进性和可靠性,能实现控制器的智能化。由于采用此种方法开发的系统其升级和改进较为方便,因此本次课题选用方案二。采用串口连接笔记本电脑,通过VB上位机控制LED的亮灭,实现真正意义上的智能化控制。发 光 二 极管 显 示 电路STC89C52RC2.4 系统框图时钟电路1602液 晶 屏 显示 电 路复位电路PC电脑上位机按键电路串口电路

8、MAX232图2.4.1 系统结构框图整个系统包括电源电路、时钟电路、复位电路、按键电路、发光二极管显示电路、液晶屏显示电路、串口电路、单片机、PC上位机等。其中主要由按键电路和PC上位机发出控制信号,由显示电路显示信号的具体状态。三 系统硬件原理介绍3.1 单片机STC89C52RC介绍 图3.1.1STC89C52RC引脚图(1)STC89C52RC部分引脚功能介绍:1、VCC:STC89C52RC电源正端输入,接+5V。2、VSS:电源地端。3、XTAL1:单芯片系统时钟的反相放大器输入端。4、XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上

9、一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一 20PF 的小电容,可以使系统更稳定,避免噪声干扰而死机。5、RESET:STC89C52RC的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。3.2 LCD1602液晶屏介绍1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)

10、mm引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对

11、比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。3.3 系统结构原理图、器件选择(1)电源电路图3.3.1 电源电路电源电路可以给单片机提供工作所需电源,有指示灯提示,灯亮时表示提供正常工作电压。(2)时钟

12、电路图3.3.2 时钟电路时钟电路中使用的12M晶振,为单片机提供系统时钟。(3)复位电路 图3.3.3 复位电路复位电路是单片机能上电复位,当程序混乱跑飞时可以通过按键手动复位。(4)按键电路 图3.3.4 按键电路按键电路可以通过按键来模拟汽车的转弯、刹车、应急等各种状态,控制LED和液晶屏的显示。(5)发光二极管显示电路 图3.3.5 发光二极管显示电路发光二极管可以模拟汽车车灯,显示各种控制信号的效果。(6)液晶屏显示电路 图3.3.6 液晶屏显示电路液晶屏显示电路可以直观的显示出汽车的行进状态,增加尾灯系统的可视性。 (7) 串口电路 为了使单片机内的电平与计算机的电平一样需要利用电

13、平转换,MAX232芯片是专为RS232标准串口设计的单电源点平转换芯片。其特点如下:1)符合所有的RS232技术标准;2)只需要单一 +5V电源供电;3)片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压;4)功耗低,典型供电电流5mA;5)内部集成2个RS-232C驱动器;6)高集成度,片外最低只需4个电容即可工作;7)连接方式如图5所示。 图5串口连接3.4 硬件电路总原理图图3.4.1 总原理图硬件总原理分解如3.3.13.3.6各图所示,完整的实现了汽车尾灯的控制,用按键模拟控制信号,用发光二极管和液晶屏显示状态,达到所有指标。3.5 硬件设计原理及状态图本次由按键

14、作为控制信号,发光二极管模拟汽车尾灯,状态表如下所示:驾驶操作输出信号LED1LED2 LED3LED4LED5LED6LED7LED8左转灭灭闪烁灭灭灭灭 灭右转灭灭灭闪烁灭灭灭灭刹车亮亮亮亮亮亮亮亮正常行驶亮亮灭灭亮亮灭灭夜间行驶亮亮灭灭灭灭亮亮倒车行驶灭灭灭灭亮亮亮亮本次课题主要以STC89C52RC为核心展开的汽车尾灯控制器,通过原理仿真以及实物制作,完整的实现了汽车尾灯智能化控制的效果,相比以前用数字逻辑电路原理打成的汽车尾灯更方便、更简单。制作出的实物板有6个控制状态的按键,可以搭配起来控制6种汽车的行驶状态,完美的模拟了汽车尾灯控制系统,完成本次课题的全部指标。四程序流程4.1下

15、位机软件程序4.1.1 键盘扫程序设计流程图键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。其流程图如图所示。软件设计思路,程序开始后进入初始化,然后扫描键盘等待有键按下。如果没有键按下则一直扫描,如果有键按下,则判断是哪个键,如果为1键,则正常行驶;为2键,则右转;为3键,则左车;为4键,则应急状态;为5键,则倒车行驶;为6键,则夜间行驶。YN开始有键闭合否?去抖动确有键按下判断按键释放LED状态

16、返回YNYN图4.3.1 软件流程图4.2.1 显示程序设计流程图NYN是否返回 LCD初始化显示汉ACSII码显示开始显示字符相应功能设置送地址送数据NN相应功能设置送行地址和列地址送数据是否YY图 4.2.1 显示程序流程图显示程序的过程为:显示开始时,先进行LCD的初始化,判断是否显示汉字或ACSII码或图形,若不显示,则返回,若显示的是汉字或ACSII码,则进行相应功能的设置,然后送地址和数据,再判断是否显示完,显示完则返回,没有显示完则继续送地址,若显示的是图形,则先进行相应功能的设置,再送行地址和列地址,然后送数据,最后判断是否显示完,显示完则返回,没有显示完则继续送行地址和列地址

17、。其流程图如图7所示。(1)在编写液晶屏的显示程序时,发现液晶屏只能瞬间的显示状态,而不能保持,因此在液晶显示程序后要加上一个延时,使液晶屏能够保持状态;(2)要使发光二极管闪烁可以通过指令让其取反,但是在编写程序时,只能取反一次,一次可以使用一个while函数,当没有按键时候发光二极管一直取反,且在程序里加上适当的延时;(3)在使发光二极管闪烁时,如果前一个状态中正在使用改二极管,则切换状态后,每个灯管的闪烁时间不同步,因此在让其闪烁之前先令所有二极管保持同一个状态;4.2 VB上位机界面设计4.2.1设计方案原理与设计特点分析(1)IO控制系统原理框图: 单片机 上位机控制软件 发送数据

18、将PC机和单片机通过RS232连接,通过上位机软件可以向单片机发送数据来测试两者的通讯状态,同时单片机也可以向上位机软件返回数据,以显示当前通信状态是否正常。以及用上位机软件控制单片机上的指示灯工作。从而实现简单的IO控制系统。(2)上位机软件(3)通信协议本通信系统使用了一个简单的通信协议,就是每当向单片机发送一个特定字符串时,单片机在接收到字符串时会向上位机软件反馈一条信息,来表明上位机软件和硬件是否正常通信,制定通信协议时需要指定端口号,关键代码如下: MSComm1.CommPort = “ ” MSComm1.InputMode = “ ” MSComm1.RThreshold =

19、“ ” MSComm1.SThreshold = “ ” MSComm1.Settings = MSComm1.PortOpen = “ ” VB上位机界面通过协议控制车灯的智能开关。五仿真图实物调试5.1仿真图5.2实物图6 课设总结本次的课设作品的主要元件为STC89C52RC,在其控制下保证了系统的正常工作,达到模拟汽车尾灯控制的效果,实现汽车尾灯的智能化控制。两周的课程设计,相较于之前所选修的各种实验课程,此次更增加了自己的动手实践能力。理论与实践还是有一定的差距的,在理论上不管多精确的数据,一旦用于实际中,就不得不考虑其仪器,器件的误差,以及自己操作上的能力。而且,在课设过程中添加了

20、自己的思考,该选择怎样的电阻、电容,想要修改最后的输出,应该在什么地方做改变。虽然是一些很基础的东西,但仅仅是书上的理论学习,会让人对知识遗忘得比较快,相反,通过自己动手实践过的东西,会更加记忆深刻。看着自己成功制作出来的电路板觉得很有成就感。通过这次课设教我还学会很多关于电子产品知识。进一步的认识了我们现实生活电子产品,了解和掌握了一些简单电子元件的运用,大大的扩展了我们的知识面。提高了自己以后在学习 生活中自己动手能力。给我们很大的启发,很有助于我们将来的学习生活和工作。在查阅资料中,获得了许多额外的知识,开拓视野。在原理图的设计、使用proteus仿真、使用Altium绘制、实物的制作、

21、板子调试等整个过程中加强了我们分析问题和解决问题的能力,深刻体味到实践是检验真理的唯一标准这一道理。总而言之,这次课设,让我们受益匪浅。 参考文献1李广弟,朱月秀,王秀山.单片机基础M.北京:航空航天大学出版社,2000.2康华光,陈大钦.电子技术基础模拟部分M.武汉:高等教育出版社,1998.3谢自美.电子线路设计实验测试(第二版).武汉:华中理工出版社,2000.4戴佳.51单片机C 语言应用程序设计实例精讲M.电子工业出版社,2006.5徐爱钧,彭秀华。Keil Cx51 V7.0单片机高级语言编程与Vision2应用实践M.北京:电子工业出版社,2006.附录一单片机源程序:#incl

22、ude #include #define uchar unsigned char#define unit unsigned intsbit KEY1=P10;sbit KEY2=P11;sbit KEY3=P12;sbit KEY4=P13;sbit KEY5=P14;sbit KEY6=P15;sbit LED1=P20;sbit LED2=P21;sbit LED3=P22;sbit LED4=P23;sbit LED5=P24;sbit LED6=P25;sbit LED7=P26;sbit LED8=P27;sbit LCD_RS = P34; sbit LCD_RW = P35;sb

23、it LCD_EN = P36; void delay(unit t);void delay1(int ms);#define delayNOP(); _nop_();_nop_();_nop_();_nop_();void delay(unit t)/延时程序; unit i,j;for(i=0;it;i+)for(j=0;j120;j+);/*/void delay1(int ms) unsigned char y; while(ms-) for(y = 0; y250; y+) _nop_(); _nop_(); _nop_(); _nop_(); uchar code cdis1 =

24、-Day time-;uchar code cdis2 = -stop-;uchar code cdis3 = -left-;uchar code cdis4 = -right-;uchar code cdis5 = -Astern-;uchar code cdis6 = -night-;uchar code cdis7 = happy every day;/uchar code cdis11 = -Day time-;/uchar code cdis21 = -stop-;/uchar code cdis31 = -left-;/uchar code cdis41 = -right-;/uc

25、har code cdis51 = -Astern-;/uchar code cdis61 = -night-;uchar code cdis71 = My Control ;/*/* */*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */* */*/ bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); /*/* */*写指令数据到L

26、CD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */* */*/void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */*写显示数据到LCD */*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */* */*/void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS

27、 = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* */* LCD初始化设定 */* */*/void lcd_init() delay1(15); lcd_wcmd(0x38); /16*2显示,5*7点阵,8位数据 delay1(5); lcd_wcmd(0x38); delay1(5); lcd_wcmd(0x38); delay1(5); lcd_wcmd(0x0c); /显示开,关光标 delay1(5); lcd_wcmd(0x06); /移动光标

28、delay1(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay1(5);/*/* */* 设定显示位置 */* */*/void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80); /数据指针=80+地址变量/*/void initUART(void) /串口必须作以下初始化,才能正常工作。 TMOD=0x20; /M1=1,M0=0 定时器1工作方式2(定时常数重装,8 位) SCON=0x50; /SM0=0,SM1=1,REN=1 串口工作方式1,允许接收 TH1=0xfd; /晶振11.0592时,波特率9600 TL1=0xfd

29、; /TL1计数,溢出后,TH1值送入TL1EA=1; /开总中断 ES=1; /允许串口中断 TR1=1; /启动定时器1 void main(void) uchar m; P1=0x00;P2=0xff;P0=0; delay1(10); /延时 lcd_init(); /初始化LCD lcd_pos(0); /设置显示位置为第一行的第1个字符 for(m=0;m16;m+) lcd_wdat(cdis7m); initUART(); / lcd_pos(0x40); /设置显示位置为第二行第1个字符 / for(m=0;m16;m+) / lcd_wdat(cdis2m); while(

30、1) lcd_pos(0); /设置显示位置为第一行的第1个字符 for(m=0;m16;m+) lcd_wdat(cdis7m); /白天正常行驶指示灯全灭 if(KEY1=1)delay(10);if(KEY1=1) P2=0xff; lcd_pos(0x40); for(m=0;m16;m+) lcd_wdat(cdis1m);/汽车右转 ;亮并且闪if(KEY2=1) delay(10); if(KEY2=1) P2=0xff; while(1) LED3=LED3; delay(100); lcd_pos(0x40); for(m=0;m16;m+) lcd_wdat(cdis4m)

31、; if(KEY4=1|KEY3=1|KEY1=1|KEY5=1|KEY6=1) break; /汽车左转 ;亮并且闪if(KEY3=1) delay(10);if(KEY3=1) P2=0xff;while(1) LED4=LED4; delay(100); lcd_pos(0x40); for(m=0;m16;m+) lcd_wdat(cdis3m); if(KEY4=1|KEY2=1|KEY1=1|KEY5=1|KEY6=1) break; /汽车临时刹车全部亮if(KEY4=1) delay(10);if(KEY4=1) P2=0x00; lcd_pos(0x40); for(m=0;

32、m16;m+) lcd_wdat(cdis2m); /汽车倒车;中间四个灯亮if(KEY5=1) delay(10);if(KEY5=1) P2=0xff; delay(1); LED5=0; LED6=0; LED7=0; LED8=0;LED1=0;LED2=0; lcd_pos(0x40); for(m=0;m16;m+) lcd_wdat(cdis5m); /汽车夜间行驶车前灯全亮。尾灯两边的中间 灯亮 if(KEY6=1) delay(10);if(KEY6=1) P2=0xff; delay(1); LED1=0; LED2=0; LED5=0; LED6=0; lcd_pos(0

33、x40); for(m=0;m16;m+) lcd_wdat(cdis6m); void UARTinterrupt(void) interrupt 4 uchar m; lcd_pos(0); /设置显示位置为第一行的第1个字符 for(m=0;m16;m+) lcd_wdat(cdis71m);if(RI) RI=0; while(1) if (SBUF=1) /单引号内表示ASCII码 /白天正常行驶指示灯全灭 P2=0xff; lcd_pos(0x40); for(m=0;m16;m+) lcd_wdat(cdis1m); if(SBUF=2|SBUF=3|SBUF=4|SBUF=5|SBUF=6 |KEY4=1|KEY3=1|KEY1=1|KEY5=1|KEY6=1|KE

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号