|
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code mingren[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code chutian[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar a,b,c,i,num,rce,num1;
int d,f;
sbit sda=P2^0;
sbit scl=P2^1;
void Delay10us();
void action();
void stop();
uchar write(uchar date);
uchar read();
void write_add(uchar address,uchar date);
uchar read_add(uchar address);
void duli(char,char);
void main()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
if(num1>100)
num1=0;
while(1)
{duli(b,c);
write_add(2,num1);
read_add(2);}
}
void time() interrupt 1
{TH0=0x3c;
TL0=0xb0;
a++;
if(a==20)
{a=0;
num++;
if(num==100)
num=0;
b=num/10;
c=num%10;}}
uchar write(uchar date)
{ for(i=0;i<8;i++)
{ sda=date>>7;
date=date<<1;
Delay10us();
scl=1;
Delay10us();
scl=0;
Delay10us();}
sda=1;
Delay10us();
scl=1; //寫一個字節
while(sda)
{ i++;
if(i>200)
{scl=0;
Delay10us();
return 0;}}
scl=0;
Delay10us();
return 1;}
uchar read()
{uchar j,k;
sda=1;
Delay10us();
for(j=0;j<8;j++)
{ scl=1;
Delay10us();
k<<=1;
k|=sda;
Delay10us();
scl=0;
Delay10us();
} return k;}
void write_add(uchar address,uchar date)
{action();
write(0xa0);
write(address);
write(date);
stop();}
uchar read_add(uchar address)
{action();
write(0xa0);
write(address);
action();
write(0xa1);
rce=read();
stop();
return rce;}
void action()
{sda=1;
Delay10us();
scl=1;
Delay10us();
sda=0;
Delay10us();
scl=0;
Delay10us();
}
void stop()
{ sda=0;
Delay10us();
scl=1;
Delay10us();
sda = 1;
Delay10us();}
void Delay10us()
{
for(d=1;d>0;d--)
{
for(f=2;f>0;f--);
}}
void duli(char b,char c)
{ P0=mingren[0];
P3=chutian[c];
P3=0x00;
P0=mingren[1];
P3=chutian[b];}
|
|