8086 汇编 亮2个灯,暗6个灯,一个灯从上往中间轮流点亮,另一个灯从下往中间轮流点亮,循环间隔约1秒。

8086 汇编 亮2个灯,暗6个灯,一个灯从上往中间轮流点亮,另一个灯从下往中间轮流点亮,循环间隔约1秒。,第1张

//流水灯

#include "reg52.h"

#define LED_PORT P3void

delay(unsigned char time)

{

unsigned char i,j,kfor(i=0i>1

halfbytel=halfbytel<<1delay(10)} }}

例如:

1、亮4个灯、暗4个灯,1亮1暗均匀分布且稳定不变;

2、亮1个灯,暗7个灯段旁,从上到下轮流点亮每一个灯,每次只亮一个灯,循环间隔约2秒;

3、亮2个灯,暗6个灯,一个灯从上往中间轮流点亮,另一个灯从下往中间轮流点亮,循环间隔约1秒。

4、采用ROR、ROL循环移位语句(p77)及 LOOP语句(p81),实现一个灯从第1个循环点亮到第8个,从第8个循环点亮至第1个,一直上下循环。

扩展资料:

Intel 8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64K8位明宏元的输出输入(或32K 16 位元),以及固定的向量中断。大部分的指激燃册令只能够存取一个内存位址,所以其中一个 *** 作数必须是一个寄存器。运算结果会储存在 *** 作数中的一个寄存器。

参考资料来源:百度百科-汇编程序

#include<reg52.h> //52单片机头文件

#include <intrins.h>//包含有左右循环移位子函数的库

#define uint unsigned int//宏定义

#define uchar unsigned char //宏定义基首

void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200)大约延时200ms.

{ //delay(500)大约延时500ms.

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

void main() //主函数

{

uchar a,i,j

for(j=0j<3j++) //寄偶交替

{

P1=0x55 //点亮小灯

delay(300)//延时300毫秒

P1=0xaa

delay(300)//延时300毫秒

}

for(j=0j<3j++)//流水灯

{

a=0xfe

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

{

P1=a //点亮小灯

delay(300)//延时300毫秒

a=_crol_(a,1)

}

}

P1=0xff

for(j=0j<3j++) //橡梁从两边往中间流

{

P1=0x7e //点亮小灯

delay(300)//延时300毫秒

P1=0xbd

delay(300)//延时300毫秒

P1=0xdb //点亮小灯

delay(300)//延时300毫秒

P1=0xe7

delay(300)//延时300毫秒

}

P1=0xff

for(j=0j<3j++)//搏如数从中间往两边流

{

P1=0xe7 //点亮小灯

delay(300)//延时300毫秒

P1=0xdb

delay(300)//延时300毫秒

P1=0xbd //点亮小灯

delay(300)//延时300毫秒

P1=0x7e

delay(300)//延时300毫秒

}

P1=0xff

for(j=0j<6j++)//全部闪烁

{

P1=~P1 //点亮小灯

delay(300)//延时300毫秒

}

P1=0xff

while(1)

}

这种花式点亮方式也有很多方法,把要显示的数据放进数组里面,定时送闷凳数组数据就可以了,把你要第一次显示的数据放数组里面做罩差,第二次纯皮要显示的数据接着放,读取数组加偏移地址就可以了,数组数据用来放你要亮的灯。


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

原文地址: https://outofmemory.cn/yw/12307349.html

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

发表评论

登录后才能评论

评论列表(0条)

保存