淘先锋技术网

首页 1 2 3 4 5 6 7

目录

1.知识点

2.LED接口

3.代码讲解


1.知识点

一般人眼睛对于80Hz 以上刷新频率则完全没有闪烁感。

亮灭频率太小的话 看起来就会LED灯闪烁,

那么我们平时见到的LED灯,当它的频率大于50Hz的时候,人眼就会产生视觉暂留效果,

基本就看不到LED闪烁了,而是一个常亮的LED灯亮度会发生改变,

你在1秒内,高电平0.5秒,低电平0.5秒,(频率1Hz)如此反复,那么你看到的电灯就会闪烁,

但是如果是10毫秒内,5毫秒打开,5毫秒关闭,(频率100Hz) 这时候灯光的亮灭速度赶不上开关速度(LED灯还没完全亮就又熄灭了),由于视觉暂留作用 人眼不感觉电灯在闪烁,而是感觉灯的亮度少了 因为高电平时间(占空比)为50% 亮度也就为之前的50% 。

PWM重要参数:      频率 = 1 / TS            占空比 = TON / TS           精度 = 占空比变化步距

 

频率很高时,看不到闪烁,占空比越大,LED越亮;

频率很高时,看不到闪烁,占空比越小,LED越暗;
频率很低时,可看到闪烁,占空比越大,LED越亮;

频率很低时,可看到闪烁,占空比越小,LED越暗;
所以,在频率一定下,可以不断占空比改变LED灯的亮度, 使其达到一个呼吸灯的效果。

2.LED接口

 

3.代码讲解

#include <STC15F2K60S2.H>

void Device(unsigned char p2,unsigned char p0)//配置锁存器
{
P0=p0;
P2=p2;
P2=0;
}

void Delay(unsigned int t)//延时函数
{
    t=t*12;                //使用89cxx系列型号单片机不用*12
	while(t--);            //15Fxx单片机与89c系列的运行速度不一样
}

void system()//初始化
{
Device(0xa0,0);//关闭蜂鸣器
Device(0x8,0xff);//关闭led灯
}

#define  LED1 Device(0x80,~0x01)//LED1亮
#define  LED2 Device(0x80,0xff)//LED灭

void main()
{

    unsigned char Time,i;
    system();
	while(1)
	{
		for(Time=0;Time<100;Time++)		//改变亮灭时间,由暗到亮
		{
			for(i=0;i<20;i++)			//计次延时
			{
				LED1;					//LED亮
				Delay(Time);			//延时Time
				LED2;					//LED灭
				Delay(100-Time);		//延时100-Time
			}
		}
		for(Time=100;Time>0;Time--)		//改变亮灭时间,由亮到暗
		{
			for(i=0;i<20;i++)			//计次延时
			{
				LED1;					//LED亮
				Delay(Time);			//延时Time
				LED2;					//LED灭
				Delay(100-Time);		//延时100-Time
			}
		}
	}
    
}