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

📄 key.c

📁 avr关于1302和18b20的程序
💻 C
字号:
#define key_c
#include "main.h"
void key_scan(void)
{
	if(0==(in_look_date())) 
	{
		display_date();
	}
	else if(0==(in_look_temperature()))
	{
		display_temperature();
	}
	else if(0==(in_look_timer()))
	{	
		do{
			flash_control=0x01;
			display_timer(1,timer0_hour,timer0_minute);
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		do{
			flash_control=0x01;
			display_timer(2,timer1_hour,timer1_minute);
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		do{
			flash_control=0x01;
			display_timer(3,timer2_hour,timer2_minute);
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		do{
			flash_control=0x01;
			display_timer(4,timer3_hour,timer3_minute);
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		do{
			flash_control=0x01;
			display_timer(5,timer4_hour,timer4_minute);			
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		do{
			flash_control=0x01;
			display_timer(6,timer5_hour,timer5_minute);
			if(0==(in_shift())) key_delay();
		}while(in_shift());
	}
	else if(second<5) display_temperature();
	else if(second<10) display_date();
	else display_time();
	
	if(0==(in_set_time()))
	{		
		//年
		do{
			//年个位
			do{
				flash_control=0x80;
				display_year();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					year++;
					if((year&0x0f)>=0x0a) year&=0xf0;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			//年十位
			do{
				flash_control=0x40;
				display_year();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					year+=0x10;
					if((year&0xf0)>=0xa0) year&=0x0f;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());			
		}while(in_shift());
		
		//月-日-周
		do{	
			//周
			do{
				flash_control=0x80;
				display_date();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					week++;
					if(week>=0x08) week=0;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			
			//日个位
			do{
				flash_control=0x10;
				display_date();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					day++;
					if((day&0x0f)>=0x0a) day&=0xf0;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			
			//日十位
			do{
				flash_control=0x08;
				display_date();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					day+=0x10;
					if((day&0xf0)>=0x40) day&=0x0f;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			
			//月个位
			do{
				flash_control=0x02;
				display_date();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					month++;
					if((month&0x0f)>=0x0a) month&=0xf0;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			
			//月十位
			do{
				flash_control=0x01;
				display_date();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					month+=0x10;
					if((month&0xf0)>=0x20) month&=0x0f;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
		}while(in_shift());
		
		//时-分-秒
		do{	
			//秒个位
			do{
				flash_control=0x80;
				display_time();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					second++;
					if((second&0x0f)>=0x0a) second&=0xf0;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			//秒十位
			do{
				flash_control=0x40;
				display_time();
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					second+=0x10;
					if((second&0xf0)>=0x60) second&=0x0f;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			
			//分个位
			do{
				flash_control=0x10;
				display_time();
				
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					minute++;
					if((minute&0x0f)>=0x0a) minute&=0xf0;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			//分十位
			do{
				flash_control=0x08;
				display_time();
				
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					minute+=0x10;
					if((minute&0xf0)>=0x60) minute&=0x0f;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			
			//时个位
			do{
				flash_control=0x02;
				display_time();
				
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					hour++;
					if((hour&0x0f)>=0x0a) hour&=0xf0;
				}
				if(0==(in_shift())) key_delay();
			}while(in_shift());
			//时十位
			do{
				flash_control=0x01;
				display_time();
				
				if(0==(in_add())) key_delay();
				if(0==(in_add()))
				{
					hour+=0x10;
					if((hour&0xf0)>=0x30) hour&=0x0f;
				}
				if(0==(in_ok())) key_delay();
			}while(in_ok());
		}while(in_ok());
		ds1302_write_time();
	}
	if(0==(in_set_timer()))
	{
		//timer1
		//分个位
		do{
			flash_control=0x80;
			display_timer(1,timer0_hour,timer0_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer0_minute++;
				if((timer0_minute&0x0f)>=0x0a) timer0_minute&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//分十位
		do{
			flash_control=0x40;
			display_timer(1,timer0_hour,timer0_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer0_minute+=0x10;
				if((timer0_minute&0xf0)>=0x60) timer0_minute&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时个位
		do{
			flash_control=0x10;
			display_timer(1,timer0_hour,timer0_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer0_hour++;
				if((timer0_hour&0x0f)>=0x0a) timer0_hour&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时十位
		do{
			flash_control=0x08;
			display_timer(1,timer0_hour,timer0_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer0_hour+=0x10;
				if((timer0_hour&0xf0)>=0x30) timer0_hour&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());		
		eeprom_write_byte((uchar *)(timer0_address+0),timer0_hour);
		eeprom_write_byte((uchar *)(timer0_address+1),timer0_minute);
		
		//timer2
		//分个位
		do{
			flash_control=0x80;
			display_timer(2,timer1_hour,timer1_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer1_minute++;
				if((timer1_minute&0x0f)>=0x0a) timer1_minute&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//分十位
		do{
			flash_control=0x40;
			display_timer(2,timer1_hour,timer1_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer1_minute+=0x10;
				if((timer1_minute&0xf0)>=0x60) timer1_minute&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时个位
		do{
			flash_control=0x10;
			display_timer(2,timer1_hour,timer1_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer1_hour++;
				if((timer1_hour&0x0f)>=0x0a) timer1_hour&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时十位
		do{
			flash_control=0x08;
			display_timer(2,timer1_hour,timer1_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer1_hour+=0x10;
				if((timer1_hour&0xf0)>=0x30) timer1_hour&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());		
		eeprom_write_byte((uchar *)(timer1_address+0),timer1_hour);
		eeprom_write_byte((uchar *)(timer1_address+1),timer1_minute);
		
		//timer3
		//分个位
		do{
			flash_control=0x80;
			display_timer(3,timer2_hour,timer2_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer2_minute++;
				if((timer2_minute&0x0f)>=0x0a) timer2_minute&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//分十位
		do{
			flash_control=0x40;
			display_timer(3,timer2_hour,timer2_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer2_minute+=0x10;
				if((timer2_minute&0xf0)>=0x60) timer2_minute&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时个位
		do{
			flash_control=0x10;
			display_timer(3,timer2_hour,timer2_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer2_hour++;
				if((timer2_hour&0x0f)>=0x0a) timer2_hour&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时十位
		do{
			flash_control=0x08;
			display_timer(3,timer2_hour,timer2_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer2_hour+=0x10;
				if((timer2_hour&0xf0)>=0x30) timer2_hour&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());		
		eeprom_write_byte((uchar *)(timer2_address+0),timer2_hour);
		eeprom_write_byte((uchar *)(timer2_address+1),timer2_minute);
		
		//timer4
		//分个位
		do{
			flash_control=0x80;
			display_timer(4,timer3_hour,timer3_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer3_minute++;
				if((timer3_minute&0x0f)>=0x0a) timer3_minute&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//分十位
		do{
			flash_control=0x40;
			display_timer(4,timer3_hour,timer3_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer3_minute+=0x10;
				if((timer3_minute&0xf0)>=0x60) timer3_minute&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时个位
		do{
			flash_control=0x10;
			display_timer(4,timer3_hour,timer3_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer3_hour++;
				if((timer3_hour&0x0f)>=0x0a) timer3_hour&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时十位
		do{
			flash_control=0x08;
			display_timer(4,timer3_hour,timer3_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer3_hour+=0x10;
				if((timer3_hour&0xf0)>=0x30) timer3_hour&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());		
		eeprom_write_byte((uchar *)(timer3_address+0),timer3_hour);
		eeprom_write_byte((uchar *)(timer3_address+1),timer3_minute);
		
		//timer5
		//分个位
		do{
			flash_control=0x80;
			display_timer(5,timer4_hour,timer4_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer4_minute++;
				if((timer4_minute&0x0f)>=0x0a) timer4_minute&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//分十位
		do{
			flash_control=0x40;
			display_timer(5,timer4_hour,timer4_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer4_minute+=0x10;
				if((timer4_minute&0xf0)>=0x60) timer4_minute&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时个位
		do{
			flash_control=0x10;
			display_timer(5,timer4_hour,timer4_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer4_hour++;
				if((timer4_hour&0x0f)>=0x0a) timer4_hour&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时十位
		do{
			flash_control=0x08;
			display_timer(5,timer4_hour,timer4_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer4_hour+=0x10;
				if((timer4_hour&0xf0)>=0x30) timer4_hour&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());		
		eeprom_write_byte((uchar *)(timer4_address+0),timer4_hour);
		eeprom_write_byte((uchar *)(timer4_address+1),timer4_minute);
		
		//timer6
		//分个位
		do{
			flash_control=0x80;
			display_timer(6,timer5_hour,timer5_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer5_minute++;
				if((timer5_minute&0x0f)>=0x0a) timer5_minute&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//分十位
		do{
			flash_control=0x40;
			display_timer(6,timer5_hour,timer5_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer5_minute+=0x10;
				if((timer5_minute&0xf0)>=0x60) timer5_minute&=0x0f;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时个位
		do{
			flash_control=0x10;
			display_timer(6,timer5_hour,timer5_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer5_hour++;
				if((timer5_hour&0x0f)>=0x0a) timer5_hour&=0xf0;
			}
			if(0==(in_shift())) key_delay();
		}while(in_shift());
		//时十位
		do{
			flash_control=0x08;
			display_timer(6,timer5_hour,timer5_minute);
			
			if(0==(in_add())) key_delay();
			if(0==(in_add()))
			{
				timer5_hour+=0x10;
				if((timer5_hour&0xf0)>=0x30) timer5_hour&=0x0f;
			}
			if(0==(in_ok())) key_delay();
		}while(in_ok());		
		eeprom_write_byte((uchar *)(timer5_address+0),timer5_hour);
		eeprom_write_byte((uchar *)(timer5_address+1),timer5_minute);
	}
}
void key_delay(void)
{
	uint i=0;
	uchar j=0;
	for(i=0;i<0xffff;i++)	for(j=0;j<0x78;j++);
}

⌨️ 快捷键说明

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