标题:
调光LED灯STC15F104单片机源码
[打印本页]
作者:
yygdzjs
时间:
2018-8-22 00:09
标题:
调光LED灯STC15F104单片机源码
调光LED灯软件STC15F104 ,用的是STC宏晶8脚单片机 ,将一个旧的LED灯加了调光功能. 和大家学习探讨.
电路原理图如下:
0.png
(80.37 KB, 下载次数: 60)
下载附件
2018-8-22 00:26 上传
单片机源程序如下:
/*--------------------------------------------------------
* Name File: KEY,C
* Versions number: 1.0
* Date : 2016.01.01
* Remarks : STC15F104E MCU
- 文件名 :KEY.C
- 版本 :1.0
- 日期 :2016.01.01
- 备注 :STC15F104E MCU
--------------------------------------------------------*/
#include"config.h" //
unsigned char T1RH,T1RL; //
unsigned char code KeyCodeMap[6]={ //按键值数组0-2是S1-S3短按
0x01,0x02,0x03,0x10,0x20,0x30 //按键值数组3-5是S1-S3长按
};
unsigned char KeySta[3]={//
1,1,1
};
unsigned int idata KeyDownTime[3]={0,0,0}; //按键按下持续时间
void configtime1(unsigned int ms); //定时器1配置
bit led1flag =1; //LED1状态标志位
bit led2flag =1; //LED2状态标志位
bit led3flag =1; //LED3状态标志位
//bit led4flag =0;
bit KeyLFlag = 0; //长按标志位
void KeyScan(); //按键的扫描
void KeyDriver(); //按键驱动
void LEDOUT(); //
void KeyAction(unsigned char KeyCode); //按键执行
//--------------------------------
void KeyAction(unsigned char KeyCode)
{
if(KeyCode==0x01)led1flag = ~led1flag;
if(KeyCode==0x02)led2flag = ~led2flag;
if(KeyCode==0x03)led3flag = ~led3flag;
if(KeyCode==0x10)led1flag = ~led1flag;
if(KeyCode==0x20)led2flag = ~led2flag;
if(KeyCode==0x30)led3flag = ~led3flag;
}
void LEDOUT()
{
LED_R=led3flag; //
LED_G=led1flag; //
LED_B=led2flag; //
}
//----------------------------
void KeyDriver()
{
unsigned char i; //
static unsigned char idata backup[3]={1,1,1}; //
static unsigned int idata TimeThr[3]={600,600,600}; //
for(i=0;i<3;i++) //循环检测3个按键
{
//---------------------------------
if(KeyDownTime[i] > 0) //检测执行快速输入
{
if(KeyDownTime[i] >= TimeThr[i])
{
if(KeyLFlag != 1)
{
KeyAction(KeyCodeMap[i+3]); //
// TimeThr[i+3] += 200; //
KeyLFlag = 1;
}
}
}
if(backup[i] != KeySta[i])
{
if(backup[i] != 1)
{
if(KeyLFlag)
{
KeyLFlag = 0;
}
else
{
KeyAction(KeyCodeMap[i]); //
}
}
backup[i] = KeySta[i]; //
}
}
}
//---------定时器1的配置------------
void configtime1(unsigned int ms)
{
unsigned long tmp;
tmp = 11059200/12; //
tmp =(tmp*ms)/1000; //
tmp = 65536 - tmp; //
tmp = tmp + 18; //
T1RH = (unsigned char)(tmp>>8); //
T1RL = (unsigned char)tmp; //
TMOD &= 0x0f; //
TMOD |= 0x10; //
TH1 = T1RH; //
TL1 = T1RL; //
ET1 = 1; //
TR1 = 1; //
EA = 1; //
}
//---------按键的扫描函数----------
void KeyScan()
{
bit RLED=0; //
bit GLED=0; //
bit BLED=0; //
unsigned char i; //
static unsigned char KeyBuf[]={
0xff,0xff,0xff
};
RLED=LED_R; //
GLED=LED_G; //
BLED=LED_B; //
S1 = 1; //
S2 = 1; //
S3 = 1; //
_nop_(); //
_nop_(); //
_nop_(); //
KeyBuf[0] = (KeyBuf[0]<<1)|S1; //
KeyBuf[1] = (KeyBuf[1]<<1)|S2; //
KeyBuf[2] = (KeyBuf[2]<<1)|S3; //
for(i=0;i<3;i++)
{
if(KeyBuf[i]== 0x00)
{
KeySta[i] = 0; //按键为零
KeyDownTime[i] += 1; //按键持续按下
}
else if(KeyBuf[i]== 0xff)
{
KeySta[i] = 1; //按键弹起状态
KeyDownTime[i]=0; // 按键清零
}
}
_nop_(); //
_nop_(); //
LED_R=RLED; //
LED_G=GLED; //
LED_B=BLED; //
// _nop_(); //
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
调光LED灯软件STC15F104.zip
(78.79 KB, 下载次数: 91)
2018-8-22 00:09 上传
点击文件名下载附件
单片机调光
下载积分: 黑币 -5
作者:
zjnbzm
时间:
2018-8-22 12:01
调光LED灯软件STC15F104 ,用的是STC宏晶8脚单片机 ,将一个旧的LED灯加了调光功能. 和大家学习探讨. 电路原理图如下: 单片机源程序如下 -------------------------------------------------------- Name File KEY,C Versions number 1.0 Date 2016.01.01 Remarks STC15F104E MCU - 文件名 :KEY.C - 版本 :1.0 - 日期 :2016.01.01 - 备注 :STC15F104E MCU -------------------------------------------------------- #includeconfig.h unsigned char T1RH,T1RL; unsigned char code KeyCodeMap[6]={ 按键值数组0-2是S1-S3短按 0x01,0x02,0x03,0x10,0x20,0x30 按键值数组3-5是S1-S3长按 }; unsigned char KeySta[3]={ 1,1,1 }; unsigned int idata KeyDownTime[3]={0,0,0}; 按键按下持续时间 void configtime1(unsigned int ms); 定时器1配置 bit led1flag =1; LED1状态标志位 bit led2flag =1; LED2状态标志位 bit led3flag =1; LED3状态标志位 bit led4flag =0; bit KeyLFlag = 0; 长按标志位 void KeyScan(); 按键的扫描 void KeyDriver(); 按键驱动 void LEDOUT(); void KeyAction(unsigned char KeyCode); 按键执行 -------------------------------- void KeyAction(unsigned char KeyCode) { if(KeyCode==0x01)led1flag = ~led1flag; if(KeyCode==0x02)led2flag = ~led2flag; if(KeyCode==0x03)led3flag = ~led3flag; if(KeyCode==0x10)led1flag = ~led1flag; if(KeyCode==0x20)led2flag = ~led2flag; if(KeyCode==0x30)led3flag = ~led3flag; } void LEDOUT() { LED_R=led3flag; LED_G=led1flag; LED_B=led2flag; } ---------------------------- void KeyDriver() { unsigned char i; static unsigned char idata backup[3]={1,1,1}; static unsigned int idata TimeThr[3]={600,600,600}; for(i=0;i3;i++) 循环检测3个按键 { --------------------------------- if(KeyDownTime[i] 0) 检测执行快速输入 { if(KeyDownTime[i] = TimeThr[i]) { if(KeyLFlag != 1) { KeyAction(KeyCodeMap[i+3]); TimeThr[i+3] += 200; KeyLFlag = 1; } } } if(backup[i] != KeySta[i]) { if(backup[i] != 1) { if(KeyLFlag) { KeyLFlag = 0; } else { KeyAction(KeyCodeMap[i]); } } backup[i] = KeySta[i]; } } } ---------定时器1的配置------------ void configtime1(unsigned int ms) { unsigned long tmp; tmp = 1105920012; tmp =(tmpms)1000; tmp = 65536 - tmp; tmp = tmp + 18; T1RH = (unsigned char)(tmp8); T1RL = (unsigned char)tmp; TMOD &= 0x0f; TMOD = 0x10; TH1 = T1RH; TL1 = T1RL; ET1 = 1; TR1 = 1; EA = 1; } ---------按键的扫描函数---------- void KeyScan() { bit RLED=0; bit GLED=0; bit BLED=0; unsigned char i; static unsigned char KeyBuf[]={ 0xff,0xff,0xff }; RLED=LED_R; GLED=LED_G; BLED=LED_B; S1 = 1; S2 = 1; S3 = 1; _nop_(); _nop_(); _nop_(); KeyBuf[0] = (KeyBuf[0]1)S1; KeyBuf[1] = (KeyBuf[1]1)S2; KeyBuf[2] = (KeyBuf[2]1)S3; for(i=0;i3;i++) { if(KeyBuf[i]== 0x00) { KeySta[i] = 0; 按键为零 KeyDownTime[i] += 1; 按键持续按下 } else if(KeyBuf[i]== 0xff) { KeySta[i] = 1; 按键弹起状态 KeyDownTime[i]=0; 按键清零 } } _nop_(); _nop_(); LED_R=RLED; LED_G=GLED; LED_B=BLED; _nop_(); …………………… …………限于本文篇幅 余下代码请从51黑下载附件………… 复制代码 所有资料51hei提供下载 调光LED灯软件STC15F104.zip (78.79 KB, 下载次数 2)
作者:
zjnbzm
时间:
2018-8-22 12:04
你好,有汇编的程序吗?
作者:
jialishoushi
时间:
2018-8-23 03:25
不错 有空也搞个玩玩
作者:
yygdzjs
时间:
2018-12-23 00:24
没有汇编
作者:
WFX777888
时间:
2019-8-5 09:11
谢谢复习资料
作者:
weixiao4
时间:
2019-8-5 11:51
谢谢楼主分享
作者:
qxdqx
时间:
2020-1-31 21:02
很好。太谢谢啦!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1