#include<reg52.h>
sbit CLK=P1^1;
sbit DIO=P1^0;
sbit STB=P1^2;
unsigned char DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//¹²Òõ¼«
void DelayUs(unsigned char t);
void DelayMs(unsigned char t);
void WriteByte(unsigned char date)
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if((date&(1<<i))>=1)
DIO=1;
else
DIO=0;
CLK=1;
}
}
void cmd(unsigned char date)
{
STB=0;
WriteByte(date);
STB=1;
}
void WriteDate(unsigned char add,unsigned char date)
{
STB=0;
WriteByte(0x00|add);
WriteByte(date);
STB=1;
}
void TM1638(void)//³õʼ»¯
{
unsigned char i;
cmd(0x8f);
cmd(0x40);
STB=0;
WriteByte(0xc0);
for(i=0;i<16;i++)
{
WriteByte(0x00);
}
STB=1;
}
unsigned char ReadByte(void)
{
unsigned char i;
unsigned char temp=0;
for(i=0;i<8;i++)
{
temp>>=1;
CLK=0;
if(DIO==1)
temp |=0x80;;
CLK=1;
}
return temp;
}
unsigned char ReadKey(void)
{
unsigned char d[4],i,temp=0;
STB=0;
WriteByte(0x42);
for(i=0;i<4;i++)
{
d[i]=ReadByte();
}
STB=1;
for(i=0;i<4;i++)
{
temp |=(d[i]<<i); //ºÏ²¢K3
}
for(i=0;i<8;i++)
{
if((0x01<<i)==temp)
{
break;
}
return i;
}
}
main()
{
unsigned char k,i;
TM1638();
for(i=0;i<16;i++)
{
WriteDate(i,0x00);
}
while(1)
{
k=ReadKey();
WriteDate(0xc0+2*k,DuanMa[k]);
WriteDate(0xc0+2*k+1,1);
}
}
void DelayUs(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(--t)
{
DelayUs(245);
DelayUs(245);
}
}