更改程序实现四盏LED灯依次轮流亮起,即流水灯的效果?

更改程序实现四盏LED灯依次轮流亮起,即流水灯的效果?,第1张

以下是8个LED灯轮流点亮的程序,按照以下方法怎么把它改成16个LED流水灯?会的大神请帮忙改一下,谢谢,本人初学者

#include<reg51.h>

//#include"stc.h"

unsigned char i=0

void main(void)

{TH0=(65536-50000)/256

TL0=(65536-50000)%256

TMOD=0X01//sj

ET0=0x01

EA=1

TR0=1

while(1)

{if(i>7)i=0

}}

void timer0IRQ(void) interrupt 1

{TH0=(65536-50000)/256

TL0=(65536-50000)%256

P2=1<<i

i++}

定时器, LED灯

1、同时去掉两个delay,会导致led引脚的电平持续在0、1之间变化,变化频率非常快,在MHz量级,导致的结果就是直接看不到灯闪烁,如果灯的初始状态是灭的,则灯会基本看不到亮度。

2、见上一条,见不到闪烁。

3、去掉第一个delay,实际灯会持续表现出led=1指令的状态,该状态与硬件中led灯的控制端是接在阴极还是阳极有关;类似地,去掉第二个delay,实际灯会持续表现出led=1指令的状态。

4、人眼能分辨的灯闪烁最快的情况应该在几十Hz左右,可以实际更改delay函数的值,进行测试;最慢闪烁速度,则取决于delay的最长延时时间,这里delay的参数num为16位,则当num取65535时,灯闪烁最慢,另外,还可以增大delay函数内部参数“y=110”的值,增加延时时间,降低闪烁速度。

#include<reg52.h>//包含头文件,一般情况不需要改动,

//头文件包含特殊功能寄存器的定义

/*-------------------------IO口定义----------------------------*/

sbit LED0=P1^0// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号

void Delay(unsigned int t)//函数声明

/*------------------------------------------------

主函数

------------------------------------------------*/

void main (void)

{

unsigned int CYCLE=600,PWM_LOW=0//定义周期并赋值

while (1) //主循环

{

LED0=1

Delay(60000) //特意加延时,可以看到熄灭的过程

for(PWM_LOW=1PWM_LOW<CYCLEPWM_LOW++){ //PWM_LOW表示低

//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次

LED0=0 //点亮LED

Delay(PWM_LOW)//延时长度,600次循环中从1加至599

LED0=1 //熄灭LED

Delay(CYCLE-PWM_LOW)//延时长度,600次循环中从599减至1

}

LED0=0

for(PWM_LOW=CYCLE-1PWM_LOW>0PWM_LOW--){ //与逐渐变亮相反的过程

LED0=0

Delay(PWM_LOW)

LED0=1

Delay(CYCLE-PWM_LOW)

}

//主循环中添加其他需要一直工作的程序

}

}

/*------------------------------------------------

延时函数,含有输入参数 unsigned int t,无返回值

unsigned int 是定义无符号整形变量,其值的范围是

0~65535

------------------------------------------------*/

void Delay(unsigned int t)

{

while(--t)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存