×
嵌入式 > 技术百科 > 详情

单片机单按键控制led台灯

发布时间:2020-10-21 发布时间:
|
按键控制LED台灯亮度 C语言方案

功能要求:单独一个按键控制LED台灯的亮度,上电默认关机,分5个档位。
第一档:100%亮度
第二档:65%亮度
第三档:35%亮度
第四档:20%亮度
第五档:10%亮度
第六档:关机

思路:设定一个改变占空比的变量PWM,每按一次按键PWM值自加一次(自加值看需要定,比如PWM+=100),值越小产生的驱动脉冲频率越高。PWM函数采用模拟方法产生,从成本上考虑,带中断,定时器等功能的单片机价格比较高。所以采用价格低廉的低档单片机。鉴于仿真方便,本程序采用PIC16F505(当然也可以用12F508等芯片)。

端口连接:RC1—LED RC0----蜂鸣器 RC5----按键

程序代码:
#include
__CONFIG(0X034);
#define uchar unsigned char
#define uint unsigned int

#define uchar unsigned char
#define uint unsigned int
uint PWM, H,L;


void delay(uint x)//任意时间延时函数
{
uint c,d;
for(c=x;c>0;c--)
for(d=110;d>0;d--);

}

void KEY1()//按键扫描函数,按压有效(非松手有效),并且不影响LED点亮效果,都可以用此类扫描函数
{
static bit valid=0;
static bit finish=0;

if(valid==0)
{
if(RC5==0)

if(finish==0)
{
finish=1;

RC0=1;
delay(10);
RC0=0;//蜂鸣器,每按一下响一声
RC1=0;//此语句非常重要,如果不加这句,到最低档的时候,不能关机而直接进入最高档。

PWM+=100; //按键有效,PWM增加100


}
}
else
{
valid=0;
finish=0;
}
}
else 
{
if(RC5==0)valid=1;
}
}

 


void LED_ON()//模拟PWM函数,算法简单直观,通过改变PWM值去改变LED点亮和熄灭的时间的间隔达到调光的目的。
{


H=PWM;
L=500-H;

RC1=0;
while(H--);
RC1=1;
while(L--);

}
void main()

PORTC=0X00;
TRISC=0X10;
PWM=0;

while(1)//用此语句达到上电关机(LED熄灭状态),当有按键按下的时候,break语句跳出while循环
{
RC1=0;
if(RC5==0)break;
}

while(1)
{
KEY1();//按键扫描,此函数将改变PWM的值
If(PWM<500)//只要PWM值小于500,每按下一次,都会执行LED_ON()函数,且每次的PWM值都以100的倍数增加,达到调光目的。
{
LED_ON();
}
If(PWM>500)//如果大于500则把PWM清零,且LED关机。

PWM=0;
RC1=0;
}
}

}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实时控制.安全.如何加速实现未来工厂落地?