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