野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 83|回复: 0

我用stm32f103c8t6无论怎么与TM1650通信都没反应,能帮我看看吗

[复制链接]
发表于 2024-4-14 20:03:33 | 显示全部楼层 |阅读模式
本帖最后由 罗辑 于 2024-4-14 20:04 编辑


/*
*函数功能:TM1650初始化
*提    示:tm1650挂载4个按键,外部中断挂载两个按键
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void TM1650_Init(void)
{
    IIC_Init();

    delay_ms(20);

    TM1650_Wr_RAM(0x48,0x71);//7段显示
}

/*
*函数功能:挂载在tm1650上按键扫描
*提    示:无
*输入参数:
*输出参数:无
*返回值  :无
*/
static u8 KEYtm_Scan(void)
{
    u8 Temp = 0;

    /*读取按键值*/
    IIC_Start();
    IIC_Wr_Byte(0x4f);
    IIC_Wait_Ack();
    Temp = IIC_Rd_Byte();
    IIC_Ack();
    IIC_Stop();
        
        
        return Temp;
}

/*
*函数功能:按键扫描
*提    示:无
*输入参数:
*输出参数:无
*返回值  :u8:检测到的按价值
*/
u8 KEY_Read(void)
{
    u8 Temp = 0;

    if(KEY_EXTI != 0)
    {
        Temp = KEY_EXTI;
        KEY_EXTI = 0;
        return Temp;
    }

    Temp = KEYtm_Scan();
    if(Temp != 0)
    {
        return Temp;
    }

    return 0;
}




/*
*函数功能:TM1650通讯IIC初始化
*提    示:tm1650挂载4个按键,外部中断挂载两个按键
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void IIC_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /*IO初始化*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_OD;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /*空闲状态*/
    SCL_Set;
    SDA_Set;
}


/*
*函数功能:IIC起始
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void IIC_Start(void)
{
    SCL_Set;
//    delay_ms(IIC_uS);
    SDA_Set;
    delay_ms(IIC_uS);
    SDA_Reset;
    delay_ms(IIC_uS);
    SCL_Reset;
    delay_ms(IIC_uS);
}

/*
*函数功能:IIC结束
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void IIC_Stop(void)
{

    SCL_Reset;
    delay_ms(IIC_uS);
    SDA_Reset;
    delay_ms(IIC_uS);
    SCL_Set;
    delay_ms(IIC_uS);
    SDA_Set;
    delay_ms(IIC_uS);
}


/*
*函数功能:IIC响应
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void IIC_Ack(void)
{
    SCL_Reset;
    delay_ms(IIC_uS);
    SDA_Reset;
    delay_ms(IIC_uS);
    SCL_Set;
    delay_ms(3);
    SCL_Reset;
    delay_ms(IIC_uS);
}

/*
*函数功能:IIC非响应
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void IIC_NoAck(void)
{
    SCL_Reset;
    delay_ms(IIC_uS);
    SDA_Set;
    delay_ms(IIC_uS);
    SCL_Set;
    delay_ms(IIC_uS);
    SCL_Reset;
}


/*
*函数功能:IIC等待响应
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
#define Wait_uS 20
static u8 IIC_Wait_Ack(void)
{
    u8 uS = 0;
    SCL_Reset;
    delay_ms(IIC_uS);
    SDA_Set;
    delay_ms(IIC_uS);
    SCL_Set;
    delay_ms(IIC_uS);
    while(SDA_Read == 1)
    {
        delay_ms(10);
        uS++;
        if(uS >= Wait_uS)
        {
            IIC_Stop();
            delay_ms(IIC_uS);
            return 1;
        }
    }
    SCL_Reset;
    delay_ms(IIC_uS);
    return 0;
}

/*
*函数功能:IIC写字节
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void IIC_Wr_Byte(u8 Data)
{
    u8 i = 0;


    for(i = 0; i < 8; i++)
    {
        SCL_Reset;
        delay_ms(IIC_uS);

        if(Data >> 7)
        {
            SDA_Set;
        }
        else
        {
            SDA_Reset;
        }
        Data <<= 1;
        delay_ms(IIC_uS);

        SCL_Set;
        delay_ms(IIC_uS);
    }
    SCL_Reset;
    delay_ms(IIC_uS);
    SDA_Set;
    delay_ms(IIC_uS);
}

/*
*函数功能:IIC读字节
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
static u8 IIC_Rd_Byte(void)
{
    u8 i = 0;
    u8 Temp = 0;
        
        GPIO_InitTypeDef GPIO_InitStructure;

    /*IO初始化*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   
    SCL_Reset;
    delay_ms(IIC_uS);
    SDA_Set;
    delay_ms(IIC_uS);
    for(i = 0; i < 8; i++)
    {
        SCL_Reset;
        delay_ms(IIC_uS);
        Temp <<= 1;
        Temp += SDA_Read;
        SCL_Set;
        delay_ms(IIC_uS);
    }
    SCL_Reset;
    delay_ms(IIC_uS);
        
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_OD;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
        
        
    return Temp;
}


u8 ack=0;
/*
*函数功能:写显存
*提    示:
*输入参数:无
*输出参数:无
*返回值  :无
*/
static void TM1650_Wr_RAM(u8 Address, u8 Data)
{
    IIC_Start();
    IIC_Wr_Byte(Address);
    ack=IIC_Wait_Ack();
    IIC_Wr_Byte(Data);
    IIC_Wait_Ack();
    IIC_Stop();
}
屏幕截图 2024-04-14 194559.png
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-30 02:48 , Processed in 0.109399 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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