#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
sbit sda=P2^2;
sbit scl=P2^3; //AT24c02 管腳定義
sbit duan=P2^1;
sbit wei=P2^0;
bit ack;
unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管顯示定義
unsigned char tempdata[8];
void nop()
{
;;
}
void delayus(uchar t);
void delayms(unsigned int t);
void delayus(uchar t)
{
while(--t);
}
void delayms(unsigned int t)
{
while(t--)
{
delayus(245);
delayus(245);
}
}
void display()
{
uchar i;
P0=0;
duan=1;
duan=0;
P0=tempdata[i];
duan=1;
duan=0;
P0=weima[i];
wei=1;
wei=0;
i++;
if(i==8)i=0;
}
void timers0(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display();
}
void start()
{
sda=1;
nop();
scl=1;
nop();
sda=0;
nop();
scl=0;
nop();
}
void stop()
{
sda=0;
nop();
scl=1;
nop();
sda=1;
nop();
}
void NOACK()
{
sda=1;
nop();
scl=1;
nop();
scl=0;
nop();
}
void write(unsigned char c)
{
unsigned char i;
scl=0;
for(i=0;i<8;i++)
{
c=c<<1;
sda=CY;
scl=1;
nop();
scl=0;
nop();
}
scl=1;
nop();
sda=1;
nop();
if(sda==0)ack=0;
else ack=1;
scl=0;
nop();
}
unsigned char read()
{
unsigned char i,k;
scl=0;
nop();
for(i=0;i<8;i++)
{
scl=1;
nop();
k=(k<<1)|sda;
scl=0;
nop();
}
nop();
scl=0;
return(k);
}
bit write_string(unsigned char dizhi,unsigned char p)
{
start();
write(0xae);
if(ack==0)return(0);
write(dizhi);
if(ack==0)return(0);
write(p);
if(ack==0)return(0);
stop();
return(1);
}
bit read_string(unsigned char dizhi)
{
unsigned char p;
start();
write(0xae);
if(ack==0)return(0);
write(dizhi);
if(ack==0)return(0);
start();
write(0xaf);
if(ack==0)return(0);
p=read();
NOACK();
stop();
return(1);
}
void main()
{
unsigned char s,b;
TMOD |=0x01;
EA=1;
ET0=1;
TR0=1;
s=read_string(4);
while(1)
{
tempdata[0]=duanma[(s/10)/10];
tempdata[1]=duanma[(s/10)%10];
tempdata[2]=duanma[(s%10)%10];
for(b=0;b<5;b++)delayms(200);
s++;
write_string(4,s);
if(s==255)s=0;
}
}
|