通过AT89C51单片机控制8个发光二极管发光,实现暗点以1HZ频率由低位到高位循环移动

来源:百度知道 编辑:UC知道 时间:2024/05/22 12:56:38
通过AT89C51单片机控制8个发光二极管发光,实现暗点以1HZ频率由低位到高位循环移动
根据设计任务的要求编写程序
各位大哥大姐有会的话希望不吝赐教啊~
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV A,#0FEH
R: MOV P1,A
RL A
ACALL DEL
AJMP R
DEL : MOV R5,#04H
DEL1: MOV R6,#0FFH
DEL2: MOV R7,#0FFH
DEL3: DJNZ R7,DEL3
DJNZ R6,DEL2
DJNZ R5,DEL1
RET
END

这个程序仿真可以实现了,请问1HZ怎么来体现啊.

请问怎么修改程序可以使等以1HZ的频率亮灭?

这个很简单的啊,可以用定时器中断,也可以用软件来产生延时,不过用定时器中断精确些。

LOOP:
MOV A,#0FEH
MOV R2,#8
OUTPUT:
MOV P1,A
RL A
CALL DELAY
DJNZ R2,OUTPUT
LJMP LOOP
DELAY:
MOV R6,#0
MOV R7,#0
DELAYLOOP:
DJNZ R6,DELAYLOOP
DJNZ R7,DELAYLOOP
RET
END

// 时钟初始化、端口初始化和头文件已经省略
//省略子程序 delay();

void main(void)
{

while(1)
{
PORTD=0<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7;
DDRD=0xFF;
delay(100);

PORTD=1<<0|0<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7;
DDRD=0xFF;
delay(100);

//依照上面的格式,逐步移位

}

}

1HZ的体现有两种,第一种开定时器产生精确的定时,第二种软件延时,这种根据指令周期来大致计算。一般采用一个循环来延时的!

用一个端口可以控制多路的话 可以采用 74HC4094这个芯片 ,具体实现的代码驱动程序为
void vWrite74HC4094(void)
{
static UCHAR temp1,temp2;
if((temp1!=Plcddata1.I