1.轮流点亮 逐个点亮
MOV A,#11111110B
先点亮连p1.0的灯,然后是p1.1的,一直到p1.7的,然后又点亮p1.0的
LOOP:
MOV P1,A
ACALL DELAY;你建一个延时子程序使灯亮一段时间
RL A
SJMP LOOP
2.间隔点亮
MOV A,#10101010B
先点亮连p1.0,p1.2,p1.4,p1.6的灯,然后是p1.1,p1.3,p1.5,p1.7的
LOOP:
MOV P1,A
ACALL DELAY;你建一个延时子程序使灯亮保持一段时间
RL A
SJMP LOOP
3.全灭全亮
MOV A,#00000000B
先全部点亮,然后再全灭
LOOP:
MOV P1,A
ACALL DELAY;你建一个延时子程序使灯亮保持一段时间
CPL A
SJMP LOOP
首先,是单灯如何点亮的问题,无非就是某个GPIO口输出高电平或者低电平(由外部电路决定)使灯亮灭,假设输出高电平为亮,输出低电平为灭。其次,1hz闪烁,即代表定时1s开、关灯。所以要用到定时器。
代码如下:
#include "stdio.h"
#defineLED_ON P1.1 = 1
#defineLED_OFFP1.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
}
c语言程序很简单:#include<reg51.h>//包含头文件
sbit LED=P1^0//位变量定义
void main()//主程序
{
unsigned char i//声明一个变量
for(i=0i<5i++)/循环5次
{
LED=0//亮
delayms(500)//延时
LED=1//灭
delayms(500)//延时
}
while(1)//停止不动
}
延时子程序随便搜一个,如果时间差别太大,可调某些参数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)