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

📄 key.h

📁 由单片机搞的软时钟
💻 H
字号:
/**************************************************************************
  
                   		THE KEY LIB
  
             		COPYRIGHT (c)   2008 BY CHENSS.
                       		--  ALL RIGHTS RESERVED  --
  
   File Name:       DISPLAY.H
   Author:          NET.XICP.CHENSS
   Created:         2008/1/25
   Modified:		NO
   Revision: 		1.0
  
***************************************************************************/

#ifndef _KEY_H_
#define _KEY_H_

#include<reg52.h>
#include"buffer.h"
//#include"display.h"


//#define DELAY_TIME 1000
void keySET(void);
void keyADD(void);
void alarmCarry(void);
void keyNEXT(void);
void dealCarry(void);
void delay(uint);
//void initClock(void);

uchar nowP1;

void key(void)
{
	//uchar nowP1;
	dealCarry();
	nowP1=P1;
	nowP1&=0x07;
	switch(nowP1)
	{
		case 0:
			notADD=1;
			notNEXT=1;
			notSET=1;
			if(keyIndex<10)
			{
				keyIndex=0;
				//initD(15); 
				isFlick=0;
				canReport=~canReport;
				isFlicker=canReport;
				timertemp[0]=88;
				timertemp[1]=88;
				timertemp[2]=88;
				temp=timertemp;
				nowP1=P1;
				nowP1&=0x07;
				while(nowP1==0x00)
				{
					nowP1=P1;
					nowP1&=0x07;
				}
				isFlick=1;

			}
			break;

		case 1:
			notNEXT=1;
			notSET=1;
			if(keyIndex<10)
			{
				
				keyIndex=1;
				temp=alarm3;
			}
			break;

		case 2:
			notADD=1;
			notSET=1;
			if(keyIndex<10)
			{
				
				keyIndex=2;
				temp=alarm2;
			}
			break;

		case 3:					//SET键按下
			if(notSET)
			{
				keySET();
			}
			notSET=0;
			break;

		case 4:
			notADD=1;
			notNEXT=1;
			if(keyIndex<10)
			{
				keyIndex=4;
				temp=alarm1;
			}
			break;

		case 5:					//NEXT键按下
			if(notNEXT)
			{
				keyNEXT();
			}
			notNEXT=0;
			break;

		case 6:					//ADD键按下
			if(keyIndex==33&notADD)
			{
				keyADD();
				nowP1=P1;
				nowP1&=0x07;
				delay(15000);
			}else if(keyIndex==33)
			{
				keyADD();
				delay(1500);
			}else if(notADD)
			{
				keyADD();
			}	
			notADD=0;	 
			break;

		case 7:					//无键按下
			notSET=1;
			notNEXT=1;
			notADD=1;
			if(keyIndex<10)
			{
				keyIndex=7;
				temp=time;
			}else if(keyIndex==33)
			{
				canFlickerSet=1;
			}
			break;
	}
}


void keySET(void)
{
	switch(keyIndex)
	{
		case 7:				//已经过无键
			keyIndex=30;	//开始进行设置
			timer[0]=0;
			timer[1]=0;
			timer[2]=0;
			temp=timer;		//记时器
			isFlick=0;
			isFlicker=1;
			//EA=1;
			//ET2=1;
			//PT2=0;
			//TH2=0xec;
			//TL2=0x78;		//准备好记时器
			//TR2=0;
			//delay(DELAY_TIME);  //延时
			break;
		case 30:
			keyIndex=33;		//开始进行时钟的设置
			isFlickerSet=1;
			startTimer=0;
			isFlick=1;
			isLongTime=0;
			timer[0]=0;
			timer[1]=0;
			timer[2]=0;
			temp=time;
			sourceIndex=0;
			flickerIndex=2;		//闪烁位
			//delay(DELAY_TIME);
			break;
		case 33:				//结束设置
			keyIndex=8;
			isFlickerSet=0;		//不再闪烁
			temp=time;			//显示时钟
			//delay(DELAY_TIME);
			break;			
	}
}

void keyADD(void)
{
	
	switch(keyIndex)
	{
		case 30:
			startTimer=~startTimer;
			isFlick=~isFlick;
			isFlicker=1;
			//delay(DELAY_TIME);
			break;

	   	case 33:
			canFlickerSet=0;
			isFlickerSet=0;
			
			switch(sourceIndex)
			{
				case 0:
					if(flickerIndex==2)
					{
						if(time[2]<30)
						{
							time[2]=0;
						}else
						{
							time[2]=0;
							time[1]+=1;
							isCarry=1;
							carry();
						}
					}else
					{
						time[flickerIndex]+=1;
						carry();
					}
					
					break;
				case 1:
					temp[flickerIndex]+=1;
					carry();
					break;
				case 2:
					temp[flickerIndex]+=1;
					carry();
					break;
				case 3:
					alarmCarry();
					break;
				case 4:
					alarmCarry();
					break;
				case 5:
					alarmCarry();
					break;
			}
			//delay(200);
			//delayADD=1200;
			break;
		default:
			temp=week;
			break;
	   		
	}
}


void alarmCarry(void)
{
	switch(flickerIndex)
	{
		case 2:
			if(temp[2]==30)
			{
				temp[2]=0;
			}else
			{
				temp[2]+=5;
			}
			break;
	   	case 1:
			if(temp[1]==59)
			{
				temp[1]=0;
			}else
			{
				temp[1]+=1;
			}
			break;
 		case 0:
			if(temp[0]==23)
			{
				temp[0]=0;
			}else
			{
				temp[0]+=1;
			}
			break;
	}
}




void keyNEXT(void)
{
	switch(keyIndex)
	{
		case 30:
			if(temp==timertemp)
			{
				temp=timer;
			}else if(!startTimer)
			{
				timer[0]=0;
				timer[1]=0;
				timer[2]=0;
				isLongTime=0;
			}else
			{
				timertemp[0]=timer[0];
				timertemp[1]=timer[1];
				timertemp[2]=timer[2];
				temp=timertemp;
			}
			//delay(DELAY_TIME);	
			break;
		case 33:
			isFlickerSet=1;
			if(sourceIndex==5&flickerIndex==0)
			{
				sourceIndex=0;
				flickerIndex=2;
				
			}else if(flickerIndex==0)
			{
				sourceIndex+=1;
				flickerIndex=2;
			}else if(sourceIndex==2)
			{
				sourceIndex+=1;
				flickerIndex=2;
			}else
			{
				flickerIndex-=1;
			}
			
			temp=source[sourceIndex];
			//delay(DELAY_TIME);
			break;
		default :
			keyIndex=5;
			temp=date;
	}
}

void dealCarry(void)
{
	if(isCarry==1)
	{
		carry();
		isCarry=0;
	}
if(isTimerCarry==1)
	{
		TimerCarry();
		isTimerCarry=0;
	}
}

void delay(uint dx)
{
	//uchar nowP1;
	while(dx>1)
	{
		nowP1=P1;
		nowP1&=0x07;
		if(nowP1==0x07)
		{
			break;
		}
		dx--;
	}
}

//***********************************************************************
#endif

⌨️ 快捷键说明

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