|
想利用墻上開關(guān)進(jìn)行開--關(guān)切換LED燈的色溫,第一次開白光亮,第二次開黃光亮,第三次開白光黃光同時(shí)亮。程序借鑒了論壇大佬上傳的。但好像實(shí)現(xiàn)不了,無(wú)法切換!
單片機(jī)源程序如下:
#include<reg51.h> //*使用S0P-8 STC15F104W芯片*//
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint key2_time_cnt;//*按鍵去抖計(jì)數(shù)器*//
uchar key2_lock;//*按鍵有效標(biāo)志*//
uchar key2_num_s;//*開關(guān)開關(guān)有多少種功能*//
char key2_touch_s_flag;//*交流電斷電有效標(biāo)志*//
uint shuzi;//*開關(guān)次數(shù)
uchar SYS1MS;//*時(shí)標(biāo)開關(guān)標(biāo)志*//
uchar AUXR;
sbit W=P3^4;//*白光*//
sbit C= P3^5;//*黃光*//
sbit PWM=P3^2;//*交流信號(hào)檢測(cè)*//
void Timer0Init()//*定時(shí)器0初始化*//
{
AUXR &= 0x7F; //定時(shí)器12T時(shí)鐘模式
TMOD &= 0xF0; //設(shè)置定時(shí)器的模式
TL0 = 0x00; //*定時(shí)器初值
TH0 = 0xDC;
TF0 = 0; //清除TFO標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
EA=1; //中斷總開關(guān)
ET0=1; //允許中斷
}
void key_scan2()//*交流電信號(hào)的判斷*//
{
if(PWM==1)
{
key2_lock=0;
key2_time_cnt=0;
if(key2_touch_s_flag==1)
{
key2_touch_s_flag=0;
key2_num_s++;
if(key2_num_s>2)key2_num_s=0;
}
}
else if(key2_lock==0)
{
key2_time_cnt++;
if(key2_time_cnt>149)
{
key2_touch_s_flag=1;
key2_time_cnt=0;
key2_lock=1;
}
}
}
void key_service2()//*開關(guān)功能的內(nèi)容*//
{
switch(key2_num_s)
{
case 0:
W=1;
C=0;
//key2_num_s=0;
break;
case 1:
W=0;
C=1;
//key2_num_s=0;
break;
case 2:
W=1;
C=1;
// key2_num_s=0;
break;
}
}
void main()//*主程序*//
{
Timer0Init();
while(1)
{
if(SYS1MS==1)
{
SYS1MS=0;
key_scan2();
}
key_service2();
}
}
void exint0()interrupt 0//*中斷函數(shù)*//
{
if((TR0&ET0)==1)
{
TR0=0;
ET0=1;
TL0 = 0x00; //*定時(shí)器低8位初裝數(shù)值*//
TH0 = 0xDC;//* 定時(shí)器高8位初裝值*//
shuzi++;
if(shuzi==2)
{
shuzi=0;
SYS1MS=1;
}
TR0=1;
}
} |
|