📄 时钟iic.c
字号:
#include<reg52.h>
#include<intrins.h>
#define unchar unsigned char
#define unint unsigned int
sbit sda=P1^5;
sbit scl=P1^6;
sbit dula=P2^0 ;
sbit wela=P2^1;
unchar code shu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unchar code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unchar hour,minute,second,i;
unchar hour1,hour0,minute1,minute0,second1,second0;
void delay(void)
{ unchar a;
for(a=0;a<10;a++)
{}
}
void start()
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void responsion()
{
unchar i=0;
scl=1;
delay();
while((sda==1)&&(i<250))
i++;
scl=0;
delay();
}
void write_date(unchar date)
{
unchar i=0,temp=0;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
unchar read_date()
{
unchar i,date;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
date=(date<<1)|sda;
scl=0;
delay();
}
return date;
}
void init()
{
sda=1;
scl=1;
delay();
}
void write_add(unchar address,unchar date)
{
start();
write_date(0xa0);
responsion();
write_date(address);
responsion();
write_date(date);
responsion();
stop();
}
unchar read_add(unchar address)
{
unchar date;
start();
write_date(0xa0);
responsion();
write_date(address);
responsion();
start();
write_date(0xa1);
responsion();
date=read_date();
stop();
return date;
}
void delay1(unchar z)
{
unchar x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void time()
{
if(i>=20)
{
i=0;
second+=1;
second1=second/10;
second0=second%10;
write_add(5,second1);
delay1(10);
write_add(6,second0);
if(second==59)
{
second=0;
minute+=1;
minute1=0x00+minute/10;
minute0=0x00+minute%10;
write_add(3,minute1);
delay1(10);
write_add(4,minute0);
}
if(minute==59)
{
minute =0;
hour+=1;
hour1=0x00+hour/10;
hour0=0x00+hour%10;
write_add(1,hour1);
delay1(10);
write_add(2,hour0);
}
if(hour==24)
hour=0;
}
}
void display()
{
P0=0x7f;
wela=1;
wela=0;
P0=shu[read_add(1)];
dula=1;
dula=0;
P0=0xff;
dula=1;
dula=0;
P0= 0xbf;
wela=1;
wela=0;
P0=shu[read_add(2)];
dula=1 ;
dula=0;
P0=0xff;
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
P0=0x40;
dula=1;
dula=0;
P0=0xff;
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
P0=shu[read_add(3)];
dula=1;
dula=0;
P0=0xff;
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
P0=shu[read_add(4)];
dula=1;
dula=0;
P0=0xff;
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
P0=0xbf;
dula=1;
dula=0;
P0=0xff;
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
P0=shu[read_add(5)];
dula=1;
dula=0;
P0=0x40;
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
P0=shu[read_add(6)];
dula=1;
dula=0;
P0=0xff;
dula=1;
dula=0;
}
void memory()
{
second1=read_add(5);
second0=read_add(6);
second=second1*10+second0;
minute1=read_add(3);
minute0=read_add(4);
minute=minute1*10+minute0;
hour1=read_add(1);
hour0=read_add(2);
hour=hour1*10+hour0;
}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
init();
memory();
while(1)
{
time();
display();
}
}
void timing() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -