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

📄 clock.c

📁 简易电脑时钟
💻 C
字号:
#include "reg52.h"

#define THCO   0xee
#define TLCO   0x0

unsigned char  code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//共阴极数码管,0-9段码表
unsigned char  Data_Buffer[4]={0,0,0,0};
//四个数码管显示数值,数组变量定义

unsigned char Hour=0,Min=0,Sec=0;
bit flag=0;//1分时间到标志

sbit P10=P1^0;		//四个数码管的位码口定义
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;

sbit K_Mode=P2^0; //按键定义
sbit K_UP=P2^1;
sbit K_DN=P2^2;

sbit LED1=P2^3; //四个指示灯
sbit LED2=P2^4;

void main()
{	
   	TMOD=0x11;		//定时器0初始化
 	TH0=THCO;
 	TL0=TLCO;
 	TR0=1;
 	ET0=1;
 	EA=1;

 	while(1)  
	{
	 if(flag==1)
	 {
	 	flag=0;
		Data_Buffer[0]=Hour/10;
		Data_Buffer[1]=Hour%10;		
		Data_Buffer[2]=Min/10;		
		Data_Buffer[3]=Min%10;
	 }
	}
}

void timer0() interrupt 1
{
 static unsigned char Bit=0;	//静态变量,退出程序后,值保留
 static unsigned char count=0,K_count=0;
 static unsigned char Mode=0;
 //MODE, 0:实时时钟;1:修改小时;2:修改分钟

 TH0=THCO;
 TL0=TLCO;

 count++;
 if(count>=200)	//秒计时,定时器定时5ms,计200次为一秒
 {
   count=0;
   Sec++;
   if(Sec>=60)
   {
     Sec=0;     
	 Min++;	 flag=1;		//更新数码管显示
	 if(Min>=60)	//时间计时
	 {
	  Min=0; Hour++;
	  if(Hour>=24)Hour=0;
	 }
   }
 }

 Bit++;	
 if(Bit>=4)Bit=0;
 P1|=0x0f;					//先关位码
 P0=Duan[Data_Buffer[Bit]];	//开段码
 if(count<100&&Bit==1)P0|=0x80;//0.5S中间小数点亮,之后灭,不断循环
 switch(Bit)				//送位码
 {
  case 0: P10=0;break;
  case 1: P11=0;break;
  case 2: P12=0;break;
  case 3: P13=0;break;
 }

 if(K_Mode==0||K_UP==0||K_DN==0)	//有键按下
 {
 	K_count++;
  	if(K_count>=30)	//消抖处理
  	{
    	K_count=0;
		flag=1;
		if(K_Mode==0)	//修改Mode,
		    {
			 Mode++;
			 if(Mode>=3)Mode=0;
			 if(Mode==0){LED1=1;LED2=1;}//实时时间
			 else if(Mode==1)LED1=0;   //修改小时
			 else if(Mode==2){LED1=1;LED2=0;}//修改分钟
			}
		 else if(K_UP==0)
		 	{
			 if(Mode==1)   //小时加
			 { Hour++; if(Hour>=24)Hour=0; }
			 else if(Mode==2)//分钟加
			 { Min++; if(Min>=60)Min=0;  }
		 	}
		 else if(K_DN==0)
		 	{
			 if(Mode==1) //小时减
			  { 
			   if(Hour==0)Hour=23;
			   else Hour--; 
			  }
			 else if(Mode==2) //分钟减
			  { 
			   if(Min==0)Min=59;
 			   else Min--;
			  }
			}
	 }
 }
 else K_count=0;
}

⌨️ 快捷键说明

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