📄 定时器 精确 做的 时钟.c
字号:
#include <AT89X51.H>
#include <stdlib.h>
#include <stdio.h>
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*延时程序 晶振11.0592M的i为115;12M的i为125;
由Delay 参数确定延迟时间
*/
void mdelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<115;i++);
}
}
unsigned char shi;
unsigned char fen;
unsigned char miao;
unsigned char geshu;
unsigned char gewei;
unsigned char shiwei;
unsigned char baiwei;
unsigned char qianwei;
unsigned char wei;
void INt_0(void) interrupt 0 using 0
{
mdelay(12);
geshu++;
if(geshu==100)
geshu=0;
mdelay(200);
qianwei=geshu/1000;
geshu=geshu%1000;
baiwei=geshu/100;
geshu=geshu%100;
shiwei=geshu/10;
gewei=geshu%10;
}
void jianpan(void)
{
if(P1_7==0)
{
shi++;
if(shi==24)
shi=0;
while(P1_7==0);
}
if(P1_6==0)
{
shi--;
if(shi==255)
shi=23;
while(P1_6==0);
}
if(P1_5==0)
{
fen++;
if(fen==60)
fen=0;
while(P1_5==0);
}
if(P1_4==0)
{
fen--;
if(fen==255)
fen=59;
while(P1_4==0);
}
}
void jianpan1(void)
{
if(P1_7==0)
{
shi++;
if(shi==24)
shi=0;
mdelay(200);
}
if(P1_6==0)
{
shi--;
if(shi==255)
shi=23;
mdelay(200);
}
if(P1_5==0)
{
fen++;
if(fen==60)
fen=0;
mdelay(200);
}
if(P1_4==0)
{
fen--;
if(fen==255)
fen=59;
mdelay(200);
}
}
void xianshi(void)
{
P0=dispcode[shi/10];
P1=0xfe;
mdelay(3);
P0=dispcode[shi%10];
P0_7=1;
P1=0xfd;
mdelay(2);
P0=dispcode[fen/10];
P1=0xfb;
mdelay(3);
P0=dispcode[fen%10];
P1=0xf7;
mdelay(2);
}
void t0(void) interrupt 1 using 0
{ TH0=(65536-9216)/256;
TL0=(65536-9216)%256;
wei++;
if(wei==100)
{ miao++;
wei=0;
if(miao==60)
{ fen++;
miao=0;
if(fen==60)
{
fen=0;
shi++;
if (shi==24)
{ shi=0;}
}
}
}
}
void main()
{
TMOD=0x01;
TH0=(65536-9216)/256;
TL0=(65536-9216)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
jianpan1();
xianshi();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -