|
去年留下的一个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;
}
}
视频:
此日记为实验,属于半成品,作品有点难看,勿笑!!!!
|
评分
-
查看全部评分
|