OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 856|回复: 1

HT1622驱动断码屏,屏幕亮一会儿会黑屏

[复制链接]

3

主题

3

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2022-4-9
在线时间
5 小时
发表于 2024-9-23 10:30:24 | 显示全部楼层 |阅读模式

使用HT1622驱动断码屏,屏幕亮一会儿会黑屏,有大佬遇到过吗,使用的是PY32单片机,48MHZ频率,驱动代码如下
static uint8_t NumData[] = {0xEE, 0x48, 0xD6, 0xDA, 0x78, 0xBA, 0xBE, 0xC8, 0xFE, 0xFA};
static uint8_t _NumData[] = {0x77, 0x012, 0x6B, 0x5B, 0x1E, 0x5D, 0x7D, 0x13, 0x7F, 0x5F};


/**
***********************************************************
* @brief 屏幕控制引脚初始化
* @param
* @return
***********************************************************
*/
void GpioInitHT1622(void)
{

    GPIO_InitTypeDef  GPIO_InitStruct = {0};


    __HAL_RCC_GPIOB_CLK_ENABLE();     /* Enable GPIOA clock */


    //HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_7 | GPIO_PIN_6;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;            /* Push-pull output */
    GPIO_InitStruct.Pull = GPIO_PULLUP;                    /* Enable pull-up */
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;         /* GPIO speed */

    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);                /* GPIO initialization */
    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7
                      , GPIO_PIN_RESET);

}


/**
***********************************************************
* @brief 屏幕背光控制引脚初始化
* @param
* @return
***********************************************************
*/
void GpioInitBackLight(void)
{

    GPIO_InitTypeDef  GPIO_InitStruct = {0};

    __HAL_RCC_GPIOF_CLK_ENABLE();
    /* Initialize GPIO PA11 */
    GPIO_InitStruct.Pin = GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;            /* Push-pull output */
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;                    /* Enable pull-up */
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;     /* GPIO speed */

    /* GPIO initialization */
    HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_SET);
}


/**
***********************************************************
* @brief 关闭屏幕背光
* @param
* @return
***********************************************************
*/
void BacklightOff(void)
{
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_SET);
}


/**
***********************************************************
* @brief 打开屏幕背光
* @param
* @return
***********************************************************
*/
void BacklightOn(void)
{
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_3, GPIO_PIN_RESET);
}



/**
***********************************************************
* @brief HT1622 底层驱动
* @param Data 数据 Length 数据长度
* @return
***********************************************************
*/
void Write_HT1622_Byte1(uint8_t Data, uint8_t length)
{
     uint8_t i, Temp = 0x01;
    for (i = 0; i < length; i++)
    {
                 __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        LCD_WR_L;
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        if (Data & Temp)
        {
            LCD_DAT_H;//数据线置1
        }
        else
        {
            LCD_DAT_L;//数据线置0
        }
        Temp <<= 1; //准备下一位
        __NOP();
        __NOP();     
        __NOP();
        __NOP();
        __NOP();
        LCD_WR_H; //“写”时钟置1
                 __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
    }
}


/**
***********************************************************
* @brief HT1622写入数据函数
* @param Address 写数据地址 Data 数据
* @return
***********************************************************
*/
void Write_HT1622_Byte(uint8_t Data, uint8_t length)
{
    uint8_t i, Temp = 0x80;
    for (i = 0; i < length; i++)
    {
                 __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        //“写”时钟置0
        LCD_WR_L;      
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        if (Data & Temp)
        {
            LCD_DAT_H;//数据线置1
        }
        else
        {
            LCD_DAT_L;//数据线置0
        }
        Temp >>= 1; //准备下一位      
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();
        LCD_WR_H; //“写”时钟置1
                __NOP();
        __NOP();
        __NOP();
        __NOP();
        __NOP();

    }
}

/**
***********************************************************
* @brief HT1622写入数据函数
* @param  Address 写数据地址 Data 数据
* @return
***********************************************************
*/
void Write_HT1622_Data(uint8_t  Address, uint8_t Data)
{
    uint8_t Addr;
    if (Address == 0) // 如果 Address 为 0,返回或者执行其他适当操作
    {
        return; // 不执行任何操作
    }
    LCD_CS_L; //片选置0
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    Addr = (Address - 1) * 2;
    Addr <<= 2;                 //将实际地址挪到高位
    Write_HT1622_Byte(0xA0, 3); //写入写数据的ID 101 高3位有效
    Write_HT1622_Byte(Addr, 6); //写入6个位初始地址 高6位有效
    Write_HT1622_Byte1(Data, 8); //写入8个位数据
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    LCD_CS_H; //片选置1

}

/**
***********************************************************
* @brief HT1622写命令函数
* @param  Command 命令
* @return
***********************************************************
*/
void Write_HT1622_Command(uint8_t Command)
{
    LCD_CS_L; //片选置0
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    Write_HT1622_Byte(0x80, 3); //写入命令的ID:100
    Write_HT1622_Byte(Command, 8); //写入实际命令的高8位(CMD.):C8-C1
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    LCD_WR_L; //|
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    LCD_DAT_L; //|写入一个“1”即手册上所指“无关位”的那一个数据位
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    LCD_WR_H; //|
        __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    LCD_CS_H; //片选置1
}


/**
***********************************************************
* @brief 清屏
* @param
* @return
***********************************************************
*/
void Dispay_Clear(void)
{

    uint8_t i;
    for (i = 0; i <= 65; i++)
    {
        Write_HT1622_Data(i, 0x0);
    }

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

245

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1221
金钱
1221
注册时间
2014-11-25
在线时间
173 小时
发表于 2024-9-24 17:06:58 | 显示全部楼层
单步调试下,看到哪一步黑屏的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 07:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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