⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deng.c

📁 2051学习软件
💻 C
字号:
/*======================================================================
程序名:    无线可调光LED台灯
编写人:    胡康 
CPU说明:   AT89C2051型单片机 12MHZ晶体振荡器 
======================================================================*/
//====================================================================//
#include <reg2051.H>

//===========================定义部分=================================//
#define		LED_lamp	P1_7
#define		LED_dis	    P3_4

void 	delay(unsigned int d);
void 	delay1(unsigned int d);

bit 	Power_flag=0;
bit		On_off_flag=0;
bit 	On_off_press_flag=0;
bit		Set_bri_flag=0;
sbit	On_off      =   P3^0;
sbit	Step_ctr    =	P3^1;
sbit	Inc_bri		=	P3^2;
sbit	Dec_bri		=	P3^3;

//=========================键值读取函数===============================//
unsigned char Key(void)
{
	if(On_off==1)return(1);//当开关灯键接下时,返回值为1。
	if(Step_ctr==1)return(2);//当八级调光键接下时,返回值为2。
	if(Inc_bri==1)return(3);//当增加亮度键接下时,返回值为3。
	if(Dec_bri==1)return(4);//当降低亮度键接下时,返回值为4。
	else	return(0);//当无键接下时,返回值为0。
}

//=======================状态指示灯闪烁函数===========================//
void Led(void)
{
	LED_dis=0;
	delay(50000);
	LED_dis=1;
	delay(10000);
}

//========================无线LED台灯主函数===========================//
void main(void)
{ 
	unsigned char a, b; //a控制延时长度,b控制循环周期。
	P1=0x00;    //初始化,LED台灯关闭。					
	P3=0x00;    //初始化,关闭状态指示灯,键盘接口置低电平。
    while(1)
    {
    //------------------------------开灯------------------------------//
		while((On_off==1)&&(Power_flag==0))	//按下开关灯键,开灯标志为0,则开灯。
		{
			Power_flag=1;   //置开关灯标志为1。
			while(On_off==1);   //等待开关灯按键释放。
			On_off_press_flag=0;    //开关灯按键释放标志置0。
			LED_lamp=0;
			LED_dis=0;
	 	    a=0x00;
	 	    
	 	    //---------------开灯亮度逐渐增加至1/3过程----------------//
		    for(b=80;b>0;b--)   //开机亮度默认为1/3,但感觉上会认为是一半亮度。
		    {
				a++;    //每份时间内点亮的时间逐渐增加。
		   		delay(a);   //每份时间内点亮的时间延时。
				LED_lamp=0; //每份时间内的关闭时间开始。
				//LED_dis = 0;
		        a = ~a; //a取反后的值即为每份时间减点亮的时间,即关闭时间。
		        delay(a);   //每份时间内关闭的时间延时。
				LED_lamp=1; //点亮LED,准备进行下一份时间的动作。
				//LED_dis = 1;
		        a = ~a; //a再次取反,此时a值还原为点亮时间值。
		    }

			while(1)
			{	   
				//------------------保持亮度--------------------------//
				delay1(a);  //每份时间内点亮的时间延时。
				LED_lamp=0; //每份时间内的关闭时间开始。
				//LED_dis=0;
				a=~a;   //a取反后的值即为每份时间减点亮的时间,即关闭时间。
				delay1(a);  //每份时间内关闭的时间延时。
				LED_lamp=1; //点亮LED,进行下一份时间的动作。
				//LED_dis=1;
				a=~a;   //a再次取反,此时a值还原为点亮时间值。
				
                //-----------------按键动作处理-----------------------//
				if(Key()==1)On_off_press_flag=1;    //开关灯按键按下,释放标志置1。
				if((Key()==2)&&(Set_bri_flag==0)){a+=30;Set_bri_flag=1;if(a>=240)a=10;}	//八级调光。
				if(Step_ctr==0)Set_bri_flag=0;  //当八级调光键释放,置其释放标志为0。
				if(Key()==3){a++;if(a>=240)a=240;}  //减光。
				if(Key()==4){a--;if(a<=10)a=10;}    //加光。
				if((On_off_press_flag==1)&&(On_off==0))break;   //当开关灯键释放才动作,到关灯过程。
			}
			break;
		}
        //--------------------------关灯------------------------------//
		while(Power_flag==1)	//当开关灯标志为1,则关机。	
		{	
			Power_flag=0;   //置开关灯标志为0。
		    for(b=250;b>0;b--)//因为a值最大为240,所以b值要比a值大才能使a值减小到0(即亮度为0)。
			{
		    	if(a<=1)break;	//当a值不大于1时,此时灯已灭,跳出关灯函数。
				a--;    //每份时间内点亮的时间逐渐减小。
				LED_lamp=1; //每份时间内的点亮时间开始。
				//LED_dis = 1;
				delay(a);   //每份时间内点亮的时间延时。

		        a=~a;   //a取反后的值即为每份时间减点亮的时间,即关闭时间。
				LED_lamp=0; //每份时间内的关闭时间开始。
				//LED_dis = 0;
				delay(a);   //每份时间内关闭的时间延时。
		        a=~a;   //a再次取反,此时a值还原为点亮时间值。
		    }
			LED_lamp=0; //关闭LED台灯。
			//LED_dis = 0;
			while(On_off==1);   //等待开关灯按键释放。
		}
		Led();	//Led状态指示灯闪烁提示,已经关机。
	}
}

//===================带按键开关灯按键中断延时函数=====================//
void delay(unsigned int d)  //d决定延时时间的长短
{
	unsigned char i;
	while(--d!=0)
	{
		for(i=0;i<10;i++);
		if(On_off==1)break; //加入开关键判断,可在延时中也迅速作出动作。
 	}   				   
}

//============================延时函数================================//
void delay1(unsigned int t)  //t决定延时时间的长短
{
	unsigned char j;
	while(--t!=0)
	{
		for(j=0;j<2;j++);
 	}   				   
}

//================================完==================================//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -