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

📄 clock2.c

📁 时钟源代码
💻 C
字号:
#include <AT89X51.h>

unsigned char tc,sta=0x08;					//软件延时单元,状态标志 
bit flag1=0;									//秒标志
unsigned char data dispbit,dispbuf[6];	//显示位,显示缓冲区
code unsigned char ds=20; 					//软件延时系数__20
unsigned char second,minute,hour;		//秒,分,时

void delay (unsigned int count); 		//延时函数
void display(void);              	//显示函数
void key(void);						//键处理函数
void sx(void);							//送显示函数

void main(void)						//主函数
{

TMOD=0x01;								//定时器初始化
TH0=0x4C;
TL0=0x00;
IE=0x82;									//开放定时器0中断
tc=ds;									//软件延时初值
TR0=1;									//启动定时器
P1=~sta;									//初始状态

do{
	key();								//键处理
	display();							//显示
	if(flag1==1)						//有秒标志
	{
			flag1=0;						//秒标志清零
			second++;					//秒加一
			if (second==60) 
			{
				second=0;
				minute++;				//分加一
				if (minute==60)
				{
				hour++;					//时加一
				minute=0;
				if (hour==24) hour=0;
				}
			}
		sx();									//送显示
	}
   }while(1);
}

void timer0(void) interrupt 1			//定时器0中断服务函数
{
	TH0=0x4C;								//再送定时初值
	tc--;										//软件延时计数
	if (tc==0)								//中断20次
 		{
		 tc=ds;								//再设软件延时初值
		 flag1=1;							//建秒标志
		 }
}

void display(void)					//显示函数
{
	code unsigned char design[32]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,
        			      		   	 0x01,0x09,0xFF,0x00,0x00,0x00,0x00,0x00,
        						   		 0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,
        						   		 0x00,0x08,0x31,0x00,0x00,0x00,0x00,0x00};
											//字型码表
	unsigned char i;
	dispbit=0x01;						//字位初值

	for(i=0;i<6;i++)					//扫描6位数码显示器
	{
		P0=design[dispbuf[i]];		//转换字型并输出
		P2=dispbit;						//输出字位
		dispbit=dispbit+dispbit;	//字位左移
		delay (2);						//延时
	}
}

void key(void)
{
	unsigned char keycode,k1;
	k1=~(P3)&0x30;					//读键
	if ( k1 != 0) 					//有键按下
		{
			delay (20);				//延时
			keycode=~(P3)&0x30;	//读键码
			do							//等待键释放 
			{
			k1=~(P3)&0x30;
			}
			while (k1!=0);
	
			switch (keycode)		
			{
				case 0x10:			//P3.4键,转换状态 
				{
				sta=sta+sta;
				if(sta==0x10) sta=0x01;
				P1=~sta;
				if(sta==0x08) IE=0x82;			//开中断
				else 		IE=0x00;					//关中断
				};
				break;
				case 0x20:			//P3.5键,校时
				{
				switch (sta)
				{
					case 0x01:
					{
					second++;
					if(second==60) second=0;
					};
					break;
					case 0x02:
					{
					minute++;
					if(minute==60) minute=0;
					};
					break;
					case 0x04:
					{
					hour++;
					if(hour==24) hour=0;
					};
				 }
				};
			}
			sx();						//送显示
		 }
}

void delay (unsigned int count)//延时函数
{
	unsigned int i,j;
	for (i=0;i<count;i++)
		for (j=0;j<120;j++);
}

void sx (void)						//送显示函数
{
		dispbuf[5]=second%10;	//秒个位
		dispbuf[4]=second/10;	//秒十位
		dispbuf[3]=minute%10;	//分个位
		dispbuf[2]=minute/10;	//分十位
		dispbuf[1]=hour%10;		//时个位
		dispbuf[0]=hour/10;		//时十位
}


⌨️ 快捷键说明

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