
A41基于51单片机汇编语言汽车转向灯Proteus设计
用51单片机汇编语言做一个汽车灯光控制:五个开关分别管左转、右转、双闪、刹车、路边停靠,P1口八个灯按不同组合输出,转向灯一秒一闪,刹车灯常亮,双闪全车闪。程序的核心是一张"按键组合→灯组状态"的对照表。
一、设计实现功能
本设计功能简介:使用51单片机和汇编语言设计一个汽车转向灯与刹车灯控制的proteus仿真,要求以下功能:
1、使用汇编语言编写程序。
2、五个输入开关:左转、右转、双闪(紧急)、刹车、停靠。
3、左转/右转时对应侧三灯一秒一闪,刹车时刹车灯常亮。
4、支持组合状态:左转+刹车、右转+刹车、双闪+刹车、左转+双闪+刹车、右转+双闪+刹车。
5、停靠时左右灯交替闪,无效组合进入故障提示。
二、资源汇总
1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。
2、程序文件:main.asm汇编源码,以及编译好的cx.hex。
3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。
三、设计介绍
拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。
图1 Proteus仿真总览

五个开关接在P3.0~P3.4,低电平有效,程序读进来先做一次掩码:
`asm
START: MOV A,P3
ANL A,#1FH ;只取低5位
CJNE A,#1FH,SHIY ;不等于全1说明有键按下
AJMP START1 ;没键按下就关灯`
掩码之后这5位就是一个"状态字",全松开是1FH,按下某个键对应的位变0,于是每个组合都有唯一的值,判断只用一句CJNE:
| 开关组合 | 状态字 | 输出 | 灯组表现 |
| 全松开 | 1FH | 00H | 全灭 |
| 左转 | 17H | 2AH | 左侧三灯1秒一闪 |
| 右转 | 0FH | 54H | 右侧三灯1秒一闪 |
| 双闪 | 1DH | 7FH | 全部灯1秒一闪 |
| 刹车 | 1EH | 60H | 刹车灯常亮 |
| 左转+刹车 | 16H | 6AH→40H | 左侧闪,刹车常亮 |
| 右转+刹车 | 0EH | 6AH→40H | 右侧闪,刹车常亮 |
| 双闪+刹车 | 1CH | 7EH→60H | 全部闪,刹车常亮 |
| 左转+双闪+刹车 | 14H | 7EH→40H | 全闪后回左侧 |
| 右转+双闪+刹车 | 0CH | 7EH→20H | 全闪后回右侧 |
| 停靠 | 1BH | 66H/00H | 左右灯100ms交替 |
| 其它组合 | — | 80H | 故障灯闪 |
按键消抖用的是"读两次比对":第一次读到有键,延时约16毫秒再读一次,两次相同才认,两次之间变了就当没按。
闪烁的节奏靠软件延时凑:Y1s是三层循环,约1秒;Y100ms是两层,约100毫秒。转向灯的写法是"亮1秒、灭1秒",所以一个完整的闪周期是2秒,和实车上的转向灯频率接近。
组合状态用的是"先全亮再回落"的技巧,比如左转+刹车:
`asm
LEBR: MOV P1,#6AH ;左转灯+刹车灯
LCALL Y1s
MOV P1,#40H ;只剩刹车灯
LCALL Y1s
AJMP START`
第一秒亮的是6AH(左侧灯加尾部灯),第二秒只剩40H(尾部灯),于是看起来左侧在闪、尾部常亮——一个字节就把"闪烁+常亮"两件事叠在一起完成了。
特别注意: 开关读进来全是0或者一直是按下状态,检查P3有没有上拉,开关要一端接P3一端接地;按下开关灯不亮,先看MOV P1,#00H是不是在后面把输出又清了;闪烁频率明显不对,Y1s是按12MHz算的,晶振不同要重算循环次数;组合键识别不出来,是中间有按键抖动导致两次读数不一致,把YS的延时加大一点;P1口直接带八个LED要串限流电阻,仿真里不串也能亮,实物会烧口。
四、日期修改
资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。
五、资料下载
付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。
/

