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

📄 lcd1602电子钟源程序.c

📁 DS1302时间DS1302时间DS1302时间DS1302时间DS1302时间
💻 C
📖 第 1 页 / 共 3 页
字号:
	return(t);
	
}

//***********************************************//



void tem_conv()			//温度转换
			{		
				uint8 flagdat ;//定义温度值符号
				if(tflag==0)
				temdata[4]=flagdat=0x20;//温度为正不显示符号
				   else
				 temdata[4]=flagdat=0x2d;//负温度显示负号:-
				 temdata[0]=tdat/1000+0x30;//温度十位
			     temdata[1]=tdat%1000/100+0x30;//温度个位
			     temdata[2]=tdat%100/10+0x30;//小数十位
			     temdata[3]=tdat%10+0x30;//小数百位
				/*if(temdata[0]==0x30)
				    {temdata[0]=0x20;//?????0,???
				   		if(temdata[1]==0x30)
					    {
							temdata[1]=0x20;//?????0,???0????
					    }
				   	}*/
				
			  }
			
/**************************************************************
更新显示缓冲区
***************************************************************/
 void updata_buffer(void)
{
	display_buffer1[0] = '2' ;
	display_buffer1[1] = '0' ;
	display_buffer1[2] = timedata[0]/16+0x30 ;
	display_buffer1[3] = timedata[0]%16+0x30 ;
	display_buffer1[4] = 0 ;
	display_buffer1[5] = timedata[1]/16+0x30 ;
	display_buffer1[6] = timedata[1]%16+0x30 ;
	display_buffer1[7] = 1 ;
	display_buffer1[8] = timedata[2]/16+0x30 ;
	display_buffer1[9] = timedata[2]%16+0x30 ;
	display_buffer1[10] = 2 ;
	
	display_buffer1[11] = ' ' ;
	switch(timedata[6]%16)
		{
			case 1 : {display_buffer1[12] = 'M' ; 
					display_buffer1[13] = 'o' ;
					display_buffer1[14] = 'n' ;	}break ;
			case 2 : {display_buffer1[12] = 'T' ; 
					display_buffer1[13] = 'u' ;
					display_buffer1[14] = 'e' ;	}break ;
			case 3 : {display_buffer1[12] = 'W' ; 
					display_buffer1[13] = 'e' ;
					display_buffer1[14] = 'd' ;	}break ;
			case 4 : {display_buffer1[12] = 'T' ; 
					display_buffer1[13] = 'h' ;
					display_buffer1[14] = 'u' ;	}break ;
			case 5 : {display_buffer1[12] = 'F' ; 
					display_buffer1[13] = 'r' ;
					display_buffer1[14] = 'i' ;	}break ;
			case 6 : {display_buffer1[12] = 'S' ; 
					display_buffer1[13] = 'a' ;
					display_buffer1[14] = 't' ;	}break ;
			case 7 : {display_buffer1[12] = 'S' ; 
					display_buffer1[13] = 'u' ;
					display_buffer1[14] = 'n' ;	}break ;
			default : break;
		}
	if(ALARM_VALUE == 1)
		display_buffer1[15] = 3 ;
	else
		display_buffer1[15] = ' ' ;
	display_buffer2[0] = timedata[3]/16+0x30 ;
	display_buffer2[1] = timedata[3]%16+0x30 ;
	display_buffer2[2] = ':' ;
	display_buffer2[3] = timedata[4]/16+0x30 ;
	display_buffer2[4] = timedata[4]%16+0x30 ;
	display_buffer2[5] = ':' ;
	display_buffer2[6] = timedata[5]/16+0x30 ;
	display_buffer2[7] = timedata[5]%16+0x30 ;
	display_buffer2[8] = temdata[4] ;
	display_buffer2[9] = temdata[0] ;
	display_buffer2[10] = temdata[1] ;
	display_buffer2[11] = '.' ;
	display_buffer2[12] = temdata[2] ;
	display_buffer2[13] = temdata[3] ;
	display_buffer2[14] = 0xdf ;
	display_buffer2[15] = 'C' ;
}

/******************************************************************
显示缓冲区内容
*******************************************************************/
 void display_buffer(void)
{
	uint8 i ;
	LCD1602_write_cmd(0x80) ;
	for(i=0;i<16;i++)
	LCD1602_write_data(display_buffer1[i]);
	LCD1602_write_cmd(0xc0) ;
	for(i=0;i<16;i++)
	LCD1602_write_data(display_buffer2[i]);
}
/*****************************************************************
按键扫描函数
******************************************************************/

void key_scan(void)
{
	if(MODE == 0)
		{
			delay_ms(20) ;
			while(!MODE) ;
			speakers(5) ;
			DIS_ON = 0 ;
			MODE_ON ++ ;
			if(MODE_ON == 1 && OK_VALUE == 0)
			LCD1602_write_cmd(0x01) ;
			if(MODE_ON == 2 && OK_VALUE == 0)
				{
					MODE_ON = 0 ;
					DIS_ON = 1 ;
					self_pos = 0 ;
				}
		}
	
	if(INC == 0 && MODE_ON == 1 && OK_VALUE == 0)
		{
			delay_ms(20) ; 
			while(!INC) ;
			speakers(5) ;
			LCD1602_write_cmd(0x01) ;
			self_pos++ ;
			if(self_pos > 2)
			self_pos = 0 ;
		}
	if(DEC == 0 && MODE_ON == 1 && OK_VALUE == 0)
		{
			delay_ms(20) ;
			while(!DEC) ;
			speakers(5) ;
			LCD1602_write_cmd(0x01) ;
			self_pos-- ;
			if(self_pos < -3)
			self_pos = -1 ;
		}
	if(DEC == 0 )
		{
			delay_ms(20) ;
			while(!DEC) ;
			speakers(5) ;
			DEC_VALUE++;
		}
	if(INC == 0)
		{
			delay_ms(20) ;
			while(!INC) ;
			speakers(5) ;
			INC_VALUE++;
		}
	if(OK == 0 && MODE_ON != 0)
		{
			delay_ms(20) ;
			while(!OK) ;
			speakers(5) ;
			LCD1602_write_cmd(0x01) ;
			OK_VALUE++;
			INC_VALUE = 0 ;
			DEC_VALUE = 0 ;
		}
	if(OK == 0 && MODE_ON == 0)
		{
			delay_ms(20) ;
			while(!OK) ;
			speakers(5) ;
			ALARM_ON = 1 ;
			if(ALARM_VALUE == 1)
				ALARM_VALUE = 0 ;
			else
				ALARM_VALUE = 1 ;
		}	
}
/*******************************************************************
按键菜单人机交互函数(第一级)
********************************************************************/
void menu_display_1()
{
	if(MODE_ON == 1 && OK_VALUE == 0)
		{
			switch(self_pos)
				{	
					case -3 : {
								LCD1602_write_char(0,1,4) ;
								LCD1602_write_string(1,1,"1 Time setting ") ;
								LCD1602_write_string(1,0,"2 Alarm setting") ;
							  }break;
					case -2 : {
								LCD1602_write_char(0,0,4) ;
								LCD1602_write_string(1,1,"1 Time setting ") ;
								LCD1602_write_string(1,0,"2 Alarm setting") ;
							  }break;
					case -1 : {
								LCD1602_write_char(0,0,4) ;
								LCD1602_write_string(1,1,"2 Alarm setting ") ;
								LCD1602_write_string(1,0,"3 Stopwatch") ;
							  }break;
					case 0 :  {
								LCD1602_write_char(0,1,4) ;
								LCD1602_write_string(1,1,"1 Time setting ") ;
								LCD1602_write_string(1,0,"2 Alarm setting") ;
							  }break ;
					case 1 :  {
								LCD1602_write_char(0,0,4) ;
								LCD1602_write_string(1,1,"1 Time setting ") ;
							 	LCD1602_write_string(1,0,"2 Alarm setting") ;
							  }break ;
					case 2 :  {
								LCD1602_write_char(0,0,4) ;
								LCD1602_write_string(1,1,"2 Alarm setting ") ;
								LCD1602_write_string(1,0,"3 Stopwatch") ;
							  }break ;
					default :  break ;
				}	
		}
}

/*******************************************************************
按键菜单人机交互函数(第二级)
********************************************************************/
void menu_display_2(void)
{
	uint8 i ,j;
	if(MODE_ON != 0 && OK_VALUE != 0)
		{
			LCD1602_write_cmd(0x0f) ;
			if(self_pos == 0 || self_pos == -3)
				{
					
					LCD1602_write_cmd(0x81) ;
					for(i=0;i<15;i++)
						LCD1602_write_data(display_buffer1[i]) ;
					LCD1602_write_cmd(0xc4) ;
					for(j=0;j<8;j++)
						LCD1602_write_data(display_buffer2[j]) ;
					if(MODE_ON == 1)
						{
							uint8 item ;
							LCD1602_write_cmd(0x84) ;
							if(INC_VALUE !=0 )
								{
									item = DS1302_read_byte(0x8d) ;
									item=(item/16)*10+item%16;
									item++;
									if(item==100)item=0;
									item=(item/10)*16+item%10;
									DS1302_write_byte(0x8e,0x00);//允许写操作
									DS1302_write_byte(0x8c,item);
									INC_VALUE = 0 ;
								}
							if(DEC_VALUE != 0)
								{
									item = DS1302_read_byte(0x8d) ;
									item=(item/16)*10+item%16;
									item--;
									if(item < 0)item=99;
									item=(item/10)*16+item%10;
									DS1302_write_byte(0x8e,0x00);//允许写操作
									DS1302_write_byte(0x8c,item);
									DEC_VALUE = 0 ;
								}
						}
					else if(MODE_ON == 2)
							{
								uint8 item ;
								LCD1602_write_cmd(0x87) ;
								if(INC_VALUE !=0 )
									{
										item = DS1302_read_byte(0x89) ;
										item=(item/16)*10+item%16;
										item++;
										if(item==13)item=1;
										item=(item/10)*16+item%10;
										DS1302_write_byte(0x8e,0x00);//允许写操作
										DS1302_write_byte(0x88,item);
										INC_VALUE = 0 ;
									}
								if(DEC_VALUE != 0)
									{
										item = DS1302_read_byte(0x89) ;
										item=(item/16)*10+item%16;
										item--;
										if(item == 0)item=12;
										item=(item/10)*16+item%10;
										DS1302_write_byte(0x8e,0x00);//允许写操作
										DS1302_write_byte(0x88,item);
										DEC_VALUE = 0 ;
									}
								}
					
					else if(MODE_ON == 3)
						{
							uint8 item ;
							LCD1602_write_cmd(0x8a) ;
							if(INC_VALUE !=0 )
								{
									item = DS1302_read_byte(0x87) ;
									item=(item/16)*10+item%16;
									item++;
									if(item==32)item=1;
									item=(item/10)*16+item%10;
									DS1302_write_byte(0x8e,0x00);//允许写操作
									DS1302_write_byte(0x86,item);
									INC_VALUE = 0 ;
								}
							if(DEC_VALUE != 0)
								{
									item = DS1302_read_byte(0x87) ;
									item=(item/16)*10+item%16;
									item--;
									if(item == 0)item=31;
									item=(item/10)*16+item%10;
									DS1302_write_byte(0x8e,0x00);//允许写操作
									DS1302_write_byte(0x86,item);
									DEC_VALUE = 0 ;
								}
						}
					
					else if(MODE_ON == 4)
						{
							uint8 item ;
							LCD1602_write_cmd(0x8f) ;
							if(INC_VALUE !=0 )
								{
									item = DS1302_read_byte(0x8b) ;
									item=(item/16)*10+item%16;
									item++;
									if(item==8)item=1;
									item=(item/10)*16+item%10;
									DS1302_write_byte(0x8e,0x00);//允许写操作
									DS1302_write_byte(0x8a,item);
									INC_VALUE = 0 ;
								}
							if(DEC_VALUE != 0)
								{
									item = DS1302_read_byte(0x8b) ;
									item=(item/16)*10+item%16;
									item--;
									if(item == 0)item=7;
									item=(item/10)*16+item%10;
									DS1302_write_byte(0x8e,0x00);//允许写操作
									DS1302_write_byte(0x8a,item);
									DEC_VALUE = 0 ;
								}	
						}	
					else if(MODE_ON == 5)
						{
							uint8 item ;
							LCD1602_write_cmd(0xc5) ;
							if(INC_VALUE !=0 )
								{
									item = DS1302_read_byte(0x85) ;
									item=(item/16)*10+item%16;
									item++;
									if(item==24)item=0;
									item=(item/10)*16+item%10;
									DS1302_write_byte(0x8e,0x00);//允许写操作
									DS1302_write_byte(0x84,item);
									INC_VALUE = 0 ;
								}
							if(DEC_VALUE != 0)
								{
									item = DS1302_read_byte(0x85) ;

⌨️ 快捷键说明

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