A06基于51单片机汇编流LED闪烁Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-13 12:07:29    阅读:17 次   消耗积分:5 分

image.png

A06基于51单片机汇编流LED闪烁Proteus设计

一、设计任务

使用51单片机设计一个闪烁的LED。

1、使用汇编语言设计。

2、使用单片机控制1个LED进行闪烁,亮一段时间、灭一段时间,一直循环。

这个设计是汇编入门的最小实例:整个程序只有"点灯-延时-灭灯-延时"四步,适合第一次接触51汇编的人把软硬件流程跑通。

二、仿真演示

仿真运行效果

仿真里能看到一个LED以固定的节奏闪烁,亮灭交替不停。

程序在Keil里用汇编编写,编译生成hex后加载到Proteus的51芯片里运行。工程截图如下:

Keil工程截图

实物效果:

实物演示

三、关于程序

程序结构极其简单,主循环就四行:

`
START: SETB P2.7 ;LED熄灭
LCALL DELAY
CLR P2.7 ;LED点亮
LCALL DELAY
LJMP START
`

1、亮灭怎么控制

LED接在P2.7口线上,通过位操作直接控制:

指令P2.7电平LED状态
SETB P2.7高电平熄灭
CLR P2.7低电平点亮

这里的LED是低电平点亮(共阳极接法),所以"清0"才是亮。 Proteus里LED不亮的时候,先看看是不是把高低电平搞反了。

2、延时子程序的三层循环

闪烁的快慢由DELAY子程序决定,它用了三层循环嵌套:

层寄存器初值作用
最内层R7248DJNZ R7,$ 原地打转
中间层R620每圈重装R7,跑20遍
最外层R520每圈重装R6,跑20遍

圈数算法:单层DJNZ指令要2个机器周期,最内层一圈约496个周期;中间层20遍、最外层20遍,总周期数约20×20×496≈198400。

晶振12MHz时1个机器周期是1微秒,一次DELAY约0.2秒。亮一次+灭一次就是0.4秒左右,一秒大约闪2.5次。

3、想改闪烁速度

只改DELAY的三个初值就行:

想得到的效果改法
闪更快把R6或R7的初值改小
闪更慢加大R5的层数,或把初值改大
占空比不等亮灭两次LCALL之间插不同的延时次数

特别注意: 改完初值要重新编译生成hex再跑仿真,Keil不会自动更新。

四、特别注意

特别注意: 仿真跑起来灯不亮,先检查压缩包是否解压完整;Proteus用7.8或8.6版本;改了汇编源码要重新编译生成hex再跑仿真。

五、资料下载

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

/

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:A05基于51单片机汇编流水灯Proteus设计,asm
下一篇:A07基于51单片机汇编LED台灯Proteus设计
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}