先是让第一个灯闪的程序:
start: SETB P0.0;(1)是让灯灭
LCALL DELAY;(2)是延时,调用延时子程序指令
CLR P0.0;(3)是让灯亮
LCALL DELAY;(4)和第二条一模一样,也是调用延时子程序指令
LJMP start;(5)跳转回去执行第一条指令
DELAY: MOV R7,#250;(6)让R7作为计数器,并装入一个常数
D1: MOV R6,#250;(7)让R6作为计数器,并装入一个常数
D2: DJNZ R6,D2;(8)让R6减1,并判断R6是否为0。若R6为0,向下执行指令。若R6不为0,跳转D2,继续让R6减1。
DJNZ R7,D1;(9)让R7减1,并判断R7是否为0。若R7为0,向下执行指令。若R7不为0,跳转D1,使R6完成新一轮计数。
RET;(10)返回指令。
END;(11)程序结束
再是挨着闪的程序:
;------------------主程序------------------
START: CLR P0.0;P0.0输出低电平,使LED1点亮
ACALL DELAY;调用延时子程序
SETB P0.0;P0.0输出高电平,使LED1熄灭
CLR P0.1;P0.1输出低电平,使LED2点亮
ACALL DELAY;调用延时子程序
SETB P0.1;P0.1输出高电平,使LED2熄灭
CLR P0.2;P0.2输出低电平,使LED3点亮
ACALL DELAY;调用延时子程序
SETB P0.2;P0.2输出高电平,使LED3熄灭
CLR P0.3;P0.3输出低电平,使LED4点亮
ACALL DELAY;调用延时子程序
SETB P0.3;P0.3输出高电平,使LED4熄灭
CLR P0.4;P0.4输出低电平,使LED5点亮
ACALL DELAY;调用延时子程序
SETB P0.4;P0.4输出高电平,使LED5熄灭
CLR P0.5;P0.5输出低电平,使LED6点亮
ACALL DELAY;调用延时子程序
SETB P0.5;P0.5输出高电平,使LED6熄灭
CLR P0.6;P0.6输出低电平,使LED7点亮
ACALL DELAY;调用延时子程序
SETB P0.6;P0.6输出高电平,使LED7熄灭
CLR P0.7;P0.7输出低电平,使LED8点亮
ACALL DELAY;调用延时子程序
SETB P0.7;P0.7输出高电平,使LED8熄灭
ACALL DELAY;调用延时子程序
AJMP START;八个灯一次亮了后返回开头再次循环
;------延时子程序-------
DELAY: MOV R0,#255;R0装入255
D1: MOV R1,#255;R1装入255
DJNZ R1,$;使R1自减为零后执行下一句指令
DJNZ R0,D1;R0自减1,如果为零执行下一句指令,如果不为零,跳转D1
RET;子程序返回
;==============================================================================;
END;程序结束
上一篇:用C51做流水灯
下一篇:基于89C51的一个简单的警报系统
设计资源 培训 开发板 精华推荐
- 综合测试仪特点及操作步骤
- LeddarTech参加2021年9月举行的三个大型国际活动
- 苹果 iOS/iPadOS 15.3 开发者预览版 Beta 发布了
- 三季度中国可穿戴设备市场出货量增速显著下降
- iQOO 9现身Geekbench:骁龙8 Gen 1+12GB内存
- 西门子 Xcelerator 的 Capital 软件助力 Airbus
- 云维保为工厂设备巡检维保实现数字化赋能新一代工业互联网
- keil_提示出错 cannot load flash programming algorithm !
- 瑞萨收购奥地利半导体设计公司 Panthronics
- 如何使用Arduino IDE进行STM32开发