基于单片机与VB汽车尾灯设计报告.docx

上传人:李司机 文档编号:1149728 上传时间:2022-07-05 格式:DOCX 页数:38 大小:309.32KB
返回 下载 相关 举报
基于单片机与VB汽车尾灯设计报告.docx_第1页
第1页 / 共38页
基于单片机与VB汽车尾灯设计报告.docx_第2页
第2页 / 共38页
基于单片机与VB汽车尾灯设计报告.docx_第3页
第3页 / 共38页
基于单片机与VB汽车尾灯设计报告.docx_第4页
第4页 / 共38页
基于单片机与VB汽车尾灯设计报告.docx_第5页
第5页 / 共38页
点击查看更多>>
资源描述

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

1、摘 要本次的课题是基于单片机的汽车尾灯控制器,该设计课题主要由STC89C52RC单片机为核心展开的汽车尾灯控制电路的设计方法,用发光二极管模拟汽车尾灯,可以用VB上位机界面和按键开关作为转弯等控制信号,并且把信息显示在LCD1602上。在VB6.0环境下,上位机利用MSCOMM通信控件与单片机之间串口通信实现上位机控制汽车尾灯。设计电路能很好的综合运用我们所学习到的单片机、C语言、VB上位机编程,熟悉电子电路设计的根本方法。关键词:STC89C52RC;发光二极管;单片机;C语言; VB上位机;MSCOMM控件 引言3一 设计任务31.1 任务说明31.2 任务分析3二 设计方案选择及论证4

2、2.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 显示程序设计流程图174.2 VB上位机界面设计18设计方案原理与设计特点分析18五仿真图实物调试205.1仿真图205.2实物图21六课设总结21参考文献2

3、2附录一23引言汽车作为现代交通工具已经大量进入人们的生活,随着电子技术的开展,对于汽车的控制电路也已经从过去的全人工开关控制开展到了智能化的控制。汽车尾灯控制器是随着汽车智能化技术的开展而迅速开展起来的,汽车尾灯一般基于微处理器的硬件电路结构构成,而正因为硬件电路的局限性,不能随意的更改电路的功能和性能,且可靠性得不到保证,因此对汽车尾灯控制系统的开展带来局限性,难以满足现代智能化的要求。本次的设计是基于单片机的汽车尾灯控制器,用发光二极管模拟汽车尾灯,用VB上位机和按键开关作为汽车转弯等控制信号,实现汽车尾灯的智能化控制。一 设计任务1.1 任务说明 本次课题主要是以STC89C52RC为

4、核心的单片机控制电路,它主要模拟了汽车尾灯系统的正常行驶、转弯、刹车、倒车、夜间行驶等状态下的发光情况,实现了汽车尾灯控制的智能化。1.2 任务分析设计一个基于单片机的汽车尾灯控制器,其具体设计要求如下:1汽车白天正常行驶时指示灯全灭;2汽车右(左)转弯时,前后最右左边和右左侧那个指示灯亮并闪烁;3汽车临时刹车时车尾灯全部亮;4汽车倒车时尾灯中间4个指示灯亮;5汽车夜间行驶时,车前灯全亮,尾灯两边各中间的灯亮;6可通过串口连接PC控制车尾灯自己发挥局部;二 设计方案选择及论证2.1 方案一:采用555定时器等构成的汽车尾灯电路采用译码器74LS138、计数器74LS161、脉冲产生器555、开

5、光控制电路、显示驱动电路、发光二极管以及各种逻辑元件等构成的汽车尾灯控制电路。由于汽车左右转弯时,四个指示灯循环点亮,所以用四进制计数器控制译码器电路顺序输出低电平,从而控制尾灯按要求点亮,到达模拟汽车转弯、刹车、正常行驶等状态。由于行车时都是开关控制,所以每一个开关都应该有一个消除机械振动的装置,可以用根本SR触发器来实现。2.2 方案二:由STC89C52RC及其外围电路构成的汽车尾灯控制器 STC89C52RC 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。本次单片机的控制系统以STC89C52RC为控制器,键盘为输入信号,由于STC89C52RC

6、本身的功能强大,汽车转弯灯的驱动用单片机的驱动功能来完成。使得单片机的功能得到了充分的运用;并且显示电路从并行I/O口输出,由限流电阻和发光二极管组成,低电平使发光二极管导通,显示出相应的信号灯亮灭情况,实现了左转、右转、刹车、应急灯多种状态下的控制效果。2.3 方案比拟和选择方案一中,要使用多种控制电路,实现的方法繁杂且不灵活,本钱高,搭建好电路后调试起来不方便,不可以任意定义各种状态,电路的可靠性以及可扩展性不高,且与本次课题所要求运用的知识相悖,因此不宜使用此方案。方案二中,以单片机为核心,而单片机的编程比拟直接,且可重复擦除修改,硬件电路搭建方便简单。搭建好电路后通过STC89C52R

7、C来编写程序,控制LED的亮灭,大大的简化了系统结构,降低材料的本钱,提高系统的先进性和可靠性,能实现控制器的智能化。由于采用此种方法开发的系统其升级和改良较为方便,因此本次课题选用方案二。采用串口连接笔记本电脑,通过VB上位机控制LED的亮灭,实现真正意义上的智能化控制。发 光 二 极管 显 示 电路STC89C52RC2.4 系统框图时钟电路1602液 晶 屏 显示 电 路复位电路按键电路串口电路MAX232图 系统结构框图整个系统包括电源电路、时钟电路、复位电路、按键电路、发光二极管显示电路、液晶屏显示电路、串口电路、单片机、PC上位机等。其中主要由按键电路和PC上位机发出控制信号,由显

8、示电路显示信号的具体状态。三 系统硬件原理介绍3.1 单片机STC89C52RC介绍 STC89C52RC引脚图1STC89C52RC局部引脚功能介绍:1、VCC:STC89C52RC电源正端输入,接+5V。2、VSS:电源地端。3、XTAL1:单芯片系统时钟的反相放大器输入端。4、XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间参加一 20PF 的小电容,可以使系统更稳定,防止噪声干扰而死机。5、RESET:STC89C52RC的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升

9、至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能存放器之内容均被设成状态,并且至地址0000H处开始读入程序代码而执行程序。3.2 LCD1602液晶屏介绍1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最正确工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明:1602LCD采用标准的14脚无背光或16脚带背光接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4

10、RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器比照度调整端,接正电源时比照度最弱,接地时比照度最高,比照度过高时会产生“鬼影,使用时可以通过一个10K的电位器调整比照度。第4脚:RS为存放器选择,高电平时选择数据存放器、低电平时选择指令存放器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可

11、以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。3.3 系统结构原理图、器件选择1电源电路图3.3.1 电源电路电源电路可以给单片机提供工作所需电源,有指示灯提示,灯亮时表示提供正常工作电压。2时钟电路图3.3.2 时钟电路时钟电路中使用的12M晶振,为单片机提供系统时钟。3复位电路 图3.3.3 复位电路复位电路是单片机能上电复位,当程序混乱跑飞时可以通过按键手动复位。4按键电路 图3.3.4 按键电路按键电路可以通过按键来模拟汽车的

12、转弯、刹车、应急等各种状态,控制LED和液晶屏的显示。5发光二极管显示电路 图3.3.5 发光二极管显示电路发光二极管可以模拟汽车车灯,显示各种控制信号的效果。6液晶屏显示电路 图3.3.6 液晶屏显示电路液晶屏显示电路可以直观的显示出汽车的行进状态,增加尾灯系统的可视性。 7 串口电路 为了使单片机内的电平与计算机的电平一样需要利用电平转换,MAX232芯片是专为RS232标准串口设计的单电源点平转换芯片。其特点如下:1符合所有的RS232技术标准;2只需要单一 +5V电源供电;3片载电荷泵具有升压、电压极性反转能力,能够产生+10V和-10V电压;4)功耗低,典型供电电流5mA;5)内部集

13、成2个RS-232C驱动器;6)高集成度,片外最低只需4个电容即可工作;7)连接方式如图5所示。 图5串口连接3.4 硬件电路总原理图图 总原理图硬件总原理分解如3.3.6各图所示,完整的实现了汽车尾灯的控制,用按键模拟控制信号,用发光二极管和液晶屏显示状态,到达所有指标。3.5 硬件设计原理及状态图本次由按键作为控制信号,发光二极管模拟汽车尾灯,状态表如下所示:驾驶操作输出信号LED1LED2 LED3LED4LED5LED6LED7LED8左转灭灭闪烁灭灭灭灭 灭右转灭灭灭闪烁灭灭灭灭刹车亮亮亮亮亮亮亮亮正常行驶亮亮灭灭亮亮灭灭夜间行驶亮亮灭灭灭灭亮亮倒车行驶灭灭灭灭亮亮亮亮本次课题主要以

14、STC89C52RC为核心展开的汽车尾灯控制器,通过原理仿真以及实物制作,完整的实现了汽车尾灯智能化控制的效果,相比以前用数字逻辑电路原理打成的汽车尾灯更方便、更简单。制作出的实物板有6个控制状态的按键,可以搭配起来控制6种汽车的行驶状态,完美的模拟了汽车尾灯控制系统,完本钱次课题的全部指标。四程序流程4.1下位机软件程序4.1.1 键盘扫程序设计流程图键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,假设无键按下,那么返回继续判断是否有键闭合,假设有键按下,那么判断键号,然后释放,假设释放按键完毕,那么返回,假设没有释放按键,

15、那么返回继续释放。其流程图如下图。软件设计思路,程序开始后进入初始化,然后扫描键盘等待有键按下。如果没有键按下那么一直扫描,如果有键按下,那么判断是哪个键,如果为1键,那么正常行驶;为2键,那么右转;为3键,那么左车;为4键,那么应急状态;为5键,那么倒车行驶;为6键,那么夜间行驶。图 软件流程图4.2.1 显示程序设计流程图Y图 显示程序流程图显示程序的过程为:显示开始时,先进行LCD的初始化,判断是否显示汉字或ACSII码或图形,假设不显示,那么返回,假设显示的是汉字或ACSII码,那么进行相应功能的设置,然后送地址和数据,再判断是否显示完,显示完那么返回,没有显示完那么继续送地址,假设显

16、示的是图形,那么先进行相应功能的设置,再送行地址和列地址,然后送数据,最后判断是否显示完,显示完那么返回,没有显示完那么继续送行地址和列地址。其流程图如图7所示。1在编写液晶屏的显示程序时,发现液晶屏只能瞬间的显示状态,而不能保持,因此在液晶显示程序后要加上一个延时,使液晶屏能够保持状态;2要使发光二极管闪烁可以通过指令让其取反,但是在编写程序时,只能取反一次,一次可以使用一个while函数,当没有按键时候发光二极管一直取反,且在程序里加上适当的延时;3在使发光二极管闪烁时,如果前一个状态中正在使用改二极管,那么切换状态后,每个灯管的闪烁时间不同步,因此在让其闪烁之前先令所有二极管保持同一个状

17、态;4.2 VB上位机界面设计设计方案原理与设计特点分析1IO控制系统原理框图: 单片机 上位机控制软件 发送数据 将PC机和单片机通过RS232连接,通过上位机软件可以向单片机发送数据来测试两者的通讯状态,同时单片机也可以向上位机软件返回数据,以显示当前通信状态是否正常。以及用上位机软件控制单片机上的指示灯工作。从而实现简单的IO控制系统。2上位机软件3通信协议本通信系统使用了一个简单的通信协议,就是每当向单片机发送一个特定字符串时,单片机在接收到字符串时会向上位机软件反应一条信息,来说明上位机软件和硬件是否正常通信,制定通信协议时需要指定端口号,关键代码如下: MSComm1.CommPo

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

19、于实际中,就不得不考虑其仪器,器件的误差,以及自己操作上的能力。而且,在课设过程中添加了自己的思考,该选择怎样的电阻、电容,想要修改最后的输出,应该在什么地方做改变。虽然是一些很根底的东西,但仅仅是书上的理论学习,会让人对知识遗忘得比拟快,相反,通过自己动手实践过的东西,会更加记忆深刻。看着自己成功制作出来的电路板觉得很有成就感。通过这次课设教我还学会很多关于电子产品知识。进一步的认识了我们现实生活电子产品,了解和掌握了一些简单电子元件的运用,大大的扩展了我们的知识面。提高了自己以后在学习 生活中自己动手能力。给我们很大的启发,很有助于我们将来的学习生活和工作。在查阅资料中,获得了许多额外的知

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

21、sion2应用实践M.北京:电子工业出版社,2006.附录一单片机源程序:#include #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=P

22、27;sbit LCD_RS = P34; sbit LCD_RW = P35;sbit 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

23、_(); _nop_(); _nop_(); uchar code cdis1 = -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

24、 = -left-;/uchar code cdis41 = -right-;/uchar 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); L

25、CD_EN = 0; return(result); /*/* */*写指令数据到LCD */*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 lc

26、d_wdat(uchar dat) while(lcd_busy(); LCD_RS = 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);

27、/显示开,关光标 delay1(5); lcd_wcmd(0x06); /移动光标 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,允许接

28、收 TH1=0xfd; /晶振11.0592时,波特率9600 TL1=0xfd; /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个字符 / fo

29、r(m=0;m16;m+) / lcd_wdat(cdis2m); while(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

30、(0x40); for(m=0;m16;m+) lcd_wdat(cdis4m); 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(

31、KEY4=1) P2=0x00; lcd_pos(0x40); for(m=0;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); L

32、ED1=0; LED2=0; LED5=0; LED6=0; lcd_pos(0x40); 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(

33、cdis1m); if(SBUF=2|SBUF=3|SBUF=4|SBUF=5|SBUF=6 |KEY4=1|KEY3=1|KEY1=1|KEY5=1|KEY6=1|KEY2=1 ) break; else if(SBUF =2) /汽车右转 ;亮并且闪 if(SBUF=1|SBUF=3|SBUF=4|SBUF=5|SBUF=6|KEY4=1|KEY3=1|KEY1=1|KEY5=1|KEY6=1|KEY2=1) while(1); P2=0xff; delay(100); P2=0xfb;delay(100); lcd_pos(0x40); for(m=0;m16;m+) lcd_wdat(cdis4m); /break; break; else if(SBUF =3) /汽车左转 ;亮并且闪 if(SBUF=1|SBUF=2|SBU

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号