单片机编程 彩灯闪烁

单片机编程 彩灯闪烁,第1张

你可以将灯连接到p1口来实现( 假设有八个彩灯,且为共阳的);

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)//停止不动

}

延时子程序随便搜一个,如果时间差别太大,可调某些参数


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

原文地址: http://outofmemory.cn/yw/12044898.html

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

发表评论

登录后才能评论

评论列表(0条)

保存