标题: 键控LED台灯制作和程序设计 [打印本页]

作者: dagu    时间: 2015-1-23 15:50
标题: 键控LED台灯制作和程序设计
         去年留下的一个LED灯,闲来无事,晚上用笔记本没有光看不清键盘,所以,想制作一个LED台灯,按键控制加亮度和减亮度,本想加红外线遥控的,本人比较懒,暂时只能键控,红外线以后再加。
            LED台灯电路图,
        

程序设计流程图:






LED灯工作频率为400HZ, 20级调节亮度,使用的是STC15F104W单片机,4K程序存储,128B数据存储,
由于这个单片机没有PWM,只能用定时器模拟PWM,
程序代码如下:
/*******************************************************************************************************
名称:台灯
MCU:STC15F104W        12MHZ
日期:2014 /9/1
==荆棘鸟=======
*****************************************************
****************************************************/
#include <REG52.H>
#include "intrins.h"
#define Uint unsigned int//宏定义
#define Uchar unsigned char

sfr INT_CLKO = 0x8f;//外部中断与时钟输出控制寄存器
sfr AUXR = 0x8e;
sfr P3M1=0xb1;
sfr P3M0=0xb2;


sbit KEY1=P3^0;//亮度减
sbit KEY2=P3^1;//开机/关机/待机
sbit KEY3=P3^2;//亮度加
sbit NPN=P3^3;//控制端
sbit IR=P3^5;//红外线
sbit LED=P3^4;//指示灯


Uchar Gears;//20级档位
Uchar PWM;

void KEY();
void Delay(Uchar a);
/****************************************************
********主函数:调用子函数**************************/
void main()
{

AUXR &= 0x7f;//定时器0为12T模式
//AUXR |= 0x80;                      //定时器0为1T模式
TMOD=0x02;//定时器0 模式2
TH0=TL0=131;//定时器0赋初值
ET0=1;//打开定时器0中断
EA=1;//打开总中断
TR0=1;//定时器0启动
P3M1=0x00;
P3M0=0x08;

while(1)
{
KEY();   
Delay(200);
LED=~LED;

}

}
/*****************************************************
********子函数:按键函数****************************/
void KEY()
{


//======================
if(KEY1==0)
{
Delay(20);
if(KEY1==0)
{

if(Gears==0)
{
Gears=0;
}
else
{
Gears--;
}
while(!KEY1);
}
}
else
if(KEY2==0)
{
Delay(20);
if(KEY2==0)
{


}
}
else
if(KEY3==0)
{
Delay(20);
if(KEY3==0)
{
Gears++;
if(Gears>20)
{
Gears=20;
}
while(!KEY3);
}
}


}
/****************************************************
********子函数:延时函数***************************/
void Delay(Uchar a)
{
Uint b,c;
for(b=a;b>0;b--)
for(c=1000;c>0;c--);

}
/****************************************************
********子函数:定时器中断函数*********************/
void T0_time() interrupt 1
{


PWM++;
if(PWM>Gears)
{
NPN=1;
}
else
{

NPN=0;
}
if(PWM>20)
{
PWM=0;

}
}
视频:
http://player.youku.com/player.php/sid/XNzc1ODc2MjAw/v.swf



此日记为实验,属于半成品,作品有点难看,勿笑!!!!

作者: 小青春    时间: 2015-1-30 10:13
可以表示一下单片机引脚吗
作者: jameszhang2017    时间: 2017-12-5 22:13
问一下能在这个调光功能的基础上,加上定时功能吗?比如我想让灯亮3分钟自动关闭,然后再3分钟有自动亮起。反复亮灭。可以实现吗

作者: jameszhang2017    时间: 2017-12-5 22:14
能加入循环亮灭功能吗?
作者: GUOXUAN    时间: 2018-4-16 11:21
东西真不错,就喜欢这种小规模作品来玩.
作者: aing123    时间: 2018-4-16 15:15
这也太暗了吧?台灯?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1