发布网友
共3个回答
热心网友
首先,是单灯如何点亮的问题,无非就是某个gpio口输出高电平或者低电平(由外部电路决定)使灯亮灭,假设输出高电平为亮,输出低电平为灭。
其次,1hz闪烁,即代表定时1s开、关灯。所以要用到定时器。
代码如下:
#include
"stdio.h"
#define
led_on
p1.1
=
1;
#define
led_off
p1.1
=
0;
bit
flag_1s;
bit
flag_cnt;
void
main(void)
{
sys_init();
while(1)
{
if(flag_1s
==
1)
{
flag_1s
=
0;
if(flag_cnt
^=
1)
led_on;
else
led_off;
}
}
}
sys_init()
{
//
初始化mcu的io口
//
初始化定时器
}
void
timer_isr
(void)
interrupt
1
{
//
定时器中断处理函数
1s
进入一次
flag_1s
=
1;
}
热心网友
因为我不知道你这个板子的硬件,我就假设一下吧,你自己对照着看看,关键是流程
假设如下这八个灯依次接在P0口的八个口上,高电平为灯亮,低电平为灯灭,程序如下
ORG 0000H
AJMP START
START:MOV P0,#01H;(00000001)只有第一个灯亮
ACALL DELAY;延迟,不加延迟的话 你根本看不起清到底那个灯亮的
MOV P0,#02H;(00000010)只有第二个灯亮
ACALL DELAY
MOV P0,#04H;(00000100)只有第三个灯亮
ACALL DELAY
MOV P0,#08H;(00001000)只有第四个灯亮
ACALL DELAY
MOV P0,#10H;(00010000)只有第五个灯亮
ACALL DELAY
MOV P0,#20H;(00100000)只有第六个灯亮
ACALL DELAY
MOV P0,#40H;(01000000)只有第七个灯亮
ACALL DELAY
MOV P0,#80H;(10000000)只有第八个灯亮
ACALL DELAY
AJMP START;周而复始
DELAY: MOV R6,#40;延迟程序,晶振为3.57MHZ时大概是0.1S
0.1SL1: MOV R5,#246
0.1SL2: NOP
DJNZ R5,0.1SL2
DJNZ R6,0.1SL1
RET
END
热心网友
这是最基本的流水灯实验。
这个也不想自己编写,不要学单片机了。
恕言重。
100分也太高了。