单片机汇编语言流水灯程序延时0.5秒 一共四个灯循环

单片机汇编语言流水灯程序延时0.5秒 一共四个灯循环,第1张

4只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。

用最直接旅此的方式实现流水

ORG 0000H

START:MOV P1,#01111111B 最下面的LED点亮

LCALL DELAY 延时60秒

LCALL DELAY 延时60秒

MOV P1,#10111111B 最下面第二个的LED点亮

LCALL DELAY 延时60秒

LCALL DELAY 延时60秒

MOV P1,#11011111B 最下面第三个的LED点亮 (以下省略)

LCALL DELAY

LCALL DELAY 延时60秒

MOV P1,#11101111B

LCALL DELAY

LCALL DELAY 延时60秒

MOV P1,#11110111B

LCALL DELAY

LCALL DELAY 延时60秒

MOV P1,#11111011B

LCALL DELAY 延时60秒

LCALL DELAY 延时60秒

LCALL DELAY 延时60秒

LCALL DELAY 延时60秒

LCALL DELAY 完成第一次循环点亮,延时约0.25秒

AJMP START 反复循环

延时子程序,12M晶振延时约250毫秒

DELAY: 大约值:2us*256*256*2=260ms,岁禅也可以认为为250ms

PUSH PSW现场保护指令(有时可以不加)

MOV R4,#240

L3: MOV R2 ,#00H

L1: MOV R3 ,#00H

L2: DJNZ R3 ,L2最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)乎镇尘

DJNZ R2 ,L1中层循环:256次

DJNZ R4 ,L3外层循环:240次

POP PSW

RET

END

循环毁纤3圈,就是循岩扮环3*8=24次,可以用个 for循环24次。

void main()

{ uchar a

uchar i

a=0xfe

for(i=0i<24i++)

{

P1=a

delayms(500)

a=_crol_(a,1)

}

while(1)//程序最后停在此死循环处,啥也不纤枣仿做

}

/*-----------------------------------------------

名称:流水灯

内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果

------------------------------------------------*/

#include<reg52.h>//包含头文件,一般情困罩况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------

延时子程序

------------------------------------------------*/

void delay(unsigned int cnt)

{

while(--cnt)

}

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

P1=0xfe //给初始化值 换算成二进制是1111 1110

while(1)

{

delay(30000)//延时程序

P1<<=1 //左移一位 该语句等效于 P1=P1<<1

P1|=0x01 //最后一位补汪槐闹1,该语句等效于 P1=P1|0x01 符号"明灶|"表示"或"

if(P1==0x7f) //检测是否移到最左端?"=="表示检测符号2端的值是否相等

{

delay(30000)

P1=0xfe//重新赋值

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12487409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存