新手上路 
 
	- 积分
 - 20
 
        - 金钱
 - 20 
 
       - 注册时间
 - 2022-4-9
 
      - 在线时间
 - 5 小时
 
 
 
 | 
 
 
使用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); 
    } 
 
} 
 
 |   
 
 
 
 |