|
完整源程序如下:
- /***********************************************************************/
- /***硬件:LED1用3000K色温,LED2用6000K色温,LED1、2同时亮就是正白 **/
- /***功能:开关短按开关灯,长按切换色温,正白----亮白----暖白 如此循环 */
- /*** 开灯时保持前次亮灯时的色温 */
- /*** 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) //短按 开关灯
- {
- x=0;
- knum++;
- if(knum==3)
- knum=0;
-
- if(knum==1 )
- {
- led1=1; //关灯
- led2=1; //关灯
- }
- else if(knum==2 )
- {
- knum=0;
- led1=temp1; //开灯,并保持关灯前的色温
- led2=temp2; //开灯,并保持关灯前的色温
- }
- }
- }
- }
- /*---------------------------------------------------------------------*/
- /*-- 主程序 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
- void main()
- {
- led1=0;
- led2=0; //
- while(1)
- {
- keyscan();
- }
- }
- /*---------------------------------------------------------------------*/
- /*-- 程序结束 ---------------------------------------*/
- /*---------------------------------------------------------------------*/
复制代码
|
评分
-
查看全部评分
|