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

📄 24m点阵时钟.c

📁 基于C51的点阵时钟显示仿真电路和源码
💻 C
📖 第 1 页 / 共 4 页
字号:
				case CHG_DAY:
					if(HIDE){
						if(Cut_num(&TMP_TIME) == 0xf9)
							TMP_TIME= 0x31;
						}
					else{
						if(Cut_num(&Time.Day) == 0xf9)
							Time.Day= 0x31;
						}
					break;
				case CHG_WEEK:
					if(HIDE){
						if(Cut_num(&TMP_TIME) == 0xf9)
							TMP_TIME= 0x7;
						}
					else{
						if(Cut_num(&Time.Week) == 0xf9)
							Time.Week= 0x7;
						}
					break;
				case CHG_YEAR:
					if(HIDE){
						if(Cut_num(&TMP_TIME) == 0xf9)
							TMP_TIME= 0x99;
						}
					else{
						if(Cut_num(&Time.Year) == 0xf9)
							Time.Year = 0x99;
						}
					//if(Cut_num(&Time.Year) == 0x99)
					//	Time.Year= 0;
					break;
				default:
					break;
				}
}

//======按键======
uchar ReadKey(){
	//
	if(!key_done){
	switch(MSG_KEY){
		case KEY0_S:STATE = STA_sTIME;
					break;
		case KEY1_S:STATE = STA_gWORD;	//STA_sWEEK
					break;
		case KEY2_S:STATE = STA_gTEMP;
					break;
		case KEY3_S:STATE = STA_gTIME;
					break;
		case KEY0_L:STATE = STA_CHG;
					break;
		case KEY1_L:STATE = STA_SONG;
					break;
		case KEY2_L:STATE = STA_gTEMP;
					break;
		case KEY3_L:STATE = STA_gWORD;	//STA_sTIME
					break;
		default:	break;
		}
		}
	key_done = 1;	//按键事件处理完成
	return MSG_KEY;	
}
//=======================
//****校时按键处理****
//=======================
uchar ReadKey1(){
	//
	if(!key_done){
	switch(MSG_KEY){
		case KEY0_S:		//切换校时对象
		case KEY0_L:
					exit = 0;
					TR1 = 0;		//关闭定时器1闪烁
					Change_obj();
					if(CHANGE++ >= CHG_YEAR)
						CHANGE = CHG_HOUR;
					TR1 = 1;		//开启定时器1闪烁
					break;
		case KEY1_S:		//加加
		case KEY1_L:
					exit = 0;
					TR1 = 0;		//关闭定时器1闪烁
					Add_Time();
					TR1 = 1;		//开启定时器1闪烁
					break;
		case KEY2_S:		//减减
		case KEY2_L:
					exit = 0;
					TR1 = 0;		//关闭定时器1闪烁
					Cut_Time();
					TR1 = 1;		//开启定时器1闪烁
					break;
		case KEY3_L:
		case KEY3_S:
					return KEY3_S;
		default:	break;
		}
		}
	key_done = 1;	//按键事件处理完成
	return 0;
}
//===========================
void Tinit(){
	TMOD = 0x11;
	TH0 = 0xD8;
	TL0 = 0xF0;
	TH1 = 0x42;
	TL1 = 0xCA;
	TR0 = 1;
	//TR1 = 1;
	ET0 = 1;
	ET1 = 1;
	EA = 1;
}

timer0() interrupt 1{
	TH0 = 0xb1;
	TL0 = 0xe0;

	if(P1 != 0xff) {//若有键按下
		cur_key_val = P1&0x0f;	//记录按键值
		if(key_times < 150)
			key_times++;  
		else{
			key_keep_times++; 	//长按连击
			if(key_keep_times >= 10){  //10 1秒连击10次
				key_keep_times = 0; 
				MSG_KEY = 0x10 | cur_key_val;
				key_done = 0;	//按键事件复位
				}
			}	 
	}else{
		if(key_times > 2 && key_times < 100 && key_done){	//短按键
			MSG_KEY = cur_key_val;
			key_done = 0; 	//按键事件复位
			}
		else if(key_times >= 100 && key_done){	//长按键
			MSG_KEY = 0x10 | cur_key_val;
			key_done = 0; 	//按键事件复位
			}
		key_times = 0;	
		key_keep_times = 0;
		}
}

timer1() interrupt 3{ 
	if(STATE == STA_CHG){
		TH1 = 0x42;
		TL1 = 0xCA;
		if(hide_times++ == 8){
			HIDE = 0;	//显示
			switch(CHANGE){
				case CHG_HOUR:
					Time.Hour =TMP_TIME;
					break;
				case CHG_MIN:
					Time.Minute = TMP_TIME;
					break;
				case CHG_SEC:
					Time.Second = TMP_TIME;
					break;
				case CHG_MON:
					Time.Month = TMP_TIME;
					break;
				case CHG_DAY:
					Time.Day = TMP_TIME;
					break;
				case CHG_WEEK:
					Time.Week = TMP_TIME;
					break;
				case CHG_YEAR:
					Time.Year = TMP_TIME;
					break;
				default:
					break;
				}
	 	}
	 	if(hide_times > 17){
	 		hide_times = 0;
			HIDE = 1;	//隐藏
			exit++;
			switch(CHANGE){
				case CHG_HOUR:
					TMP_TIME = Time.Hour;
					Time.Hour = 0xcc;
					break;
				case CHG_MIN:
					TMP_TIME = Time.Minute;
					Time.Minute = 0xcc;
					break;
				case CHG_SEC:
					TMP_TIME = Time.Second;
					Time.Second = 0xcc;
					break;
				case CHG_MON:
					TMP_TIME = Time.Month;
					Time.Month = 0xcc;
					break;
				case CHG_DAY:
					TMP_TIME = Time.Day;
					Time.Day = 0xcc;
					break;
				case CHG_WEEK:
					TMP_TIME = Time.Week;
					Time.Week = 0xcc;
					break;
				case CHG_YEAR:
					TMP_TIME = Time.Year;
					Time.Year = 0xcc;
					break;
				default:
					break;
				}
		}
	}
}

void Compute_State(){
	switch(Time.Second){
		case 0x1:
			//STATE = STA_gTIME;
			break;
		case 0x2:
			STATE = STA_sYEAR;
			break;
		case 0x15:
			STATE = STA_sTEMP;
			break;
		case 0x31:
			STATE = STA_sDATE;
			break;
		case 0x40:
			STATE = STA_sWEEK;
			break;
		case 0x50:
			STATE = STA_sTEMP;
			break;
		default:
			break;
		}
	if(Time.Minute%2 == 0 && Time.Second == 0)
		STATE = STA_gTIME;
	if((Time.Minute&0x0f)%5 == 0 && Time.Second == 30)
		STATE = STA_gTEMP;
	if((Time.Minute&0x0f) == 7 && Time.Second == 0)
		STATE = STA_gWORD;
	if((Time.Minute&0x0f) == 3 && Time.Second == 0)
		STATE = STA_SONG;
}
//;---------主程序循环--------------
	   	void main()
		{
			int i;
			initial();
			Tinit();
			Init_DS1302();
			Read_TIME();	//读取时间
			Read_Temperature();
			Show_Cpyrt();
			//start_time();
			//write_time1302();
			MSG_MV = MSG_MV_L;
			STATE	= STA_sTIME;
			while(1)
			{
			   ReadKey();
				switch(STATE){
					case STA_gTIME:
						//添加代码
						MSG_MV = MSG_MV_L;
						move_times = 0;
						start_word=0;
						Read_TIME();	//读取时间
						Show_All_Info();
						MSG_KEY = KEY0_S;	//回到时间画面
						key_done = 0;
						break;
					case STA_gTEMP:
						Put_Wdispram(TMP_WORDS); //,start_word++ 
						Read_Temperature();
			  			Disp_Temperature();
			  			Put_gTEMP();
						//Move_Down();
			  			Show_Move_Word(TMP_WORDS);
						MSG_KEY = KEY0_S;	//回到时间画面
						key_done = 0;
						break;
					case STA_gWORD:
						//添加代码
						Put_Wdispram(MY_WORDS); //,start_word++ 	
						//Move_Down();
			  			Show_Move_Word(MY_WORDS);
						MSG_KEY = KEY0_S;	//回到时间画面
						key_done = 0;
						break;
					case STA_sTIME:
						//添加代码
						MSG_MV = MSG_MV_L;
						move_times = 0;
						start_word=0;
						Read_TIME();	//读取时间
						Put_Tdispram(0);	
						Show_sWord();
						Compute_State();
						break;
					case STA_sDATE:
						//添加代码
						MSG_MV = MSG_MV_L;
						move_times = 0;
						start_word=0;
						Read_TIME();	//读取时间
						Put_Ddispram(8);
						Move_Down();
						Put_Ddispram(0);
						for(i=0;i<8;i++)
							Show_sWord();
						Read_TIME();
						Put_Tdispram(8);
						Move_Up();
						MSG_KEY = KEY0_S;	//回到时间画面
						key_done = 0;
						break;
					case STA_sWEEK:
						//添加代码
						MSG_MV = MSG_MV_L;
						move_times = 0;
						start_word=0;
						Read_TIME();	//读取时间
						Put_Kdispram(8);
						Move_Up();	//Move_Down();
						for(i=0;i<8;i++){	
							Read_TIME();	//读取时间
							Put_Kdispram(0);
							Show_sWord();
							}
						Read_TIME();
						Put_Tdispram(8);
						Move_Down();	//Move_Up();
						MSG_KEY = KEY0_S;	//回到时间画面
						key_done = 0;
						break;
					case STA_sYEAR:
						MSG_MV = MSG_MV_L;
						move_times = 0;
						start_word=0;
						Read_TIME();	//读取时间
						Put_Ydispram(8);
						Move_Down();
						for(i=0;i<8;i++){	
							Read_TIME();	//读取时间
							Put_Ydispram(0);
							Show_sWord();
							}
						Read_TIME();
						Put_Tdispram(8);
						Move_Up();
						MSG_KEY = KEY0_S;	//回到时间画面
						key_done = 0;
						break;
					case STA_sTEMP:
						//添加代码
						MSG_MV = MSG_MV_L;
						move_times = 0;
						start_word=0;
						Read_Temperature();
			  			Disp_Temperature();
						Put_sTEMP(8);
						Move_Up();	//Move_Down();
						for(i=0;i<8;i++)	{
							Read_Temperature();
			  				Disp_Temperature();
							Put_sTEMP(0);
							Show_sWord();
							}
						Read_TIME();
						Put_Tdispram(8);
						Move_Down();	//Move_Up();
						MSG_KEY = KEY0_S;	//回到时间画面
						key_done = 0;
						break;
					case STA_sWORD:
						//添加代码
						break;
					case STA_CHG:
						//校时模式
						Change_Time();
						write_time1302();
						Read_TIME();
						Put_Tdispram(8);
						Move_Up();
						MSG_KEY = KEY0_S;
						break;
					case STA_SONG:
						MSG_MV = MSG_MV_L;
						move_times = 0;
						start_word=0;
						Show_Song();
						MSG_KEY = KEY0_S;
						key_done = 0;
						break;
					default:
						break;
					 }
			}
		 }

⌨️ 快捷键说明

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