A41基于51单片机汇编语言汽车转向灯Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-23 09:02:37    阅读:11 次   消耗积分:10 分

image.png

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:

开关组合状态字输出灯组表现
全松开1FH00H全灭
左转17H2AH左侧三灯1秒一闪
右转0FH54H右侧三灯1秒一闪
双闪1DH7FH全部灯1秒一闪
刹车1EH60H刹车灯常亮
左转+刹车16H6AH→40H左侧闪,刹车常亮
右转+刹车0EH6AH→40H右侧闪,刹车常亮
双闪+刹车1CH7EH→60H全部闪,刹车常亮
左转+双闪+刹车14H7EH→40H全闪后回左侧
右转+双闪+刹车0CH7EH→20H全闪后回右侧
停靠1BH66H/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要串限流电阻,仿真里不串也能亮,实物会烧口。

四、日期修改

资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。

五、资料下载

付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。

/

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:A40基于51单片机汇编语言电子琴Proteus设计
下一篇:A42基于51单片机汇编语言PWM占空比输出Proteus设计
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}