調光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) |