1、 汽车灯光控制电路设计 张宝强 (陕西理工学院物理系电信062, 陕西 汉中 723001) 指导老师:宋卫星 [摘要]采用AT89C51单片机设计汽车灯光控制电路,利用其4个I/O口分别实现对汽车灯光控制、显示功能,其中还添加了转弯灯、紧急灯警示声音功能。运用较少硬件及适当软件结合就可以很容易实现设计要求,而且灵活性强,也可以通过软件编程实现更多附加功能。 [关键字]AT89C51单片机;灯光;控制 21 / 25 目录 1引言 1 2设计方案 1 2.1功
2、能要求 1 2.2设计方案 1 3硬件设计 2 3.1 AT89C51单片机结构及功能 2 3.1.1 AT89C51结构及引脚 2 3.1.2 AT89C51主要性能 3 3.1.3 AT89C51管脚功能 3 3.2 AT89C51时序电路 4 3.3 AT89C51复位电路 5 3.4 AT89C51电源电路 5 3.5汽车灯光控制电路 6 4软件设计 7 5仿真及调试 7 5.1 Keil C51 µVision2介绍 7 5.2 Proteus Professional 7.5介绍 8 5.3调试 9 6结论 9 6.1设计结果 9 6.2系统缺陷
3、及建议 9 6.3致谢 9 参考文献 10 附录 程序清单 11 1引言 随着汽车数量大量增加,交通安全问题也越来越严峻。而汽车车灯光控制系统可靠、稳定对于安全行驶起着非常重要作用,因此汽车灯光控制电路研究和设计成为解决交通安全问题一种好途径。汽车工业发展也促使汽车车灯控制电路设计和研究不断提高,汽车功能要求也越来越庞大,因此各单元电路也需要向小型化方向发展,以使汽车能够能装入更多功能模块。传统使用纯硬件设计电路,不仅电路庞大复杂,而且一旦出了问题维修检测起来也耗时费力。因此智能化、小型化电路设计走上了时代潮流,也必
4、将影响以后汽车控制系统设计,不仅如此还要综合考虑加工工艺、寿命、成本等问题,以使设计电路能够大量普及。 伴随着汽车工业发展,汽车灯光控制电路发展已经非常成熟,目前,汽车灯光控制系统发展充分利用了现代科技发展成果。采用纯硬件、PLC电气控制技术设计汽车灯光控制电路已经得到大量应用。传统采用纯硬件设计电路正逐渐向着软硬结合方向发展,也将随时应用最新科学技术。 单片机发展正朝着低功耗、高性能、低价格和外围电路内装化方向发展。因此,采用单片机设计汽车灯光控制电路,应用软件来实现庞大控制功能,而且通过外围电路扩展还能实现更多附加功能。这种控制电路不仅体积小、成本低,而且也更加智能,可以随时修改整个控
5、制功能,非常适合现代汽车工业发展潮流。总之,使着汽车灯光控制电路向着更加可靠,功能更加庞大、智能方向发展。 2设计方案 2.1功能要求 汽车车灯采用发光二极管来设计,汽车前部两侧各有远光灯一部(夜间正常行车时使用,大功率白色发光二极管),近光灯一部(夜间行驶汇车时使用,小功率白色发光二极管),远光灯及近光灯不能同时使用;汽车左右各有2个指示灯:方向灯(小功率黄色发光二极管),雾灯(大功率黄色发光二极管)。汽车后部两侧各有刹车灯一部(小功率红色发光二极管),尾灯一部(大功率红色发光二极管)。刹车时,刹车灯亮(不闪)。转弯时,汽车方向灯应该一闪一闪。紧急情况时,汽车刹车灯及尾灯应同时闪烁。
6、 2.2设计方案 采用AT89C51单片机来完成汽车灯光控制电路设计。利用单片机丰富I/O端口,及其控制灵活性,实现基本功能要求。汽车车灯控制电路方框图如2.1所示。 AT89C51 电源电路 时序及复位电路 灯光控制模块 灯光显示模块 报警模块 图2.1 汽车车灯控制电路方框图 电源电路即为驱动单片机工作电源所设计电路,它输出端及单片机Vcc相连,本设计电路采用USB口转换5V直流作为单片机电源。时序及复位电路是作为单片机能正常工作所必须最小系统,前者提供单片机工作所需时拍,后者初始化单片机。灯光控制模块是汽车灯光控制按钮,共有7个,直接连接到P1口各口线上
7、按下则相关灯亮,再按则灭。灯光显示模块即为汽车灯光显示电路,通过开关控制其显示情况。报警模块是在汽车转弯或发生紧急情况时,随着相关车灯闪烁同时,驱动蜂鸣器响以发出警报,以提醒行人或求救。 3硬件设计 3.1 AT89C51单片机结构及功能 3.1.1 AT89C51结构及引脚 AT89C51就是一个微型计算机,AT89C51单片机主要由运算器、控制器、存储器(ROM及RAM)和I/O接口组成。它内部结构图如3.1.1所示。 振荡器 和时序OSC 程序存储器4KB Flash ROM 数据存储器256字节RAM/SFR 2×16位 定时器/计数器 80C51 CPU
8、 64KB总线 扩展控制器 可编程I/O口 可编程 全双工串行口 外部事件计数输入 外中断 内中断 控制 P0 P1 P2 P3 串行通信 DBUS 图3.1.1 AT89C51单片机芯片内部结构 运算器包括一个可进行8位算术运算和逻辑运算单元ALU,8位暂存器1(TMP1)、暂存器2(TMP2),8位累加器ACC,寄存器B和程序状态寄存器PSW等。 控制器包括程序计数器PC、指令寄存器IR、指令译码器ID、振荡器及定时电路等。 AT89C51片内有Flash ROM(程序存储器,只能读)和RAM(数据存储器,可读可写)两类,他们各自有独立存储
9、地址空间,及一般存储器配置方式很不同。 AT89C51单片机有4个及外部交换信息8位并行接口,即P0-P3。他们都是准双向口,每个端口各有8条I/O线,均可作输入/输出。P0-P3口4个锁存器同RAM统一编址,可以把I/O口当做一般特殊功能寄存器(SFR)来寻址。 图3.1.2 AT89C51引脚 如图3.1.2所示是一个双列直插封装(DIP)方式AT89C51单片机,它共有40个引脚。其中很多引脚具有第二功能,使用时要加以注意。 3.1.2 AT89C51主要性能 AT89C51是一种4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable an
10、d Erasable Read Only Memory)低电压,高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,及工业标准MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMELAT89C51是一种高效微控制器。它为很多嵌入式控制系统提供了一种灵活性高且价廉解决方案。AT89C51主要特性如下所述。 ·及MCS-51 兼容,一个8位80C51微处理器(CPU); ·片内256字节数据存储器RAM/SFR,用于存放可以读/写数据; ·片内4K字节可编程闪烁存储器,用于存放程序、一些原始数据和表格; ·
11、寿命:1000写/擦循环; ·数据保留时间:10年; ·全静态工作:0-24MHz; ·三级程序存储器锁定; ·4个8位并行可编程I/O口P0-P3,每个口既可作输入又可作输出; ·两个16位定时器/计数器,每个定时器/计数器可设置成计数方式,用以对外部事件计数,也可设置成定时方式,根据定时结果实现单片机控制; ·5个中断源 、两个中断优先级; ·一个全双工UART(通用异步发送接收器)串行I/O口,用于实现单片机之间或单片机及计算机之间串行通信; ·具有低功耗闲置模式和掉电模式; ·片内振荡器和时钟电路,但石英晶体和微调电容需要外接,最高允许振荡频率为24MHz。 3.1
12、3 AT89C51管脚功能 VCC(40脚):电源端,为+5V。 GND(20脚):接地端。 P0口(P0.0-P0.7,39-32脚):P0口为一个8位漏级开路准双向I/O口,每脚可吸收8个TTL门电流。当P0口作为输入口使用时,应先向口锁存器(地址80H)写入全1,此时P0口全部引脚浮空,可作为高阻抗输入。做输入口使用时先写1,这就是准双向含义。在CPU访问片外存储器(AT89C51片外EPROM或RAM)时,P0口分时提供8位地址和8位数据复用总线。在此期间,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接受指令字节;而在校验程序时,则输出指令字节、验证时,要求外接
13、上拉电阻。 P1口(P1.0-P1.7,1-8脚):P1口是一个内部提供上拉电阻8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入1后,被内部上拉为高电位,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉缘故。在FLASH ROM编程和校验时,P1口接收低8位地址。 P2口(P2.0-P2.7,21-28脚):P2口为一个内部上拉电阻8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,可作为输入。作为输入时,P2口管脚被外部拉低,将输出电流。这是由于内部上拉缘故。P2口当用于外部程序存储器或
14、16位地址外部数据存储器进行存取时,P2口输出地址高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器内容。P2口在FLASH编程和校验时接收高8位地址信号和控制信号。 P3口(P3.0-P3.7,10-17脚):P3口管脚是8个带内部上拉电阻双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流,这是由于上拉缘故。在对Flash ROM编程或程序校验时,P3口还接受一些控制信号。P3口也可作为AT89C51一些特殊功能口,如表1所示。
15、 表1 P3口第二功能 I/O口线 专用功能 P3.0 RXD(串行数据接收) P3.1 TXD(串行数据发送) P3.2 (外部中断0请求输入) P3.3 (外部中断1请求输入) P3.4 T0(定时器0外部计数脉冲输入) P3.5 T1(定时器1外部计数脉冲输入) P3.6 (外部数据存储器写信号) P3.7 (外部数据存储器读信号) RST(9脚):复位信号输入端。当振荡器复位器件时,要保持RST脚两个机器周期(24个时钟振荡周期)高电平时间。 ALE/ (30脚):当访问外部存储器时,地址锁存ALE输出信号用于锁存低8位地址。在FLAS
16、H编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变频率周期输出正脉冲信号,此频率为振荡器频率1/6。因此它可用作对外部输出脉冲或用于定时目。然而要注意是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。如果微处理器在外部执行状态,ALE禁止,置位无效。ALE端得负载驱动能力为8个LS型TTL(低功耗甚至高速TTL)负载。此引脚第2功能在对片内带有4KB FLASH ROMAT89C51编程写入(固化程序)时,作为编程脉冲输入端。 (29脚):外部程序存储器选通信号。在由外部程
17、序存储器取指期间,每个机器周期两次有效。但在访问外部数据存储器时,这两次有效信号将不出现。端同样可驱动8个LS型TTL负载。要检查一个AT89C51小系统上电后CPU能否正常工作,也可用示波器检查端有无脉冲输出。如有,则说明基本上工作正常。 /Vpp(31脚):外部程序存储器地址允许输入端/固化编程电压输入端。当引脚接高电平时,CPU只访问片内Flash ROM并执行内部程序存储器中指令;但当PC(程序计数器)值超过0FFFH时,并自动转去执行片外程序存储器内程序。当引脚接低电平(接地)时,CPU只访问片外ROM并执行片外程序存储器中指令,而不管是否有片内程序存储器。在Flash ROM编程
18、期间,该引脚也用于施加12V编程允许电源Vpp(如果选用12V编程)。 XTAL1(19脚):接外部晶体和微调电容一端。反向振荡放大器输入及内部时钟工作电路输入。 XTAL2(18脚):接外部晶体和微调电容另一端。在AT89C51片内它是振荡电路反响放大器输出端,振荡电路频率就是晶体固有频率。若采用外部时钟电路,该引脚悬空。 另外AT89C51使用静态逻辑来设计,其工作频率可下降到0Hz,并提供两种可用软件来选择省电方式:空闲方式和掉电方式。在空闲方式中,CPU停止工作,而RAM、定时器/计数器、串行口和中断系统都继续工作。此时电流可降到大约为正常值15%。在掉电方式中,片内振荡器停止工
19、作,由于时钟电路被“冻结”,使一切功能都暂停,故只保存片内RAM中内容,直到下一次硬件复位为止。这种方式下电流可降到15uA,最小可降到0.6uA。 3.2 AT89C51时序电路 AT89C51单片机及其他单片机或微机一样是一种时序电路,从Flash ROM中取指令和执行指令过程中各种微操作,都是按着节拍有序工作。AT89C51时序电路如图3.2所示。 AT89C51单片机芯片内部有一个高增益反向放大器,用于构成振荡器。反向放大器输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体和两个电容就可以构成稳定自激振荡器,电容和通常取30pF左右,可稳定频率并对振荡频率有微调作用。振荡频
20、率范围为=0-24Mhz。 5V 图3.2 AT89C51的时序电路 晶体振荡器频率为,振荡信号从XTAL2端输入片内时钟信号发生器上,时钟发生器是一个2分频触发器电路,他将振荡器信号频率除以2,向CPU提供两相时钟信号P1和P2。时钟信号周期称为状态周期S,是振荡周期2倍,每个状态周期S前半周期,相位1(P1)信号有效,在每个状态周期S后半周期,相位2(P2)信号有效。CPU就以两相时钟P1和P2为基本拍指挥单片机各个部件协调地工作。单片机工作需要若干指令,而执行一条指令需要多少时间以机器周期为单位,一个机器周期是指CPU访问存储器一次所需要时间,它包括12个振荡周期,分为6个S状态周
21、期:S1-S6,每个状态周期又分为两拍,称为P1和P2。因此一个机器周期中12个振荡周期表示为S1P1,S1P2,S2P1,…,S6P2。 3.3 AT89C51复位电路 T89C51单片机及其他微处理器一样,在启动时需要复位,使CPU及系统各部件处于确定初始状态,并从初始状态开始。当系统处于正常工作状态时,且振荡器稳定后,RST引脚上有一个高电平并维持2个机器周期(24个振荡周期),则CPU就可以相应并将系统复位。除了系统正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也必须按复位键重新启动。AT89C51单片机复位电路如图3.3所示。 图3.3 AT89
22、C51的复位电路 在通电瞬间,电容通过电阻充电,RST端出现正脉冲,用以复位。只要电源上升时间不超过1ms,就可以实现上电自动复位。在振荡稳定后为保证复位高电平持续时间(即正脉冲宽度)大于两个机器周期,当采用晶体为12Mhz时,可取=10uF,=8.2k;当采用晶体频率为6Mhz时,可取=22uF,=1k。当系统出现死机或需要重新复位时,可直接按RESET键,这时通过电阻直接把RST端拉高,实现手动复位。 3.4 AT89C51电源电路 本设计单片机电源采用USB接口转换交流220V为5V直流供单片机使用,如图3.4所示。由于标准USB口输出电压为5V,这样正好可供单片机使用,这种设
23、计非常方便,即插即用,具有很大灵活性。我们可以通过一条数据线将其连接到计算机上,或者通过MP3充电器将其连接到交流电上,以给单片机供电。这些东西在我们生活中都非常常见,因此非常方便。 220V交流信号经过USB口整流后变为5V脉动直流,电路中电容=470uF,利用其充放电特性,使整流后脉动直流变为比较稳定直流。由于整流后信号带有高频及脉冲干扰信号,而电解电容具有一定电感,对其不能有效滤除,因此利用电容=0.1pF小电容,以滤去高频及脉冲干扰。电容、共同构成滤波电路。稳压二极管和限流电阻共同构成直流稳压电路。电阻和发光二极管串联作为供电指示灯。 稳压管一般选择原则为 其中为稳压
24、管稳定电压,为直流稳压电路输出电压或单片机输入电压,为稳压管稳压时流过电流。、分别为稳压管能够稳压最大、最小电流,、分别为负载电流最大、最小值。 图3.4 AT89C51电源电路 3.5汽车灯光控制电路 经过组合以上各单元电路后形成整体电路,如图3.5所示。 (1)开关控制部分 开关控制部分采用P1个线口输入,其中远、近光灯分别用开关、控制,按下时相关灯亮,再按则灭,和不能同时使用。左、右方向灯用开关、控制按下时相关灯亮,再按则灭,、互锁。雾灯、刹车灯、尾灯、紧急灯分别用开关、、、控制,按下相关灯亮,再按则灭。 (2)信号灯部分 发光二极管和普通二极管一样都具有单向导电性,只
25、有外加正向电压使得正向电流足够大时才能发光。发光二极管开启电压比普通二极管大,一般红色在1.6V-2.5V之间,黄色在1.9V-2.4V之间,绿色在2.0V-2.4V之间,蓝色/白色在3.0V-3.8V之间。一般发光二极管正向导通电流为5mA-20mA。正向电流愈大,则发光愈强。则限流电阻R计算公式为 其中为发光二极管开启电压,为导通电流。 本电路中红色发光二极管开启电压=2V,导通电流=10mA,则限流电阻为 依据上述公式可以计算出其它发光二极管限流电阻。 (3)声音信号部分 本次设计电路在汽车拐弯,汽车方向灯闪烁同时通过P3.0脚驱动蜂鸣器发出嘀嘀间歇作响声音。当发生紧急
26、情况,紧急灯控制开关按下时,除过相关灯闪烁同时,蜂鸣器也发出嘀嘀间歇作响声音,此时如果正在拐弯时,则汽车方向灯闪烁同时不发声。 程序中改变单片机P3.0引脚输出波形频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调声音。另外,改变P3.0输出电平高低电平占空比,则可以控制蜂鸣器声音大小。 (4)汽车灯光控制电路 汽车灯光控制电路如图3.5所示,由于P0口内部为一漏极开路电路,没有内部上拉电阻,作为输入口使用时应先写1,因此给P0口串一个8×10KΩ排阻,以作为其内部上拉电阻。这样P0口就可以成功作为输入口使用。 夜晚汽车正常行驶时,开关按下(接P1.0口),远光灯,亮;当要汇车时应
27、按下开关(接P1.1口),远光灯,灭,近光灯,亮。汇车完毕,再次按下,则远光灯、亮。汽车左转弯时,按下开关(接P1.2口),这时前左方向灯及后左方向灯亮,并且灯光一闪一闪,同时驱动蜂鸣器LS1作间歇性嘀嘀作响,汽车转正后再按下开关则灯灭;当要右转弯时,(接P1.3口),按下开关,这时前右方向灯及后右方向灯亮,灯光一闪一闪,同时驱动蜂鸣器LS1作间歇性嘀嘀作响。汽车转正直行后再按下开关则灯灭。左、右方向灯同时只能有一个能工作。当遇到大雾天气时,应按下开关(接P1.4口),则雾灯、、和亮;当踩下刹车时(接P1.5口),即相当按下开关,刹车灯及亮;刹车松开时,即相当于再按下开关,则刹车灯灭。晚上行车
28、或靠边停车时,为使后面车辆或行人能清楚看到前面车辆,应当按下开关(接P1.6口),使汽车尾部照明灯及亮。当遇到紧急情况是,应当按下开关,这时汽车灯、、、、,,,不停闪烁,同时驱动蜂鸣器急促嘀嘀作响,以发出警报。 图3.5 汽车灯光控制电路 4软件设计 本设计采用是C程序设计语言设计单片机程序。C语言是一种结构化计算机程序设计语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言表现能力和处理能力极强。它不仅具有丰富运算符和数据类型,便于实现各类复杂数据结构。它还可以直接访问内存物理地址,进行位(bit)一级操作。它既有高级语言特点,又具有汇编语言特点。它可以作为系统设计语
29、言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件应用程序。C程序设计语言设计程序可读性强,可移植性好,适合于编写对硬件依赖性不强程序。根据软件设计思想,可画出本系统程序流程图如图4.1所示。 程序运行后,通过while语句循环扫描,不断读入7个开关状态,通过if-else语句判断各个开关状态,为0时则转到相应程序通过软件点亮汽车车灯,否则不操作或关断相应车灯。 5仿真及调试 本设计采用仿真软件Keil C51 µVision2和Proteus professional 7.5进行仿真。Keil C51 µVision2主要用于单片机程序编写调试及仿真。Prote
30、us professional 7.5主要用于单片机及硬件电路仿真。 5.1 Keil C51 µVision2介绍 Keil C51是美国Keil Software公司出品51系列兼容单片机C语言软件开发系统,及汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富库函数和功能强大集成开发调试工具,全Windows界面。另外重要一点,只要看一下编译后生成汇编代码,就能体会到Keil C51生成目标代码效率非常之高,多数语句生成汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言优势。C5
31、1工具包中uVision及Ishell分别是C51 for Windows和for Dos集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以及库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。 Keil C51 µVisi
32、on2集成开发环境是Keil Software,Inc/Keil Elektronik GmbH开发基于80C51内核微处理器软件开发平台,内嵌多种符合当前工业标准开发工具,可以完成从工程建立到管理、编译、链接、目标代码生成、软件仿真、硬件仿真等完整开发流程尤其是C编译工具在产生代码准确性和效率方面达到了较高水平,而且可以附加灵活控制选项,在开发大型项目时非常理想。 程序入口 读入开关 K0(P1.0)、K1(P1.1)、K2(P1.2)、K3(P1.3) K4(P1.4)、K5(P1.5)、K6(P1.6)、K7(P1.7) 状态 判断开关状态 开关K0-P1.0为0,远光灯D
33、5、D6亮 开关K1-P1.1为0,近光灯D7,D8亮 开关K2-P1.2为0,左方向灯D1、D9亮闪 开关K3-P1.3为0,右方向灯D2、D10亮闪 开关K4-P1.4为0,雾灯D3、D4、D11、D12亮 开关K5-P1.5为0,刹车灯D13、D14亮 开关K6-P1.6为0,尾灯D15、D16亮 开关K7-P1.7为0,灯D13、D14、D15、D16亮闪 图4.1 系统程序流程图 5.2 Proteus Professional 7.5介绍 Proteus是由英国Labcenter electronics公司开发EDA工具软件。他从1989年出现一直到现在已经
34、有20多年历史,在全球广泛使用。Proteus安装以后,主要由两个程序组成:Ares和Isis。前者主要用于PCB自动或人工布线及其电路仿真,后者主要采用原理布图方法绘制电路并进行相应仿真。除了上述基本应用之外,Proteus革命性功能在于它电路仿真是互动,针对微处理器应用,可以直接在基于原理图虚拟原型上编程,并实现软键代码级调试,还可以直接实时动态地模拟按钮、键盘输入,LED、液晶现实输出,同时配合虚拟工具如示波器、逻辑分析仪等等进行相应测量及观测。Proteus软件应用范围十分广泛,涉及PCB制板、SPICE电路仿真、单片机仿真,在6.9版本中还加入了对ARM7/LPC2000仿真。 及
35、多数仿真软件相似,Proteus有着数量庞大元器件库。及多数仿真软件相似,Proteus有着数量庞大元件库。Labcenter公司及相关第三方软件阵容共同开发了6000多个模拟和数字电路中常用spice模型以及各种动态元件,基本元件如电阻、电容、各种二极管、三极管、MOS管、555定时器等;74系列TTL 元件和4000系列CMOS 元件;存储芯片包括各种常用ROM, RAM,EEPROM, 还有常见I2C器件等。在丰富库元件支持下,原理布图时只要进行相应调用和连线,通过对每个元件属性设置完成绘图,然后即可进行仿真和虚拟测量。 5.3调试 对本系统来说,调试工作分以下三步进行。 1)在系
36、统硬件部分制作出来后,对其进行详细地检测调试,查看制作过程中是否存在错焊、虚焊等情况,查看单片机是否能够正常工作,测试硬件部分是否能够完成其相应功能。出现问题要予以排除,如果是硬件部分电路图错误,则要对其修改,反复测试,直到硬件连接完全无错,并且设计合理。本系统经过前后三次电路设计和修改,最终硬件设计合理。在此,首先,需检验输出电压是否正常,应将变压器接入电源电路,观察发光二极管是否亮,以确定是否有电压输出,再用数字万用表测试输出电压是否是5V,如果是5V表明电源电压正常工作,如果不是上述结果应该检查电路。 2)在设计系统软件部分时,在Keil软件中编写程序,对程序进行不断调试编译,直到程序
37、能够正常运行。然后在Proteus软件中进行仿真测试,看功能是否能够实现。 3)系统联调。在上面两步完成后,我们就必须将汽车灯光控制电路硬件和软件部分结合起来,进行系统联调,检验系统能否正常运行,测试系统各项性能指标,看是否能够达到预期要求,必要时,还要不断地修改和完善程序,直到系统能够实现预期功能。 6结论 6.1设计结果 通过这次汽车灯光控制电路设计,我收获甚多,前期经过大量资料查阅,并设计好原理图、编写好程序以及编译修改,然后进行实物制作,为确保成功,对布线、装配、焊接每个过程都做了大量细致工作,最终成功实现设计要求。 6.2系统缺陷及建议 本次设计电路虽然最终实现设计要求,
38、但还有以下缺陷。 1)灯光采用发光二极管,效果不是很理想。建议采用功率更大灯泡代替。 2)由于采用单片机作为控制器,输出直流电压只有5v,电流也只有20毫安左右,因此,想驱动更大灯需要添加放大电路或者要采用继电器实现对交流电路控制。 3)由于没有采用PCB板,电路不稳定易受外部干扰,最好能制作成PCB板电路。 6.3致谢 本次设计得到宋老师大量设计指导,特此感谢。也感谢罗东同学在电路焊接过程中给予很多建设性意见。 参考文献 [1]曹汇坚,池品优.基于MS-51系列单片机控制汽车转弯信号灯[J].现代计算机(专业版),2009(6):45-48. [2]李
39、朝青.单片机原理及接口技术[M].北京航空航天大学出版社,2005.17-47. [3]何立民.MCS-51单片机应用系统设计[M].北京航空航天大学出版社,1995.30-45. [4]潘新民.单片机实用系统.北京:人民邮政出版社,2001.21-35. [5]童诗白,华成英.模拟电子技术基础[M].北京:高等教育出版社,2007.387-406. [6]毋茂盛,王静,张晖.单片机串行接口技术研究[J].河南师范大学学报, 2000,28(3):96-98. [7]李毅.串行接口8位LED显示驱动器[j].重庆职业技术学院学报,2003,12(3):110-113. [8]陈洪财
40、单片机C语言和汇编语言实用开发技术[M].哈尔滨工程大学出版社,2008.19-65. [9]周润景,张丽娜.基于PROTUES电路及单片机系统设计及仿真[M].北京航空航天大学出版社,2006.8-112. [10] Detlef Decker.Performance and Perspectives of Light Sources for Signal Lamps,HELLA KG Hueck & Co.,Gemany,1990,1(0703). [11] Christophe DUBOSC.Styling Trends for Car Rearlamps.Valeo Ligh
41、ting systems,SEA 980321.
附录 程序清单
//头文件、键位声明================================
#include
42、5;//刹车灯控制键 sbit key6=P1^6;//后照明灯控制键 sbit key7=P1^7;//紧急情况控制键 sbit led0=P0^0;//后左方向灯 sbit led1=P0^1;//后左雾灯 sbit led2=P0^2;//左刹车灯 sbit led3=P0^3;//左尾灯 sbit led4=P0^4;//前左方向灯 sbit led5=P0^5;//前左雾灯 sbit led6=P0^6;//左近光灯 sbit led7=P0^7;//左远光灯 sbit led8=P2^0;//右远光灯 sbit led9=P2^1;//前右雾灯 sbit
43、led10=P2^2;//前右方向灯
sbit led11=P2^3;//前右方向灯
sbit led12=P2^4;//右尾灯
sbit led13=P2^5;//右刹车灯
sbit led14=P2^6;//后右雾灯
sbit led15=P2^7;//后右方向灯
sbit buzzer=P3^0;//蜂鸣器
//去抖动延时子程序==============================
void delay10ms(int x)
{
unsigned int m,n;
for(m=0;m 44、
}
//声音延时子程序================================
void delay()//延时子程序
{
unsigned int i,j;
for(i=0;i<500;i++)
for(j=0;j<800;j++);
}
//蜂鸣器发声子程序==============================
void sound()//发声子程序
{
unsigned int a,b;
for(a=0;a<100;a++)
{
buzzer=~buzzer;
for( 45、b=0;b<850;b++);//850为蜂鸣器发声频率,可调
}
}
//主程序======================================
void main()
{
P0=0XFF;P1=0XFF;P2=0XFF;P3=0XFF;
while(1)
{
if(key0==0)//远光灯开关打开
{
delay10ms(2);//延时去抖动
while(key0==0);//等待键释放
delay10ms(2);
led6=1;led9=1;led5 46、led5;led10=!led10;
}
if(key1==0)//近光灯打开
{
delay10ms(2);
while(key1==0);
delay10ms(2);
led5=1;led10=1;led6=!led6;led9=!led9;
}
if(key2==0)//左方向灯打开
{
if(key7!=0)//紧急灯未打开时,方向灯闪烁同 47、时蜂鸣器鸣叫
{
led0=0;led4=0;
sound();
led0=1;led4=1;
delay();
}
else//紧急灯打开时,方向灯闪烁同时蜂鸣器不鸣叫
{
led0=~led0;led4=~led4;
delay();
}
}
else
{
buzzer=1; 48、
led0=1;led4=1;
}
if(key3==0)//右方向灯打开
{
if(key7!=0)//紧急灯未打开时,方向灯闪烁同时蜂鸣器鸣叫
{
led11=0;led15=0;
sound();
led11=1;led15=1;
delay();
}
else//紧急灯打开时,方向灯闪烁同时蜂鸣器不鸣叫
49、{
led11=~led11;led15=~led15;
delay();
}
}
else
{
buzzer=1;
led11=1;led15=1;
}
if(key4==0)//雾灯打开
{led3=0;led7=0;led8=0;led12=0;}
else//雾灯未打开或关掉
{led3=1;led7=1;led8=1;led12=1;}
if(key7==0)//紧急开关打开
50、 {
led1=0;led14=0;led2=0;led13=0;led0=0;led4=0;led11=0;led15=0;
sound();
led1=1;led14=1;led2=1;led13=1;led0=1;led4=1;led11=1;led15=1;
delay();
}
else//紧急开关未打开或关掉
{
if(key5!=0&key6!=0)//刹车灯及尾灯没有按下






