液晶TM1622 HT1622驱动调试"/>
stm32 MCU液晶TM1622 HT1622驱动调试
本文使用的例程软件工程代码如下
(1条消息) stm32MCU液晶TM1622HT1622驱动调试,源代码,实际项目使用资源-CSDN文库
HT1622/HT1622G/TM1622是一款常用的LCD驱动芯片
TM1622/HT1622厂家不一样,但是芯片功能基本上一直,硬件上基本上可以做到pin2pin兼容,这个需要根据自己的做微调整
以TM1622的资料为例,做如下说明
TM1622是256点内存映象和多功能的LCD驱动专用芯片,TM1622的软件配置特性使它适用于多种LCD应用 场合,包括:LCD模块和显示子系统。用于连接主控制器和TM1622的管脚只有4或5条,TM1622还有一个节电命 令用于降低系统功耗。本产品性能优良、质量可靠。
功能特点
工作电压2.4~ 5.2V
内置32 KHz RC振荡器
可外接32KHz频率源作为时钟输入
内置时基频率源
内置蜂鸣器输出驱动,有两种输出频率可选(2 KHz或者4 KHz)
内置节电模式,可用于减少功耗
内置时基发生器和看门狗(WDT)输出
内置32ⅹ8位显示寄存器,32个SEG,8个COM输出驱动, 1/4偏压
四线串行接口 提供VLCD管脚用于调整LCD操作电压
三种数据访问模式
八个时基/看门狗定时器时钟源
数据模式和命令模式指令
四种封装形式可选:LQFP44(长脚),LQFP44(短脚),LQFP52,LQFP64 内部结构框图
MCU典型接法
写数据时序图,这里不需要读取,也不用看读数据的时序
软件命令列表
需要详细的,手册,可以下载一份数据手册看看
实际项目原理图设计如下
这里有点复杂,就是要支持两款液晶,一个大液晶一个小液晶,其中YJ1是焊接大液晶的接口,YJ2是焊接小液晶的接口
下图1处,是液晶的背光灯开关
2处是MCU控制液晶的接口,其中SPI_RD用0欧姆的电阻连接,可以考虑不需要读取也液晶数据,可以不焊接该电阻,空余出来一个MCU的管脚
3处是电平转换后的TM1622的控制管脚
MCU的控制管脚设计如下
实际项目使用的控制管脚设计比较多,这里比较简单,提取出来对应TM1622的控制管脚
对应上述原理图,软件实现的控制管脚接口,如下所示
#define LCD_CS_L {PBout(7) = 0;}
#define LCD_CS_H {PBout(7) = 1;}#define LCD_RD_L {PBout(6) = 0;}
#define LCD_RD_H {PBout(6) = 1;} #define LCD_WR_L {PBout(8) = 0;}
#define LCD_WR_H {PBout(8) = 1;} #define LCD_DAT_L {PBout(9) = 0;}
#define LCD_DAT_H {PBout(9) = 1;} #define LCD_BLK_EN_ON {PBout(13) = 0;}
#define LCD_BLK_EN_OFF {PBout(13) = 1;}
stm32cube的关键设计如下
IO的配置,PB6/PB7/PB8/PB9/PB13配置为输出模式
其中需要注意的是,PB6连接的tm1622的数据读取管脚,这个管脚实际上没有使用,配置成输入输出都无所谓
时钟的配置
时钟采用外部时钟8M,倍频到72M供系统使用
系统主函数,主要是添加了initHT1622()测试
/*** @brief The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */initHT1622();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
TM1622的写函数,这些函数是根据手册写时序图调试出来的
当然也和MCU的时钟有关,这里配置为72MHZ,如果需要移植该驱动,则需要根据自己的系统时钟修改如下函数的延时,当然也需要修改控制管脚
void Write_HT1622_Byte(unsigned char Data,unsigned char length)
{unsigned char i,Temp=0x80;for (i=0;i<length;i++){if (Data&Temp){LCD_DAT_H;//数据线置1}else{LCD_DAT_L;//数据线置0}Temp>>=1; //准备下一位LCD_WR_L; //“写”时钟置0 __NOP();__NOP();__NOP();LCD_WR_H; //“写”时钟置1}
}
液晶初始化
void initHT1622(void)
{uint8_t i;//InitLcdPin();// for(i = 0 ;i < 100; i++){Write_HT1622_Command(SYSDIS);//关闭系统振荡器和LCD驱动Write_HT1622_Command(SYSEN); //打开系统振荡器Write_HT1622_Command(LCDOFF);//关闭LCD显示Write_HT1622_Command(LCDON); //打开LCD显示}//Write_HT1622_Command(0x01);// Write_HT1622_Command(0x29);//Write_HT1622_Command(0x18);//Write_HT1622_Command(0x01);//Write_HT1622_Command(0x03);//清屏for(i = 0; i < 64; i++){Write_HT1622_Data(i,0);}}
本文使用的例程软件工程代码如下
(1条消息) stm32MCU液晶TM1622HT1622驱动调试,源代码,实际项目使用资源-CSDN文库
更多推荐
stm32 MCU液晶TM1622 HT1622驱动调试
发布评论