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

📄 main.c

📁 基于8051和8279的数字时钟程序
💻 C
字号:
#include<8279setting.h>
#include<reg52.h>
#include<ABSACC.h>
#include<clock.h>
#include<memerycheck.h>
#define uchar 	unsigned char	
#define uint	unsigned int
uchar idata function=0,updata=1;//0-正常记时间   1-设定时间
uchar idata clock_seting[6]={10,10,10,10,10,10};//装载当前时间和设定时间
uchar idata clock_curent[6]={1,2,3,4,0,1};//装载当前时间和设定时间
uchar idata postion=5;
uchar idata half=0;

void dispsettingtime(void);//显示时间
void dispcurrenttime(void);//显示时间

void operate(uchar key);//按键操作
void inputtime(uchar key);//修改时间
void cancel(void );//取消输入
void sure(void);//确认输入

main()
{ 	
	init_8279();
	IE=0x00;/*关中断*/
	IT0=1;	/*选择负跳变触发*/
	TMOD=0X01;/*计数模式*/
	IP=0X02;  /*优先级*/
	TL0=0XAF;//初值0.05秒
	TH0=0X3C;
	SP=0X60;
	IE=0x83;/*开中断*/	
	TR0=1;
	while(1)
	{
		if(updata==1)
		{
			add_second(clock_curent);
			updata=0;
			if(function==0)
			dispcurrenttime();
		}
	}

}

void service_second(void) interrupt 1 /*外部中断置标志*/
{ 
	TR0=0;  	
	TL0=0XAF;
	TH0=0X3C;
	TR0=1;
	half++;
	if(half==20)
	{
		updata=1;
		half=0;
	}
}
void service_int0(void) interrupt 0  /*外部中断置标志*/
{
 	uchar key;
 	key=keyin_8279();
	operate(key);	
}
void operate(uchar key)//按键操作
{
	switch(key)
	{
		case 'a':	function=(++function)%2;
					if(function==1) 
						dispsettingtime();
					else 	
						dispcurrenttime();
					break;
		case 'b':	sure();		break;
		case 'c':	cancel();	break;
		case 'd':	break;
		case 'e':	break;
		case 'f':	break;
		default :	if(function==1)	inputtime(key);break;
	}
}

void sure(void)
{	
	uchar i;
	if(function==1)
	{	postion++;
		if(postion!=6)
			{	
				i=0;
				while(i<postion)
				{clock_curent[i]=0;i++;}
				while(i<6)
				{clock_curent[i]=clock_seting[i];i++;}
			}
		for(i=0;i<6;i++)
		clock_seting[i]=10;
		postion=5;
		function=0;
	}

		
}


void cancel(void)
{	
	uchar i;
	dispcurrenttime();	
	for(i=0;i<6;i++)
	clock_seting[i]=10;
	function=0;
}	


void inputtime(uchar key)//修改时间
{	

	switch(postion)
	{
		case 5:	if(key<=2)	
					{clock_seting[5]=key;postion--;}
				break;
		case 4:	if((clock_seting[5]==2)&&(key>4))
					;
				else 
					{clock_seting[4]=key;postion--;}
				break;	
		case 3:		
		case 1:			
				if(key<6)	
					{clock_seting[postion]=key;postion--;}
				break;
		case 2:			
		case 0:	clock_seting[postion]=key;	postion--;	
				break;
	}
	dispsettingtime();
}



void dispcurrenttime(void)//显示时间
{	
	if(clock_curent[5]==0)
		disp(7,11);	//首位0消隐
	else 
		disp(7,clock_curent[5]);//小时
	disp(6,clock_curent[4]);
	disp(5,10);
	disp(4,clock_curent[3]);//分钟
	disp(3,clock_curent[2]);
	disp(2,10);
	disp(1,clock_curent[1]);//秒钟
	disp(0,clock_curent[0]);
}

void dispsettingtime(void)//显示时间
{	
	disp(7,clock_seting[5]);
	disp(6,clock_seting[4]);
	disp(5,10);
	disp(4,clock_seting[3]);//分钟
	disp(3,clock_seting[2]);
	disp(2,10);
	disp(1,clock_seting[1]);//秒钟
	disp(0,clock_seting[0]);
}




⌨️ 快捷键说明

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