//*************************朱明皇
#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++);
}
单片机电子时钟源代码
最新推荐文章于 2024-01-11 00:35:51 发布