你流水灯都写好了 全亮全灭还不简单啊,设置 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);
扩展资料:
常用单片机汇编指令:
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灯泡从左到右依次点亮,最后全部亮,再全部熄灭后重复前面的过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)