|
去年留下的一個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;
}
}
視頻:
此日記為實驗,屬于半成品,作品有點難看,勿笑!!!!
|
評分
-
查看全部評分
|