unsigned char TM1638_Read(void) //读数据函数
{
unsigned char i;
unsigned char temp=0;
DIO_1; //设置为输入
for(i=0;i<8;i++)
{
temp>>=1;
CLK_0;
//CLK上升沿读数据才有效
if(DIO_IN)
temp|=0x80;
CLK_1;
}
return temp;
}
u8 TM1638_ReadKey(void)
{
u8 key=0,i,key_val[4]; // c[4] 4Byte数据储存
STB_0; // 拉低片选线,开始读键值
TM1638_Write(0x42); // 写'读键扫数据'命令
delay_us(10); //等待准备完毕
for(i=0;i<4;i++) // 读取4个Byte
key_val[i]=TM1638_Read(); // 将读取的4个Byte 值存到数组
STB_1; // 拉高片选线,读键值结束
if(key_val[0]!=0) //按键在KS1或KS2
{
/*************************************************************************
B0 B1 B2 B3 B4 B5 B6 B7
K3(S1) K2(S1) K1(S1) (X) K3(S2) K2(S2) K1(S2) (X)
从芯片读出的一字节数据有位,6位数据有效,其余2位用X表示
*************************************************************************/
switch(key_val[0])
{
case 0x01:
key=K3S1;
break;
case 0x02:
key=K2S1;
break;
case 0x04:
key=K1S1;
break;
case 0x10:
key=K3S2;
break;
case 0x20:
key=K2S2;
break;
case 0x40:
key=K1S2;
break;
}
}
}