用最直接旅此的方式实现流水灯
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//重新赋值
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)