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

📄 定时.c

📁 51单片机实现简易家电定时控制装置
💻 C
字号:
/*接口*/
/*	P0接键盘*/
/*	p1接数码管的位选端
	P2接段码
	p3.2接蜂鸣器
	P2.0/P3.2/P3.7接发光二极管

*/
#include <reg52.h>
#define uchar unsigned char
uchar cout, k,i,n;
uchar miao = 0;
uchar fen = 0;
uchar hour =0;
uchar d_hour,d_fen,d_miao;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
sbit P3_7=P3^7;
bit baojing,flag_ma,t;
uchar duanma[11] =
{
  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff
};
uchar weima[6] =
{
  0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf
};
uchar huanchun[6];
void Delay(uchar i)
{
	do{	if(flag_ma==0)	//显示标志,为0显示设置定时时间,
		{	huanchun[0] = miao % 10;
    		huanchun[1] = miao / 10;
    		huanchun[2] = fen % 10;
    		huanchun[3] = fen / 10;
    		huanchun[4] = hour % 10;
    		huanchun[5] = hour / 10;
		}
		else	   //显示标志,为1显示设置定时时长,
		{	huanchun[0] = d_miao % 10;
    		huanchun[1] = d_miao / 10;
    		huanchun[2] = d_fen% 10;
    		huanchun[3] = d_fen / 10;
    		huanchun[4] = d_hour % 10;
    		huanchun[5] = d_hour / 10;
		}
	   }while(i--);
}
fuwei()	  //复位操作
{	miao=0;fen=0;hour=0;
	d_hour=0;d_fen=0;d_hour=0;
}
void dingshi()interrupt 1  //定时50ms //到计数
{
  TH0 = 0x4c;
  TL0 = 0x00;
  cout++;
  if (cout == 20)
  {
    miao--;
    cout=0;
    if (miao==0xff)
    {
      miao=59;
      fen--;
      if (fen==0xff)
      {
        fen=59;
        hour--;
        if (hour==0xff)
          hour=23;
      }
    }
	if(miao==0&&fen==0&&hour==0)
	{	baojing=1;//声音报警标志
		P3_2=0;//声音报警
		P3_7=0; //控制信号产生控制为低电平
		if(fen==58||t==1)t=0,P3_2=1;//报警1分钟,或到定时时间后停止报警
	}
	if(miao==(60-d_miao)&&fen==(59-d_fen)&&hour==(23-d_hour))
	{	P3_7=1;	//
		t=1;
		TR0=0;
		fuwei(); //显示都为0
	}
	}
  }
void xianshi()interrupt 3 	//中断显示	2 MS
{	
	  TH1=0Xf8;		   //显示定时两毫秒。
	  TL1=0Xcc;
      P1 = weima[i];
      P2 = duanma[huanchun[i]];
      i++;
      if(i==6)i=0;
	  if(fen==58||t==1)P3_2=1;	 //到1分钟或定时到后停止报警
}	
unsigned char scankey()	  //键盘扫描
{
	unsigned char k,down,up;
	P0=0x00;
	P0=0xF0;
	k=P0;
	if(k==0xF0)return 0xFF;
	Delay(50);		////////////
	down=3;
	while(k&0x80)down--,k<<=1;
	P0=0x00;
	P0=0x0F;
	k=P0;
	if(k==0x0F)return 0xFF;
	up=0;
	while(k&0x01)up+=4,k>>=1;
	return up+down;
}//scankey
songjian() //松键操作
{	uchar k;
	while(1)
	{	k=scankey();
		if(k==scankey()&&k==0xff)break;
	}
}		
main()
{
  TMOD = 0X01;	  //初始化定时器T0	T1
  TH0 = 0XEE;
  TL0 = 0X00;
  TH1=0Xf8;	
  TL1=0Xcc;
  EA = 1;
  ET0 = 1;
  TR0 = 0;
  ET1 = 1;
  TR1 = 1;
  P3_7=1;//控制信号初始为高电平
  while(1)
  {		
  		k=scankey();
		Delay(100);
		if(k==scankey()&&k!=0xff)
		{	
			songjian();
			if(k==15)
			{	TR0=0;
				P3_0=0;
				flag_ma=0;
				while(1)
  				{		
  				k=scankey();
				Delay(100);
				if(k==scankey()&&k!=0xff)
				{	songjian();		
					if(k==14){P3_0=1;break;}
					if(k<6)
					{  switch(k)
						{	case 0:	miao++;
									if(miao==60)miao=0;
									break;
							case 1:	miao--;
									if(miao==0xff)miao=59;
									break;
							case 2: fen++;
									if(fen==60)fen=0;
									break;
							case 3: fen--;
									if(fen==0xff)fen=59;
									break;
							case 4: hour++;
									if(hour==24)hour=0;
									break;
							case 5: hour--;
									if(hour==0xff)hour=23;
									break;
						}
					}
				}
			}
			}
		
		if(k==13)
			{	TR0=0;
				P3_0=0;
				flag_ma=1;
				while(1)
  				{		
  					k=scankey();
					Delay(100);
					if(k==scankey()&&k!=0xff)
					{	songjian();
						if(k==12){P3_0=1;break;}
						if(k<6)
						{  
							switch(k)
							{	case 0:	d_miao++;
										if(d_miao==60)d_miao=0;
										break;
								case 1:	d_miao--;
										if(d_miao==0xff)d_miao=59;
										break;
								case 2: d_fen++;
										if(d_fen==60)d_fen=0;
										break;
								case 3: d_fen--;
										if(d_fen==0xff)d_fen=59;
										break;
								case 4: d_hour++;
										if(d_hour==24)d_hour=0;
										break;
								case 5: d_hour--;
										if(d_hour==0xff)d_hour=23;
										break;
							}
						}
					}
				}
			} 
			if(k==11){flag_ma=0;;P3_1=0;TR0=1;}
			}
		}
}			//15号键是对调整显示时钟的切入键
//13号键是对定时时刻的调整的切入键
//0/1对秒调整按下0键加一秒按下1键减一秒
//2/3对秒调整按下2键加一分按下3键减一分
//4/5对秒调整按下4键加一小时按下5键减一小时
//11号键是跳出调整状态键
//当时间到达所调定时的时刻时P3_7=0; //控制信号产生控制为低电平P3_2=0;//声音报警
//同时P3_2=1;//报警1分钟,或到定时时间后停止报警

⌨️ 快捷键说明

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