单片机流水灯全亮在灭在亮的程序怎么写

单片机流水灯全亮在灭在亮的程序怎么写,第1张

你流水灯都写好了 全亮全灭还不简单啊,设置 P0=0X00 (假设低电平亮,高电平灭) 在延迟一下 在P0=0XFF 在延时 不就OK了 把这几个指令打包下放到一个子程序里 你用按键控制的时候就让按键执行这个子程序 如果是 主程序循环的 话就放进主程序

#include <reg52h>

#define LED P0 /宏定义LED接于P0口/

void delay (int); /声明延迟子函数/

main()

{

int i;

while(1)

{

LED=0xfe;

for(i=0;i<7;i++)

{

delay(100);

LED=(LED<<1)|0x01; /最低位LED灯左移一位后进行或运算使得最低位不会为“0”/

}

for(i=0;i<7;i++)

{

delay(100);

LED=(LED>>1)|0x80; /最低位LED灯右移一位后进行或运算使得最高位不会为“0”/

}

LED=0xff;

for(i=0;i<4;i++)

{

delay(300);

LED=~LED; /所有的LED灯取反全亮或者全灭/

}

}

}

#include<reg51h>

#include<intrinsh>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

uchar i;

while(x--)

{

for(i=0;i<120;i++);

}

}

//主程序

void main()

{

uint s;

while(1)

{

P0=0xfe;

DelayMS(150);

for(s=8;s>1;s--)

{

P0=_crol_(P0,1); //P0 的值向左循环移动

DelayMS(150);

}

P0=0x00;

DelayMS(150);

p0=0xff;

DelayMS(150);

扩展资料:

常用单片机汇编指令:

1 MOV A,Rn 寄存器内容送入累加器

2 MOV A,direct 直接地址单元中的数据送入累加器

3 MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器

4 MOV A,#data 立即数送入累加器

5 MOV Rn,A 累加器内容送入寄存器

6 MOV Rn,direct 直接地址单元中的数据送入寄存器

7 MOV Rn,#data 立即数送入寄存器

8 MOV direct,A 累加器内容送入直接地址单元

9 MOV direct,Rn 寄存器内容送入直接地址单元

10 MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元

11 MOV direct,@Ri (i=0,1)间接RAM 中的数据送入直接地址单元

12 MOV direct,#data 立即数送入直接地址单元

13 MOV @Ri,A (i=0,1)累加器内容送间接RAM 单元

14 MOV @Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元

15 MOV @Ri,#data (i=0,1)立即数送入间接RAM 单元

16 MOV DPTR,#data16 16 位立即数送入地址寄存器

17 MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器

18 MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器

19 MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器

20 MOVX A,@DPTR 外部RAM(16 位地址)送入累加器

21 MOVX @Ri,A (i=0,1)累计器送外部RAM(8 位地址)

22 MOVX @DPTR,A 累计器送外部RAM(16 位地址)

23 PUSH direct 直接地址单元中的数据压入堆栈

24 POP direct d栈送直接地址单元

25 XCH A,Rn 寄存器与累加器交换

26 XCH A,direct 直接地址单元与累加器交换

27 XCH A,@Ri (i=0,1)间接RAM 与累加器交换

28 XCHD A,@Ri (i=0,1)间接RAM 的低半字节与累加器交换

参考资料来源:百度百科-单片机汇编指令

#include <reg51H>

//假设P2口顺序接LED,并且高电平点亮;

typedef unsigned char uchar;

typedef unsigned int uint;

void delay1ms(uint);

main()

{

while(1)

{

static uchar order=1;

uchar n;

P2=0x00; //每种方式的开始,灯光全灭

if(order==1) //方式一:全灯逐个点亮,然后逐个灭掉

{

for(n=0;n<8;n++)

{

P2|=0x01<<n; //逐个点亮,直至全亮

delay1ms(500); //半秒间隔

}

for(n=0;n<8;n++)

{

P2<<=1; //逐个灭,直至全灭

delay1ms(500);

}

}

else if(order==2) //方式二:全灯两两先亮后灭;

{

for(n=0;n<8;n+=2)

{

P2=0x03<<n;

delay1ms(500);

P2=0x00;

delay1ms(500);

}

}

else //方式三:全灯逐个先亮后灭;

{

for(n=0;n<8;n++)

{

P2=0x01<<n;

delay1ms(500);

P2=0x00;

delay1ms(500);

}

}

if(++order>3)order=1; //order控制闪烁方式循环

}

}

void delay1ms(uint t)

{

uint i;

uchar j;

for(i=0;i<t;i++)

for(j=0;j<121;j++);

}

以上就是关于单片机流水灯全亮在灭在亮的程序怎么写全部的内容,包括:单片机流水灯全亮在灭在亮的程序怎么写、利用单片机控制八个led灯,要求:全亮全灭 ,四亮四灭,以从右到左的 流水形式编程,不是用c语言 编、单片机用汇编做一个控制8个LED灯泡从左到右依次点亮,最后全部亮,再全部熄灭后重复前面的过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/10140531.html

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

发表评论

登录后才能评论

评论列表(0条)

保存