求助 TM1638不能读回按键值

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值