sbit CLK=P1^1;
sbit SDA=P1^2;
sbit A=P2^0;
sbit M=P2^1;
sbit C=P2^2;
unsigned charnum[10]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f};
//-------------IIC--------------------
void IIC_Delay()
{;;}
void start()
{
SDA=1;
IIC_Delay();
CLK=1;
IIC_Delay();
SDA=0;
IIC_Delay();
}
void stop()
{
SDA=0;
IIC_Delay();
CLK=1;
IIC_Delay();
SDA=1;
IIC_Delay();
}
void answer()
{
CLK=1;
IIC_Delay();
while(SDA==1);
CLK=0;
IIC_Delay();
}
void write_byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
dat=dat<<1;
CLK=0;
IIC_Delay();
SDA=CY;
IIC_Delay();
CLK=1;
IIC_Delay();
}
CLK=0;
IIC_Delay();
SDA=1;
IIC_Delay();
}
unsigned char read_byte()
{
unsigned char i,dat;
CLK=0;
IIC_Delay();
SDA=1;
IIC_Delay();
for(i=0;i<8;i++)
{
CLK=1;
IIC_Delay();
dat=dat<<1;
if(SDA)
dat=dat|0x01;
CLK=0;
IIC_Delay();
}
return dat;
}
//-------------IIC A/DD/A-----------------------
void DA_trans(unsigned char dat)
{
start();
write_byte(0x90);
answer();
write_byte(0x40);
answer();
write_byte(dat);
answer();
stop();
}
unsigned char AD_trans()
{
unsigned char dat;
start();
write_byte(0x90);
answer();
write_byte(0x02);
answer();
start();
write_byte(0x91);
answer();
dat=read_byte();
stop();
return dat;
}
//-----------------------------------------------
void delay(unsigned char Xms)
{
unsigned int i,j;
for(i=0;i<Xms;i++)
for(j=0;j<114;j++);
}
//------------------------------------------------
void weixuan(char x,char y,char z)
{
A=x;
M=y;
C=z;
}
void Display(unsigned char dat)
{
weixuan(0,0,0);
P0=num[dat/100];
delay(5);
weixuan(1,0,0);
P0=num[(dat%100)/10];
delay(5);
weixuan(0,1,0);
P0=num[dat%10];
delay(5);
}
//------------------------------------------------
main()
{
unsigned char dat;
while(1)
{
dat=AD_trans();
Display(dat);
}
}
|