欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
433M無線遙控臺燈單片機程序
[打印本頁]
作者:
wxmlx
時間:
2021-7-3 16:25
標題:
433M無線遙控臺燈單片機程序
/********************************************************
功能:433M無線遙控臺燈,觸摸,無級調光
作者:白菜
軟件環境:IAR FOR STM8 1.40.1
注意:IAR for stm8s中 中斷號需要在官方文檔中加2 2013-7-6
注意:當亮度等級為255時候,PWM_Buf[255]中 應該是PWM_Buf[0]-PWM_Buf[254]
注意 Opton Byte 中的ARF0要激活
本開源項目針對新手,老鳥勿噴。
*********************************************************/
#include <iostm8s003f3.h>
#include"sys.h"
#include"uart.h"
#include"intrinsics.h"
#include"timer1_pwm.h"
#include"timer2.h"
#include"2262decode.h"
#include"key.h"
#include"stm8s_eeprom.h"
#include"stm8s_beep.h"
#include"iwdg.h"
//#define DEBUG_MODE
#define LED 4 //the LED on the PD4
#define LED_OFF() PD_ODR |= (1<<(LED))
#define LED_ON() PD_ODR &= ~ (1<<(LED))
#define MAX_LIGHT_LEVEL 254
#define MIN_LIGHT_LEVEL 10 //調節的時候故意限制到10,亮度等級從0-254
#define POWER_ON 1 //
#define POWER_OFF 0 //
#define BOTH_WARM_COLD 0//暖光冷光一起調節
#define COLD_ONLY 1//冷光
#define WARM_ONLY 2//暖光
#define MATCHING_CODE 1// 對碼中
#define NOT_MATCHING_CODE 0// 不是對碼
#define MAX_MODE_VAL 10
#define PLUS_MINUS_STEP 20 //+ - 鍵 單步 增加減少的量
uchar PowerMode = POWER_OFF ; //
uchar ModeVal = 0 ; // 模式的值,斷電上電默認為0 共10種模式
uchar ModeVal_Light_Warm[MAX_MODE_VAL] = {254,254,254,254,254,228,178,127,76,36} ; // 由暖變冷,然后保持 亮度降低 每個模式的暖光 亮度等級 0-254
uchar ModeVal_Lignt_Cold[MAX_MODE_VAL] = {0 ,76,127,178,228,228,178,127,76,36} ; // 每個模式的冷光 亮度等級 0-254
uchar ColdLightLevel=178 ; //冷光 亮度等級 大概70%的功率
uchar WarmLightLevel=178 ; //暖光 亮度等級
uchar ModeFlag = 0 ; //0-->沒有用模式按鍵點燈 1-->有
uchar KeyModeContinuousNum = 0 ; //其他按鍵按下后,模式按鍵連續單擊次數,,用來判斷是否 用其他按鍵微調過該模式,是的話 長按MODE 按鍵可以修改該模式
uchar KeyModeLongCnt = 0 ; //mode按鍵 長按后計數
uchar LastColdLightLevel = 178 ; //上次的亮度等級值
uchar LastWarmLightLevel = 178 ;
uint8 SelWarmColdVal = BOTH_WARM_COLD ; //兩者同時調整
uint8 MathCodeFlag = NOT_MATCHING_CODE ; //不在對碼中
uint8 MatchTimes = 0 ; // 按下匹配次數
uint16 RF_AddrValH1 = 0 ; //第一次按鍵接收的地址
uint16 RF_AddrValL1 = 0 ; //第一次按鍵接收的地址
uint8 KeyC_Press = 0 ; //遙控C鍵按下后 做標志用 用來一直增加亮度
uint8 KeyD_Press = 0 ; //遙控D鍵按下后 做標志用 用來一直減小亮度
int main( void )
{
uint8 StrTemp[6] = {0} ;
//uint8 i ;
uint8 key_val ;
// asm("sim"); // 禁止中斷
ClockInit();
IWDG_Init() ; //獨立看門狗初始化
GPIO_Init();
//PD2做輸入 機械按鍵
PD_DDR_DDR2 = 0 ; // PD0輸入
PD_CR1_C12 = 1 ; // 輸入帶上拉
PD_CR2_C22 = 0 ; // 禁止中斷
Timer1_PWM_Init() ;
Timer2_Init(); //125us中斷,遙控解碼用
Uart1_Init();
UartSendByte(0X51);
// asm("rim"); //開中斷
__enable_interrupt(); //開中斷
PowerOff();//關LED
//剛上電等電源穩定在操作EEPROM
// Delay_Ms(2) ;
/* Write_eeprom_Byte(EEPROM_ADDR,str1,6) ;*/
Read_eeprom_Byte(EEPROM_ADDR, StrTemp,6) ;
MyRF_AddrH = (uint16)StrTemp[0]*256 + StrTemp[1] ;
MyRF_AddrL = (uint16)StrTemp[2]*256 + StrTemp[3] ;
ColdLightLevel = StrTemp[4] ;
WarmLightLevel = StrTemp[5] ;
if( (ColdLightLevel<MIN_LIGHT_LEVEL) || (ColdLightLevel>MAX_LIGHT_LEVEL) )
{
ColdLightLevel = MAX_LIGHT_LEVEL ;
}
if((WarmLightLevel<MIN_LIGHT_LEVEL) || (WarmLightLevel>MAX_LIGHT_LEVEL) )
{
WarmLightLevel = MAX_LIGHT_LEVEL ;
}
#ifdef DEBUG_MODE
for(i=0;i<6;i++)
{
UartSendByte(StrTemp[i]);
}
#endif
InitBeep() ;//初始化蜂鳴器
#ifdef DEBUG_MODE
BeepFlag = 1 ; //叫一下
#endif
while(1)
{
ReadKey() ; //讀機械按鍵
ReadKeyTouch() ;//讀觸摸按鍵值
if(KeyOnOffShortPress)
{
KeyOnOffShortPress = 0 ;
PowerMode = !PowerMode ; //
if(POWER_OFF == PowerMode) //關機
{
PowerOff();//關LED
//存儲亮度值到EEPROM
StrTemp[0] = ColdLightLevel ;
StrTemp[1] = WarmLightLevel ;
Write_eeprom_Byte(EEPROM_COLD_ADDR,StrTemp,2) ;
KeyC_Press = 0 ;//假如正在變化則暫停
KeyD_Press = 0 ;
}
else //開機
{
SetLightCold(ColdLightLevel) ; //調節冷光燈光亮度,傳入參數為亮度等級0-255
SetLightWarm(WarmLightLevel) ; //調節暖光燈光亮度,傳入參數為亮度等級0-255
SelWarmColdVal = BOTH_WARM_COLD ; //開燈時默認兩者一起調整
KeyOnOffLongPressUpFlag = 0 ; //清除在關燈下誤觸發的長按按鈕,留下的長按抬起信號
TouchKeyDirection = TOUCH_PLUS ; //上電默認 觸摸按鍵長按亮度加
}
#ifdef DEBUG_MODE
BeepFlag = 1 ;
#endif
}
if(JiXieKeyCodePress)
{
JiXieKeyCodePress = 0 ;
MathCodeFlag = MATCHING_CODE ; // 進入對碼
BeepFlag = 1 ;//蜂鳴器叫一下
#ifdef DEBUG_MODE
UartSendByte(0xaa);
#endif
}
if( MATCHING_CODE == MathCodeFlag ) // 在對碼中
{
if(rf_ture) //按鍵短按
{
rf_ture = 0 ;
if( 0 == MatchTimes ) //第一個按鍵
{
RF_AddrValH1 = rf_addh_old ;
RF_AddrValL1 = rf_addl_old ;
MatchTimes ++ ;
BeepFlag = 1 ;//蜂鳴器叫一下
#ifdef DEBUG_MODE
UartSendByte(0X0B);
#endif
}
else if( 1 == MatchTimes ) //第二次按下
{
if( (RF_AddrValH1 == rf_addh_old) && (RF_AddrValL1 == rf_addl_old) ) //兩次一樣認為可靠
{
MyRF_AddrH = RF_AddrValH1 ;
MyRF_AddrL = RF_AddrValL1 & 0XFFF0 ; //記錄 RF 地址,低四位為按鍵值
//存儲到EEPROM
StrTemp[0] = MyRF_AddrH >> 8 ;
StrTemp[1] = MyRF_AddrH & 0X00FF ;
StrTemp[2] = MyRF_AddrL >> 8 ;
StrTemp[3] = MyRF_AddrL & 0X00FF ;
Write_eeprom_Byte(EEPROM_RF_ADDRH,StrTemp,4) ;
MulBeepFlag = 2 ; // 叫2聲
MathCodeFlag = NOT_MATCHING_CODE ; //回到正常工作狀態
}
MatchTimes = 0 ; // 按下匹配次數
#ifdef DEBUG_MODE
UartSendByte(MyRF_AddrH>>8);
UartSendByte(MyRF_AddrH>>0);
UartSendByte(MyRF_AddrL>>8);
UartSendByte(MyRF_AddrL>>0);
#endif
}
}
}
else //不在對碼中,按鍵可以點燈
{
if(POWER_OFF == PowerMode) //關燈狀態下
{
if(rf_ture) //按鍵短按
{
#ifdef DEBUG_MODE
UartSendByte(rf_addh_old>>8);
UartSendByte(rf_addh_old>>0);
UartSendByte(rf_addl_old>>8);
UartSendByte(rf_addl_old>>0);
#endif
rf_ture=0 ;
KeyModeLongCnt=0 ; //模式鍵 長按計數
if( ( rf_addh_old == MyRF_AddrH ) && ( ( rf_addl_old & 0XFFF0 ) == MyRF_AddrL ) ) //遙控地址位(高6位位地址位)與預設地址一致
{
key_val = 0 ;
key_val = rf_addl_old & 0x000F ;
if( KEYA == key_val ) //開關鍵按下
{
#ifdef DEBUG_MODE
UartSendByte(0x0A);
BeepFlag = 1 ; //叫一下
#endif
PowerMode = POWER_ON ; //開燈狀態
SetLightCold(ColdLightLevel) ; //調節冷光燈光亮度,傳入參數為亮度等級0-255
SetLightWarm(WarmLightLevel) ; //調節暖光燈光亮度,傳入參數為亮度等級0-255
SelWarmColdVal = BOTH_WARM_COLD ; //開燈時默認兩者一起調整
KeyOnOffLongPressUpFlag = 0 ; //清除在關燈下誤觸發的長按按鈕,留下的長按抬起信號
TouchKeyDirection = TOUCH_PLUS ; //上電默認 觸摸按鍵長按亮度加
}
}
}
if(KeyOnOffLongPress) //觸摸按鍵長按
{
SetLightCold(ColdLightLevel) ; //調節冷光燈光亮度,傳入參數為亮度等級0-255
SetLightWarm(WarmLightLevel) ; //調節暖光燈光亮度,傳入參數為亮度等級0-255
}
if(KeyOnOffLongPressUpFlag) //觸摸按鍵 長按后抬起
{
KeyOnOffLongPressUpFlag = 0 ;
SelWarmColdVal = BOTH_WARM_COLD ; //開燈時默認兩者一起調整
KeyOnOffLongPressUpFlag = 0 ; //清除在關燈下誤觸發的長按按鈕,留下的長按抬起信號
TouchKeyDirection = TOUCH_PLUS ; //上電默認 觸摸按鍵長按亮度加
PowerMode = POWER_ON ; //開燈狀態
}
}
else //開燈狀態下
{
if(KeyOnOffLongPress) //觸摸按鍵長按
{
if(TouchKey4msCnt>5) //20ms一次
{
TouchKey4msCnt = 0 ;
if( TOUCH_PLUS == TouchKeyDirection )
{
if(WarmLightLevel < MAX_LIGHT_LEVEL) //還不是最大亮度等級
{
WarmLightLevel++; //亮度加1
}
SetLightWarm(WarmLightLevel) ; //更新亮度
if(ColdLightLevel < MAX_LIGHT_LEVEL) //還不是最大亮度等級
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
代碼:
433M無線遙控臺燈程序.rar
(1.86 MB, 下載次數: 64)
2021-7-3 16:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
51hei團團
時間:
2021-7-3 19:17
好東東,原理圖能分享一下嗎?或者說明一下電路連接
作者:
cdiyy
時間:
2021-7-13 17:53
原理圖可以分享一下嗎,好東西
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1