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

📄 z_ht1380.c

📁 MCS-51单片机实验 39个实用实验和源码
💻 C
📖 第 1 页 / 共 2 页
字号:
				if (keyWord==0x3c)//加
				{
					dataTime[2]++;
					dataTime[2]=dataTime[2]%24;
				}
				if (keyWord==0x3d)//减
				{
					if (dataTime[2]==0){dataTime[2]=24;}
					dataTime[2]--;
				}
				dispChange();
			}

			if (setSt==1)//minute
			{
				if (keyWord==0x3c)
				{
					dataTime[1]++;
					dataTime[1]=dataTime[1]%60;
				}
				if (keyWord==0x3d)
				{
					if(dataTime[1]==0){dataTime[1]=60;}
					dataTime[1]--;
				}
				dispChange();	
			}
		
			if (setSt==2)//second
			{
				if (keyWord==0x3c)
				{
					dataTime[0]++;
					dataTime[0]=dataTime[0]%60;
				}
				if (keyWord==0x3d)
				{
					if(dataTime[0]==0){dataTime[0]=60;}
					dataTime[0]--;
				}
				dispChange();
			}
		}break;
		
		case 1://修改年、月、日
		{
			if (setSt==0)//年
			{
				if (keyWord==0x3c)
				{
					dataTime[6]++;
					dataTime[6]=dataTime[6]%100;
				}
				if (keyWord==0x3d)
				{
					if(dataTime[6]==0){dataTime[6]=100;}
					dataTime[6]--;
				}
				dispChange();
			}

			if (setSt==1)//月
			{
				if (keyWord==0x3c)
				{
					dataTime[4]=dataTime[4]%12;
					dataTime[4]++;
				}
				if (keyWord==0x3d)
				{
					dataTime[4]--;					
					if (dataTime[4]<=0){dataTime[4]=12;}
				}
				dispChange();	
			}
		
			if (setSt==2)//日
			{
				if (keyWord==0x3c)
				{
					if ((dataTime[6]%4==0)&&(dataTime[4]==2))
						dataTime[3]=dataTime[3]%29;
					else dataTime[3]=dataTime[3]%(nowDate[dataTime[4]]);
					dataTime[3]++;
				}
				if (keyWord==0x3d)
				{
					dataTime[3]--;
					if (dataTime[3]<=0)
					{
						dataTime[3]=(nowDate[dataTime[4]]);
						if((dataTime[6]%4==0)&&(dataTime[4]==2))
						{dataTime[3]=29;}
					}
				}
				dispChange();
			}
		}break;
	default:;
	}
}
/*-------------------------------------------------------------
**  函数名:changeDay
**  格式: void changeDay()
**  返回值: 无
**  描述:日期的变化,以2000年为基准
**  算法:先判断当年是否为闰年,当前月是在二月之前还是之后,
**		 根据以上条件算出天数,对7取余加上基准星期再对7取余。
**-------------------------------------------------------------
*/
void changeDay()//日期的变化,以2000年为基准
{
	unsigned int year,temp,i;//星期确定
	i=0;
	temp=dataTime[6]*365;//天数
	for(year=0;year<dataTime[6];year++)//闰日的天数;以2000的100年。
	{
		if(year%4==0) i++;
	}
	temp=(temp+i+dataTime[3]);

	if ((dataTime[6]%4==0)&&(dataTime[4]>2))
	{temp=temp+1;}//二月后当年如是闰年天数加一
	
	for(i=1;i<dataTime[4];i++)//当月之前的天数相加
	{temp+=nowDate[i];}
	
	dataTime[5]=(temp%7+5)%7;//算星期
	if (dataTime[5]==0)dataTime[5]=7;

	dayW();		
}

/*-------------------------------------------------------------
**  函数名:mSecond
**  格式: void mSecond()
**  返回值: 无
**  描述:时间延时
**  算法:嵌套循环产生时间延时
**-------------------------------------------------------------
*/
void mSecond(unsigned char x)   //延迟x ms
{   
    unsigned char i;
    while(x--)
    {
    	for (i=0;i<125;i++){;}
    }
}

/*-------------------------------------------------------------
**  函数名:getKey
**  格式: void getKey()
**  返回值: 无
**  描述:判是否有键按下.
**  算法:读状态口是否有键按下,有键值不为0.
**		 再读FIFO RAM命令,查表的键值.
**-------------------------------------------------------------
*/
void getKey()
{	
	keyWord=0;
    keyWord=(z8279&0x0f);//读状态口是否有键按下,有键值不为0
    if(keyWord!=0x00)
	{
		z8279=0x40;//读FIFO RAM命令
    	keyWord=(d8279&0x3f);
	    keyWord=key[keyWord];
	}
}

/*-------------------------------------------------------------
**  函数名:opKey2
**  格式: void opKey2()
**  返回值: 无
**  描述:判定是SET键、+键、-键?
**  算法:对键值进行判断为0x3b:SET键,0x3c:+键,0x3d:-键
**-------------------------------------------------------------
*/
void opKey2()
{
	getKey();
	if(keyWord==0x3b)
	{
		setSt++;
		if((dataTime[6]%4==0)&&(dataTime[4]==2))
		{
			if(dataTime[3]>29)
			{dataTime[3]=1;}
		}
		else if(dataTime[3]>nowDate[dataTime[4]])
		{dataTime[3]=1;}//当上次修改的天数大于现要的天数,使值为1
	}
	if(keyWord==0x3c||keyWord==0x3d)
	{
		AddSubb();
		notRead=1;
	}
}



/*-------------------------------------------------------------
**  函数名:flicker
**  格式: void flicker()
**  返回值: 无
**  描述:显示闪烁,并判断键值。
**  算法:数码管显示,延迟
**		 数码管灭,延迟同时判是否有键按下
**-------------------------------------------------------------
*/
void flicker()
{
	if(notRead==0)rd1380D();
	dispChange();//亮
	mSecond(200);
	opKey2();

	disp[num]=0x1a;//灭
	disp[num+1]=0x1a;
	display();
	mSecond(200);
	opKey2();
}

/*-------------------------------------------------------------
**  函数名:enterSet
**  格式: void enterSet()
**  返回值: 无
**  描述:读键以修改内容
**  算法:判断setSt=0/1/2;进入不同的处理内容。
**-------------------------------------------------------------
*/
void enterSet()
{
	while(setSt==0)
	{
		num=6;
		flicker();
	}
	dispChange();
	while(setSt==1)
	{ 
		num=3;
		flicker();
	}	
 	dispChange();
	while(setSt==2)
	{ 
		num=0;
		flicker();
	}					
}

/*-------------------------------------------------------------
**  函数名:opKey
**  格式: void opKey()
**  返回值: 无
**  描述:判断是MODE键、SET键
**  算法:对键值进行判断为0x3a:MODE,键0x3b:SET键。进入不同的处理内容
**-------------------------------------------------------------
*/	
void opKey()
{
	getKey();
	if(keyWord==0x3a)
	{
		modeSt++;
		modeSt=modeSt%3;				
		if(modeSt==2) changeDay();
	}
	if(keyWord==0x3b)
	{
		setSt=0;

		if(modeSt==2){setSt=3;}
		while(setSt<=2) 
		{
			enterSet();
		}
		if (setSt==3)
		{
			if(modeSt==0) hmsW();
			if(modeSt==1) ymdW();
			notRead=0;
		}
	}
}

/*-------------------------------------------------------------
**  函数名:sta8279
**  格式: void sta8279()
**  返回值: 无
**  描述:8279初始化
**  算法:将显示方式、扫描速率、和清除命令送命令/状态口
**-------------------------------------------------------------
*/
void sta8279()	//初始化8279
{   
    z8279=0x00; //00表示左键输入,八位字符显示,双键锁定
    z8279=0x2f; //2f表示键盘扫描速率
    z8279=0xc1; //C1清除显示RAM
}

/*-------------------------------------------------------------
**  函数名:main
**  格式: void main()
**  返回值: 无
**  描述:主程序
**  算法:初始化,循环调用读1380数据,LED显示和判键处理。
**-------------------------------------------------------------
*/
void main()
{
	sta8279();
	rest=0;
	secondR();//读秒值以判断是否要初始化
	if ((x1&0x80)==0x80)//如D7是1,则需初始化
	{
		x1=x1&0x7f;//x1b7=0;
		dataTime[0]=x1;
		if(x1>0x59) dataTime[0]=0;
		start1380();
	}

	while(1)
	{	
	    rd1380D();
		dispChange();
    	opKey();
 	}
}	



⌨️ 快捷键说明

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