|
完整源程序如下:
- /***********************************************************************/
- /***硬件:LED1用3000K色溫,LED2用6000K色溫,LED1、2同時亮就是正白 **/
- /***功能:開關(guān)短按開關(guān)燈,長按切換色溫,正白----亮白----暖白 如此循環(huán) */
- /*** 開燈時保持前次亮燈時的色溫 */
- /*** STC89C52 @ 12MHz */
- /***********************************************************************/
- #include<reg52.h>
- typedef unsigned char U8;
- typedef unsigned int U16;
- /*---------------------------------------------------------------------*/
- /*-- 端口定義 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
- sbit led1 = P1^0; //定義LED端口,灌電流,低電平點亮
- sbit led2 = P1^1;
- sbit KEY1 = P3^0;
- /*----------按鍵掃描--------------------*/
- void keyscan()
- {
- static U16 x; //消抖延時變量
- U8 temp1,temp2;
- U8 knum,knuml;
- if(KEY1==0) //
- {
-
- x++; //按鍵消抖
- if(x>50000) //長按切換色溫
- {
- // x=0;
- knum=2;
- knuml++;
- if(knuml==3)
- knuml=0;
- if(knum==2)
- {
- switch(knuml)
- {
- case 0: led1=0; led2=0; temp1=led1; temp2=led2; break; //正白
- case 1: led1=1; led2=0; temp1=led1; temp2=led2; break; //亮白
- case 2: led1=0; led2=1; temp1=led1; temp2=led2; break; //暖白
- default: break;
- }
- }
- x=30000; //這里X的值越大,切換速度越快
- }
- }
- else
- {
- if(x>1000 && x<50000) //短按 開關(guān)燈
- {
- x=0;
- knum++;
- if(knum==3)
- knum=0;
-
- if(knum==1 )
- {
- led1=1; //關(guān)燈
- led2=1; //關(guān)燈
- }
- else if(knum==2 )
- {
- knum=0;
- led1=temp1; //開燈,并保持關(guān)燈前的色溫
- led2=temp2; //開燈,并保持關(guān)燈前的色溫
- }
- }
- }
- }
- /*---------------------------------------------------------------------*/
- /*-- 主程序 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
- void main()
- {
- led1=0;
- led2=0; //
- while(1)
- {
- keyscan();
- }
- }
- /*---------------------------------------------------------------------*/
- /*-- 程序結(jié)束 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
復(fù)制代碼
|
評分
-
查看全部評分
|