找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1707|回复: 1
收起左侧

关于单片机4线硬件spi控制tm1638读取按键数据

[复制链接]
ID:554500 发表于 2022-11-10 20:57 | 显示全部楼层 |阅读模式
我用stc8h单片机硬件spi控制tm1638。 单片机的MISO和MOSI短接后连接到tm1638的DIO数据端。
能够正常显示。但是读取按键数据不正常,有时候能读到,有时候读不到。
请问,4线spi怎么转成3线spi?  电路怎么连接?

单片机源程序如下:
void TM1638_Delay()
{
        u8 i;

        i = 20;
        while (--i);
}

//发送数据并接收数据
u8 TM1638_sendbyte(u8 byte)
{
        return SPI_sendbyte(byte);                                 
}


//发送命令
void TM1638_sendcmd(u8 cmd)
{
                        TM1638_CS_L;
                        TM1638_sendbyte(cmd);
            TM1638_CS_H;
}

//指定地址写入 数据
void TM1638_writedata(u8 add,u8 dat)
{
          TM1638_sendcmd(0x44);        //写数据到寄存器,固定地址模式
          TM1638_CS_L;
          TM1638_sendbyte(0xc0|add);        //设置起始地址
          TM1638_sendbyte(dat);                                //写入数据
          TM1638_CS_H;
}

//读取按键扫描的4个字节
void TM1638_ReadKeyDat(u8 *dat)
{
        u8 i;
        TM1638_CS_L;
        TM1638_sendbyte(0x42);          //读键扫数据命令
        for(i=0;i<4;i++)        
        {        
                dat[ i]=TM1638_sendbyte(0xFF);
                TM1638_Delay();
        }
        TM1638_CS_H;                                          

}

评分

参与人数 1黑币 +15 收起 理由
wpppmlah + 15 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:624769 发表于 2022-11-10 22:40 | 显示全部楼层
简单跟你说明一下。
1, TM1638 是 MicroWire 不是SPI, 虽然很像SPI。
所以,正确的连接方式,应该是用串口,外加一个IO 作STB的  连接模式
2,就算要用 SPI 来驱动, 应当选择支持 半双工模式SPI的 MCU, (如:CH55x 系列单片机),而不适合使用只支持全双工SPI的单片机。
3,如果实在要用  只能全双工模式  工作的 SPI, MOSI  和 MISO 不能直接简单的 并联,应当  MISO 直接连器件的 DIO,  而 DIO 和 MOSI 之间 应该用 二极管连接  MOSI 端接二极管 负极。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表