|
調(diào)光LED燈軟件STC15F104 ,用的是STC宏晶8腳單片機(jī) ,將一個(gè)舊的LED燈加了調(diào)光功能. 和大家學(xué)習(xí)探討. 電路原理圖如下: 單片機(jī)源程序如下 -------------------------------------------------------- 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]={ 按鍵值數(shù)組0-2是S1-S3短按 0x01,0x02,0x03,0x10,0x20,0x30 按鍵值數(shù)組3-5是S1-S3長按 }; unsigned char KeySta[3]={ 1,1,1 }; unsigned int idata KeyDownTime[3]={0,0,0}; 按鍵按下持續(xù)時(shí)間 void configtime1(unsigned int ms); 定時(shí)器1配置 bit led1flag =1; LED1狀態(tài)標(biāo)志位 bit led2flag =1; LED2狀態(tài)標(biāo)志位 bit led3flag =1; LED3狀態(tài)標(biāo)志位 bit led4flag =0; bit KeyLFlag = 0; 長按標(biāo)志位 void KeyScan(); 按鍵的掃描 void KeyDriver(); 按鍵驅(qū)動(dòng) void LEDOUT(); void KeyAction(unsigned char KeyCode); 按鍵執(zhí)行 -------------------------------- 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++) 循環(huán)檢測3個(gè)按鍵 { --------------------------------- if(KeyDownTime[i] 0) 檢測執(zhí)行快速輸入 { 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]; } } } ---------定時(shí)器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; } ---------按鍵的掃描函數(shù)---------- 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; 按鍵持續(xù)按下 } else if(KeyBuf[i]== 0xff) { KeySta[i] = 1; 按鍵彈起狀態(tài) KeyDownTime[i]=0; 按鍵清零 } } _nop_(); _nop_(); LED_R=RLED; LED_G=GLED; LED_B=BLED; _nop_(); …………………… …………限于本文篇幅 余下代碼請從51黑下載附件………… 復(fù)制代碼 所有資料51hei提供下載 調(diào)光LED燈軟件STC15F104.zip (78.79 KB, 下載次數(shù) 2) |
|