STM32
直播中

goodmbby

9年用户 1259经验值
擅长:处理器/DSP
私信 关注
[问答]

用stm8驱动tm1638无法读取键值的原因?如何解决?

键值读取部分的驱动程序如下
int8_t Read_Byte(){
        uint8_t i=0;
        uint8_t temp=0x00;
        Reset(STB);
        for(i=0;i<8;i++){
                Reset(CLK1);
                temp>>=1;
                if(Get(DIO)){
                        temp|=0x80;
                }
                Set(CLK1);
        }
        return temp;
}
int8_t Read_Key(){

        uint8_t i=0;
        uint8_t key1=0x00;
        uint16_t key2=0x00;
        Write_Cmd(0x42);
        Set(DIO);   //this is obligatory, check the data sheet,GPIO
        for(i=0;i<4;i++){
                key1=Read_Byte();
                key2|=(key1<>=1;
        for(i=0;i<8;i++){
                if(0x01<

回帖(1)

卢表镜

2024-5-10 16:43:08
STM8驱动TM1638无法读取键值的原因可能有以下几点:

1. 接线问题:请检查STM8与TM1638之间的连接线是否正确连接,包括数据线(DIO)、时钟线(CLK)和控制线(STB)。

2. 引脚配置问题:确保STM8的相应引脚已正确配置为输入/输出模式。

3. 驱动程序问题:检查驱动程序中的时序和逻辑是否正确。以下是对您提供的驱动程序的一些建议:

```c
int8_t Read_Byte(){
    uint8_t i = 0;
    uint8_t temp = 0x00;
    Reset(STB); // 确保STB为低电平,准备开始通信
    for(i = 0; i < 8; i++){
        Reset(CLK1); // 确保CLK为低电平,准备读取数据
        temp >>= 1; // 将temp右移一位,为接收新数据做准备
        Set(CLK1); // 将CLK设置为高电平,允许TM1638发送数据
        if(Read_DIO()){ // 读取DIO线上的数据
            temp |= 0x80; // 如果DIO为高电平,将最高位设置为1
        }
        Reset(CLK1); // 将CLK设置为低电平,准备下一次读取
    }
    Set(STB); // 通信结束,将STB设置为高电平
    return (int8_t)temp; // 返回读取到的数据
}
```

4. TM1638模块问题:如果以上步骤都无法解决问题,可能是TM1638模块本身存在问题。尝试使用另一个已知良好的TM1638模块进行测试。

5. 电源问题:确保STM8和TM1638模块的供电电压和电流符合要求。

6. 干扰问题:检查周围是否有可能产生电磁干扰的设备,如手机、无线路由器等。尝试将这些设备远离STM8和TM1638模块。

通过以上步骤,您应该能够找到导致STM8无法读取TM1638键值的原因,并采取相应的解决措施。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分