打印
[STM32L4]

NUCLEO-L452RE驱动HG128642C(KS0108)

[复制链接]
1013|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lisingch|  楼主 | 2017-10-15 18:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        在论坛参加活动有幸获得一块NUCLEO-L452RE开发板,正好在隔壁论坛又弄了些清达光电采用KS0108兼容芯片的HG128642C图形液晶模块。以前玩过的12864液晶都是带字库的,而这个是不带字库的。这次用NUCLEO-L452RE开发板驱动还是第一次。

一、模块资料只有这张截图,另外还找了一份PDF(参附件)。该模块有22只引脚,其中的1、2脚经测试与17、18脚功能是一样的,这里用的是17、18脚。


二、工程是用STM32CubeMX建立的,在婚建好的工程中另外添加了lcd12864.c和lcd12864.h文件
1、STM32CubeMX中配置的引脚,时钟及其它均是默认的。



3、主要代码
/*配置LCD12864的控制端口*/
#define LCD_CS1(a)         if(a)\
                                                                                        HAL_GPIO_WritePin(LCD_CS1_GPIO_Port, LCD_CS1_Pin, GPIO_PIN_SET);\
                                                                                else \
                                                                                        HAL_GPIO_WritePin(LCD_CS1_GPIO_Port, LCD_CS1_Pin, GPIO_PIN_RESET);
#define LCD_CS2(a)         if(a)\
                                                                                        HAL_GPIO_WritePin(LCD_CS1_GPIO_Port, LCD_CS2_Pin, GPIO_PIN_SET);\
                                                                                else \
                                                                                        HAL_GPIO_WritePin(LCD_CS1_GPIO_Port, LCD_CS2_Pin, GPIO_PIN_RESET);
#define LCD_RS(a)         if(a)\
                                                                                        HAL_GPIO_WritePin(LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_PIN_SET);\
                                                                                else \
                                                                                        HAL_GPIO_WritePin(LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_PIN_RESET);
#define LCD_RW(a)         if(a)\
                                                                                        HAL_GPIO_WritePin(LCD_RW_GPIO_Port, LCD_RW_Pin, GPIO_PIN_SET);\
                                                                                else \
                                                                                        HAL_GPIO_WritePin(LCD_RW_GPIO_Port, LCD_RW_Pin, GPIO_PIN_RESET);       
#define LCD_EN(a)         if(a)\
                                                                                        HAL_GPIO_WritePin(LCD_EN_GPIO_Port, LCD_EN_Pin, GPIO_PIN_SET);\
                                                                                else \
                                                                                        HAL_GPIO_WritePin(LCD_EN_GPIO_Port, LCD_EN_Pin, GPIO_PIN_RESET);
#define LCD_RST(a)         if(a)\
                                                                                        HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_SET);\
                                                                                else \
                                                                                        HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_RESET);
/*向LCD端口送数据*/
void LCD12864_DATA_OUT(uint8_t data)
{
        GPIOC->ODR &= 0xff00;
        GPIOC->ODR |=data;
}
/** 写入左半屏指令 子程序**/
void Writecom1(uint8_t wcom)
{
    LCD_CS1(1);
    LCD_CS2(0);
    //Busy();
                delayus(180);
                LCD12864_DATA_OUT(wcom);
    LCD_RS(0);
    LCD_RW(0);
    LCD_EN(1);
    __NOP();
    LCD_EN(0);
    __NOP();
}


/** 写入左半屏数据 子程序***/
void Writedata1(uint8_t wdata)
{
    LCD_CS1(1);
    LCD_CS2(0);
    //Busy();
                delayus(180);
                LCD12864_DATA_OUT(wdata);
    LCD_RS(1);
    LCD_RW(0);
    LCD_EN(1);
    __NOP();
    LCD_EN(0);
    __NOP();
}


/** 写入右半屏指令 子程序**/
void Writecom2(uint8_t wcom)
{
    LCD_CS1(0);
    LCD_CS2(1);
    //Busy();
                delayus(180);
                LCD12864_DATA_OUT(wcom);;
    LCD_RS(0);
    LCD_RW(0);
    LCD_EN(1);
    __NOP();
    LCD_EN(0);
    __NOP();
}


/** 写入右半屏数据 子程序**/
void Writedata2(uint8_t wdata)
{
    LCD_CS1(0);
    LCD_CS2(1);
    //Busy();
                delayus(180);
                LCD12864_DATA_OUT(wdata);
    LCD_RS(1);
    LCD_RW(0);
    LCD_EN(1);
    __NOP();
    LCD_EN(0);
    __NOP();
}


/**  清屏子程序**/
void Clear(void)
{
    uint8_t i,j;
    for(i=0; i<8; i++)
    {
        Writecom1(0xb8 + i);
        Writecom1(0x40);
        Writecom2(0xb8 + i);
        Writecom2(0x40);
        for(j=0; j<64; j++)
        {
            Writedata1(0);
            Writedata2(0);
        }
    }
}
程序测试时没有加入“忙”检测,用延时代替了。

三、硬件连接和驱动测试效果。RST引脚可以直接接高电平;液晶模块的背光不能直接接+5V,随手拿了只1N4007串上了。






附件:
KS0108.pdf (427.25 KB)


沙发
lisingch|  楼主 | 2017-10-15 18:44 | 只看该作者
不知是什么问题?我这一直看不到图片。

使用特权

评论回复
板凳
airwill| | 2017-10-15 23:19 | 只看该作者
支持一下, 图片很正常啊
估计是浏览器问题, 屏蔽图片屏蔽广告方面的问题

使用特权

评论回复
地板
lisingch|  楼主 | 2017-10-16 10:02 | 只看该作者
airwill 发表于 2017-10-15 23:19
支持一下, 图片很正常啊
估计是浏览器问题, 屏蔽图片屏蔽广告方面的问题

现在看到了,估计是网络的问题。谢谢支持!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14978

帖子

17

粉丝