stm32f103驱动12232液晶不显示问题记录

使用stm32f103驱动12232液晶不显示,测试各个引脚高低电平均可正常输出,根据时序图编写程序,怎么调节延时都不行,数据口是通过74HCT245驱动,单片机出来接了下拉电阻到74HCT245,下拉电阻去掉就好了,具体原因不明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
驱动GT12232液晶,你需要连接以下引脚: 液晶引脚 | STM32F103引脚 ------------ | ------------- VSS | GND VDD | 5V V0 | 通过一个电位器连接到GND和5V之间,用于控制液晶对比度 RS | PA6 RW | PA7 E | PA5 DB0 | 不接 DB1 | 不接 DB2 | 不接 DB3 | 不接 DB4 | PA0 DB5 | PA1 DB6 | PA2 DB7 | PA3 CS1 | PB0 CS2 | PB1 RST | PB10 其中,CS1和CS2可以分别控制左右两个区域的显示。 以下是一个简单的GT12232液晶驱动程序的示例代码: ```c #include "stm32f10x.h" #define RS_PIN GPIO_Pin_6 #define RW_PIN GPIO_Pin_7 #define E_PIN GPIO_Pin_5 #define DB4_PIN GPIO_Pin_0 #define DB5_PIN GPIO_Pin_1 #define DB6_PIN GPIO_Pin_2 #define DB7_PIN GPIO_Pin_3 #define CS1_PIN GPIO_Pin_0 #define CS2_PIN GPIO_Pin_1 #define RST_PIN GPIO_Pin_10 void GT12232_Init(void); void GT12232_WriteCommand(uint8_t cmd); void GT12232_WriteData(uint8_t data); void GT12232_SetPos(uint8_t x, uint8_t y); void GT12232_Clear(void); void GT12232_PrintChar(char c); void GT12232_PrintString(char *str); int main(void) { GT12232_Init(); GT12232_PrintString("Hello, GT12232!"); while (1) { } } void GT12232_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); // 数据线和控制线设置为输出模式 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Pin = RS_PIN | RW_PIN | E_PIN | DB4_PIN | DB5_PIN | DB6_PIN | DB7_PIN; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = CS1_PIN | CS2_PIN | RST_PIN; GPIO_Init(GPIOB, &GPIO_InitStruct); // 初始化液晶 GPIO_SetBits(GPIOB, RST_PIN); GPIO_ResetBits(GPIOA, RS_PIN | RW_PIN | E_PIN | DB4_PIN | DB5_PIN | DB6_PIN | DB7_PIN); GPIO_ResetBits(GPIOB, CS1_PIN | CS2_PIN); // 等待液晶准备就绪 delay_ms(20); // 先使能右半部分区域,写入初始化命令 GPIO_ResetBits(GPIOB, CS2_PIN); GT12232_WriteCommand(0x30); GT12232_WriteCommand(0x0C); GT12232_WriteCommand(0x01); GT12232_WriteCommand(0x06); GT12232_WriteCommand(0x02); GT12232_WriteCommand(0x01); delay_ms(5); // 再使能左半部分区域,写入初始化命令 GPIO_ResetBits(GPIOB, CS1_PIN); GT12232_WriteCommand(0x30); GT12232_WriteCommand(0x0C); GT12232_WriteCommand(0x01); GT12232_WriteCommand(0x06); GT12232_WriteCommand(0x02); GT12232_WriteCommand(0x01); delay_ms(5); // 清屏 GT12232_Clear(); } void GT12232_WriteCommand(uint8_t cmd) { GPIO_ResetBits(GPIOA, RS_PIN | RW_PIN); GPIO_Write(GPIOA, (cmd & 0xF0) | 0x04); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); delay_us(1); GPIO_SetBits(GPIOA, E_PIN); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); delay_us(1); GPIO_Write(GPIOA, (cmd << 4) | 0x04); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); delay_us(1); GPIO_SetBits(GPIOA, E_PIN); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); } void GT12232_WriteData(uint8_t data) { GPIO_SetBits(GPIOA, RS_PIN); GPIO_ResetBits(GPIOA, RW_PIN); GPIO_Write(GPIOA, (data & 0xF0) | 0x04); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); delay_us(1); GPIO_SetBits(GPIOA, E_PIN); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); delay_us(1); GPIO_Write(GPIOA, (data << 4) | 0x04); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); delay_us(1); GPIO_SetBits(GPIOA, E_PIN); delay_us(1); GPIO_ResetBits(GPIOA, E_PIN); } void GT12232_SetPos(uint8_t x, uint8_t y) { if (x < 64) { GPIO_ResetBits(GPIOB, CS1_PIN); GPIO_SetBits(GPIOB, CS2_PIN); GT12232_WriteCommand(0x80 | (y % 16)); GT12232_WriteCommand(0x80 | x); } else { GPIO_SetBits(GPIOB, CS1_PIN); GPIO_ResetBits(GPIOB, CS2_PIN); GT12232_WriteCommand(0x80 | (y % 16)); GT12232_WriteCommand(0x80 | (x - 64)); } } void GT12232_Clear(void) { uint8_t i, j; for (i = 0; i < 8; i++) { GT12232_SetPos(0, i); for (j = 0; j < 64; j++) { GT12232_WriteData(0x00); } } } void GT12232_PrintChar(char c) { uint8_t i; for (i = 0; i < 8; i++) { GT12232_WriteData(Font_8x8[(c - 32) * 8 + i]); } } void GT12232_PrintString(char *str) { while (*str) { GT12232_PrintChar(*str++); } } ``` 其中,`Font_8x8`是一个8x8的ASCII字体数组,你可以在网上找到,或者自己制作。在 `GT12232_Init()` 函数中,我们通过一系列的初始化命令来设置液晶的工作模式、光标移动方向、光标闪烁等。在 `GT12232_PrintChar()` 和 `GT12232_PrintString()` 函数中,我们通过 `Font_8x8` 数组来输出字符。 这只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值