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

📄 红外控制ds1302.c

📁 红外控制DS1302开发。很好的单片机学习资料
💻 C
📖 第 1 页 / 共 2 页
字号:
   Time = read_clock(0x85);
   Time_0 = Time;
   Time = Time >> 4;
   Time_0 &= 0x0f;	
   if(time_flag == 1)
    {
	   if(Time_flag0 == 1)
	    {
		  if(flag <= 10)
		     P2_7 = 0;
		   else 
		     P2_7 = 1;
		   P0 = SEG_TAB[ Time ];	
		   Delay(1);	
		   P2_7 = 1;
		  
		  if(flag <= 10)
		    P2_6 = 0;
		  else
		    P2_6 = 1;
			P0 = SEG_TAB[ Time_0 ];
			Delay(1);
			P2_6 = 1;	   
		}
		else
		 {
		    P2_7 = 0;   //第一个数码管显示时的十位
			P0 = SEG_TAB[ Time ];	
			Delay(1);
			P2_7 = 1;
	
			P2_6 = 0;//第2个数码管显示时的个位
			P0 = SEG_TAB[ Time_0 ];
			Delay(1);
			P2_6 = 1;

		  }
		P2_5 = 0;
		P0=0xbf;
		Delay(1);
		P2_5 = 1;
		  

		if(Min_flag == 1)
	    {
		  if(flag <= 10)
		     P2_4 = 0;
		   else 
		     P2_4 = 1;
		   P0 = SEG_TAB[ Min ];	
		   Delay(1);	
		   P2_4 = 1;

		  if(flag <= 10)
		    P2_3 = 0;
		  else
		    P2_3 = 1;
			P0 = SEG_TAB[ Min_0 ];
			Delay(1);
			P2_3 = 1; 
	    }
	   else
	    {
		    P2_4 = 0;//第4个数码管显示分的十位
			P0 = SEG_TAB[ Min];	
			Delay(1);	
			P2_4 = 1;
	
			P2_3 = 0;//第5个数码管显示分的个位
			P0 =SEG_TAB[ Min_0 ];		
			Delay(1);
			P2_3 = 1;
		  }
		P2_2 = 0;
		P0=0xbf;
		Delay(1);
		P2_2 = 1;

	   if(Sec_flag == 1)
	    {
		   if(flag <= 10)
		     P2_1 = 0;
		   else 
		     P2_1 = 1;
		   P0 = SEG_TAB[ Sec ];	
		   Delay(1);	
		   P2_1 = 1;

		   if(flag <= 10)
		    P2_0 = 0;
		  else
		    P2_0 = 1;
			P0 = SEG_TAB[ Sec_0 ];
			Delay(1);
			P2_0 = 1;
		 }
		else
		 {
		    P2_1 = 0;//第7个数码管显示秒的十位
			P0 = SEG_TAB[ Sec ];	
			Delay(1);	
			P2_1 = 1;
	
			P2_0 = 0;//第8个数码管显示秒的各位。
			P0 = SEG_TAB[ Sec_0 ];	
			Delay(1);	
			P2_0 = 1;
		  }	
	}
   else
   {
        P2_7 = 0;   //第一个数码管显示时的十位
		
		P0 = SEG_TAB[ Time ];	
		Delay(1);
		P2_7 = 1;

		P2_6 = 0;//第2个数码管显示时的个位
		P0 = SEG_TAB[ Time_0 ];
		Delay(1);
		P2_6 = 1;

		P2_5 = 0;
		P0 = 0xbf;
		Delay(1);
		P2_5 = 1;

		P2_4 = 0;//第4个数码管显示分的十位

		P0 = SEG_TAB[ Min];	
		Delay(1);	
		P2_4 = 1;

		P2_3 = 0;//第5个数码管显示分的个位
		P0 =SEG_TAB[ Min_0 ];		
		Delay(1);
		P2_3 = 1;

		P2_2 = 0;
		P0=0xbf;
		Delay(1);
		P2_2 = 1;

		P2_1 = 0;//第7个数码管显示秒的十位

		P0 = SEG_TAB[ Sec ];	
		Delay(1);	
		P2_1 = 1;

		P2_0 = 0;//第8个数码管显示秒的各位。
		P0 = SEG_TAB[ Sec_0 ];	
		Delay(1);	
		P2_0 = 1;
	}
 }
/********************************************************************************************
* 函数名称:BCD_D
* 功    能:BCD转10进制
* 入口参数:BCD码 
* 出口参数:10进制
*********************************************************************************************/
uchar BCD_D(uchar BCD)
{
    uchar temp1,temp2;
	temp1 = BCD >> 4;
	temp2 = BCD & 0x0f;
	return(temp1*10 + temp2);
}

/********************************************************************************************
* 函数名称:Key()
* 功    能:键盘控制程序
* 入口参数:无 
* 出口参数:无
*********************************************************************************************/
void Key(void)
{
   uchar add_flag,sub_flag,Sec_1,Min_1,Time_1;
   static uchar Count1;
	if(Count0 != 0)
	{
	  switch(Count0)	 //判断键值
	   {
	    case 0xab :	Count1++;time_flag = 1;add_flag = 0;sub_flag = 0;
		            if(Count1 == 4)
					   Count1 = 0;
					switch(Count1)
					 {   
					     case 1 : Sec_flag = 1; Min_flag = 0; Time_flag0 = 0;break;
						 case 2 : Sec_flag = 0; Min_flag = 1; Time_flag0 = 0; break;
						 case 3 : Sec_flag = 0; Min_flag = 0; Time_flag0 = 1;break;
						 case 0 : time_flag = 0; Sec_flag = 0; Min_flag = 0; Time_flag0 = 0;break;
						 default : break;
						}
					break;
		case 0xac : add_flag = 1;sub_flag = 0;break;
		case 0xad :	add_flag = 0;sub_flag = 1;break;
		default : break;
	   }
      if( add_flag == 1)		  //加运算
		 {  
		    switch(Count1)
			  {  
			      case 1: Sec_1 = read_clock(0x81);
				          Sec = BCD_D(Sec_1);
				          Sec++;
				          if(Sec == 60)
						     Sec =0;
						   write_clock(0x8e,0x00);write_clock(0x80,SEG_TBC[Sec]);write_clock(0x8e,0x80);
						   break;
				  case 2:  Min_1 = read_clock(0x83);
				           Min = BCD_D(Min_1);
				           Min++;
				           if(Min == 60)
						     Min = 0;
						   write_clock(0x8e,0x00);write_clock(0x82,SEG_TBC[Min]);write_clock(0x8e,0x80);
						    break;
				  case 3:  Time_1 = read_clock(0x85);
				           Time = BCD_D(Time_1);
				           Time++;
				           if(Time == 24)
						      Time = 0;
						   write_clock(0x8e,0x00);write_clock(0x84,SEG_TBC[Time]);write_clock(0x8e,0x80);
							break;
				  default : break;
				}
			  add_flag = 0;
			  Count0 = 0;
			}
	 if( sub_flag == 1)		  //减运算
		   { 
			 switch(Count1)
			  {  
			      case 1: Sec_1 = read_clock(0x81);
				          Sec = BCD_D(Sec_1);
				          Sec--;
				          if(Sec+1 == 0)
						     Sec = 59;
						   write_clock(0x8e,0x00);write_clock(0x80,SEG_TBC[Sec]);write_clock(0x8e,0x80);
						   break;
				  case 2:  Min_1 = read_clock(0x83);
				           Min = BCD_D(Min_1);
				           Min--;
				           if(Min == 0)
						     Min = 59;
						   write_clock(0x8e,0x00);write_clock(0x82,SEG_TBC[Min]);write_clock(0x8e,0x80);
						    break;
				  case 3:  Time_1 = read_clock(0x85);
				           Time = BCD_D(Time_1);
				           Time--;
				           if(Time == 0)
						      Time = 23;
						   write_clock(0x8e,0x00);write_clock(0x84,SEG_TBC[Time]);write_clock(0x8e,0x80);
							break;
				  default : break;
				}
			 sub_flag = 0;
			 Count0 = 0;
		   }
		Count0 = 0; 
        }	
 }
/********************************************************************************************
* 函数名称:main()
* 功    能:红外解码。将38KHz一体化红外接收头接收到的来自SAA-3010T遥控器的遥控编码在LED1~LED8
*           上显示(LED8为高位,LED1为低位,亮表示1,灭表示0)。
*********************************************************************************************/      
void main (void)                
{
  TMOD = 0x11;                                   // 定时器0,1方式1
  EA = 1;                                        // 允许CPU中断
  IT0 = 1;                                       // INT0下降沿有效
  EX0 = 1;                                       // 开INT0中断
  Init_1302();
  while(1)
  {
    Key();
	Disp_Time();
  }
}

⌨️ 快捷键说明

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