📄 eclock_2.c
字号:
#include"AT89X52.H"
#define uchar unsigned char
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar code pos[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
sbit SCK=P2^0;
sbit SER=P2^1;
sbit RCK=P2^2;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
uchar k[8];
uchar second;
uchar minite;
uchar hour;
uchar num;
void delay_5ms(void)
{
uchar i,j;
for(i=10;i>0;i--)
for(j=248;j>0;j--)
;
}
void In595(uchar m,uchar n)
{
uchar i,temp;
temp=pos[m]; //断码
for(i=0;i<8;i++)
{
SCK=0;
SER=temp&0x80;
temp<<=1;
SCK=1;
}
temp=seg[n]; //位码
for(i=0;i<8;i++)
{
SCK=0;
SER=temp&0x80;
temp<<=1;
SCK=1;
}
RCK=0;
RCK=1;
}
void main(void)
{ uchar j;
TMOD=0x01;
TH0=0X3C;
TL0=0XB0;
TR0=1;
ET0=1;
EA=1;
second=0;
minite=0;
hour=0;
while(1)
{
if(k1==0)
{
delay_5ms();
if(k1==0)
{
second=0;
while(k1==0);
}
}
if(k2==0)
{
delay_5ms();
if(k2==0)
{
minite++;
if(minite==60){ minite=0;}
while(k2==0);
}
}
if(k3==0)
{
delay_5ms();
if(k3==0)
{
hour++;
if(hour==24) { hour=0; }
while(k3==0);
}
}
for(j=0;j<8;j++)
{In595(j,k[j]);if(j==2||j==5)k[j]=10;}
}
}
void t0(void) interrupt 1/*定时器工作方式*/ using 0//工作寄存器
{
num++;
if(num==20)
{
num=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
k[0]=second%10;
k[1]=second/10;
k[3]=minite%10;
k[4]=minite/10;
k[6]=hour%10;
k[7]=hour/10;
}
TH0=0X3C;
TL0=0XB0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -