求助 TM1638不能读回按键值

发布于:2022-11-29 ⋅ 阅读:(301) ⋅ 点赞:(0)

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;
        }
    }

本文含有隐藏内容,请 开通VIP 后查看