单片机电子时钟源代码

//*************************朱明皇
#include <reg52.h>
#include <intrins.h>
sbit key1=P1^4;//调节时按钮
sbit key2=P1^5;//调节分按钮
void delay(int);//延迟函数
void display(int ,int );//显示函数
void Clock();//时钟函数
int number[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF};//初始化数字数组	0123456789-
int position[9]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//初始化位置数组					012345678
int Second=55,Minute=59,Hour=1;//在这里进行初始化
void Timer0Init(void)		//1毫秒@11.0592MHz
{
	//AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x66;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;		//	打开定时器的中断
	EA=1;		//	打开总中断
}
static int T0Count1=0;
int a=0,b=0;//时间判断
void Timer0 () interrupt 1
{
	TL0 = 0x66;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	T0Count1++;

	if(T0Count1>=1000)//进入函数进行判断
	{
	Second++;
	T0Count1=0;
	Clock();
	}


	if(T0Count1<70)//进入函数进行判断
	{
	Clock();
	}

	if(key1==0)//第一个按下
	{
		a++;
	}
	if(key1==1 && a>5)//第一个弹起
	{
		Hour++;
		a=0;
	}


if(key2==0)//第二个按下
	{
		b++;
	}
	if(key2==1 && b>5)//第二个弹起
	{
		Minute++;
		b=0;
	}

	
}


void main()//主函数
{
Timer0Init();
while(1);
}//main

void Clock()//时钟函数
{
//int Minute=59,Hour=23;//在这里进行初始化
//***********显示*开始
			display(3,10);
			delay(1);
			display( 6,10);
			delay(1);//显示-
			display(1,Hour/10);
			delay(1);
			display( 2,Hour%10);
			delay(1);//显示时
			display(4,Minute/10);
			delay(1);
			display( 5,Minute%10);
			delay(1);//显示分
			display(7,Second/10);
			delay(1);
			display( 8,Second%10);
			delay(1);//显示秒
//***********显示*结束

//**************进位判断*开始

	if(Second==59)
		{
			Second=0;
			Minute=Minute+1;
		}
	if(Minute>=60)//判断分
		{
			Hour=Hour+1;
			Minute=0;
		}
	if(Hour>=24)//判断时
		{
			Hour=0;
		}
//**************进位判断*结束


}

void display(int p,int num)//显示函数
{
			P0=0xFF;
			P2=position[p];//选择位置
			P0=number[num];//数字
}

void delay(unsigned int time)//延迟函数
{
unsigned int x,y;
for(y = 0; y < time; y++)
for(x = 0;x < 111; x++);
}


  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的51单片机电子时钟源代码,可以根据自己的需求进行修改和完善: ```c #include <reg51.h> // 51单片机头文件 unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管0-9的编码 void delay(unsigned int i) // 延时函数 { while(i--); } void display(unsigned char i) // 显示函数 { P0 = table[i]; // 将数码管编码写入P0口 delay(1000); // 延时1s } void main() { unsigned char h = 0, m = 0, s = 0; // 时分秒 // 定时器0初始化,1s中断 TMOD = 0x01; // 定时器0工作模式1 TH0 = 0xfc; // 定时器0计数初值,1ms TL0 = 0x18; EA = 1; // 开全局中断 ET0 = 1; // 开定时器0中断 TR0 = 1; // 启动定时器0 while(1) { display(h / 10); // 显示小时的十位数 display(h % 10); // 显示小时的个位数 display(10); // 显示冒号 display(m / 10); // 显示分钟的十位数 display(m % 10); // 显示分钟的个位数 display(10); // 显示冒号 display(s / 10); // 显示秒钟的十位数 display(s % 10); // 显示秒钟的个位数 } } void timer0() interrupt 1 // 定时器0中断服务函数 { TH0 = 0xfc; // 重新赋初值,1ms TL0 = 0x18; s++; // 秒加1 if(s == 60) // 如果秒钟为60,分钟加1 { s = 0; m++; if(m == 60) // 如果分钟为60,小时加1 { m = 0; h++; if(h == 24) // 如果小时为24,重新从0开始 { h = 0; } } } } ``` 这个程序使用了定时器0来进行时钟的计时,每隔1秒触发一次定时器中断,其中包括了时分秒的计算和显示函数。可以根据需要进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值