找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7227|回复: 5
打印 上一主题 下一主题
收起左侧

键控LED台灯制作和程序设计

[复制链接]
跳转到指定楼层
楼主
ID:70941 发表于 2015-1-23 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
         去年留下的一个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;

}
}
视频:




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

评分

参与人数 1黑币 +8 收起 理由
aifengdian + 8 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:72960 发表于 2015-1-30 10:13 | 只看该作者
可以表示一下单片机引脚吗
回复

使用道具 举报

板凳
ID:257938 发表于 2017-12-5 22:13 | 只看该作者
问一下能在这个调光功能的基础上,加上定时功能吗?比如我想让灯亮3分钟自动关闭,然后再3分钟有自动亮起。反复亮灭。可以实现吗
回复

使用道具 举报

地板
ID:257938 发表于 2017-12-5 22:14 | 只看该作者
能加入循环亮灭功能吗?
回复

使用道具 举报

5#
ID:249545 发表于 2018-4-16 11:21 | 只看该作者
东西真不错,就喜欢这种小规模作品来玩.
回复

使用道具 举报

6#
ID:162514 发表于 2018-4-16 15:15 | 只看该作者
这也太暗了吧?台灯?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表