我用msp430f5529launchpad 在12864(型号为QC12864B)液晶显示汉字等内容时,发现完全没有显示,而且PSB脚一旦接入单片机的I/O口,芯片会很烫。rst接却不会。 其中RS RW E 分别接P2.7,P2.6,P2.5。P3为数据口,PSB直接连上+5V电压(此情况下芯片不发热),RST不接,Vout接+3.3V电压。
(之前这样接的时候有成功显示过,但某一次把线重新接后就没有显示了)
QC12864B引脚说明
2 VDD 电源正
3 V0 LCD对比度电压输入
4 RS
5 RW
6 E
7-14 DB0-DB7 数据口
15 PSB 串并接口 H-并行 L-串行
16 NC 空脚
17 rst 复位低电平有效
18 Vout Output LCD voltage
19 LEDA 背光源正 +5V
20 LEDK 背光源负 0V
- #include "msp430.h"
- #define CPU_F ((double)8000000)
- #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
- #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- /*12864应用指令*/
- #define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
- #define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
- #define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
- #define FUN_MODE 0x30 //工作模式:8位基本指令集
- #define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
- #define DISPLAY_OFF 0x08 //显示关
- #define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
- #define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
- #define SET_DD_AC 0x80
- #define RS_CLR P2OUT &= ~BIT7 //RS置低
- #define RS_SET P2OUT |= BIT7 //RS置高
- #define RW_CLR P2OUT &= ~BIT6 //RW置低
- #define RW_SET P2OUT |= BIT6 //RW置高
- #define EN_CLR P2OUT &= ~BIT5 //E置低
- #define EN_SET P2OUT |= BIT5 //E置高
- #define DataPort P3OUT //P3口为数据口
- //*************************************************************************
- // 系统时钟初始化
- //*************************************************************************
- void Clock_Init()
- {
- UCSCTL1 = DCORSEL_2; // 设置DCO范围
- UCSCTL3 |= SELREF_2; // 选择FLL参考源自REFO
- UCSCTL4 = SELM_3 + SELA_2 + SELS_4; // 配置 MCLK = DCOC,SMCLK =DCODIV,ACLK=REFO
- while (SFRIFG1 & OFIFG) // 清除 OFIFG,and XT1OFFG ,DCOFFG
- {
- UCSCTL7 &= ~( XT1LFOFFG + DCOFFG);
- SFRIFG1 &= ~OFIFG;
- }
- }
- //*************************************************************************
- // MSP430内部看门狗初始化
- //*************************************************************************
- void WDT_Init()
- {
- WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
- }
- //*************************************************************************
- // 初始化IO口子程序
- //*************************************************************************
- void Port_init()
- {
- P3SEL = 0x00;
- P3DIR = 0xFF;
- P2SEL = 0x00;
- P2DIR|= BIT5 + BIT6 + BIT7;
- }
- //***********************************************************************
- // 显示屏命令写入函数
- //***********************************************************************
- void LCD_write_com(unsigned char com)
- {
- RS_CLR;
- RW_CLR;
- EN_SET;
- DataPort = com;
- delay_ms(5);
- EN_CLR;
- }
- //***********************************************************************
- // 显示屏数据写入函数
- //***********************************************************************
- void LCD_write_data(unsigned char data)
- {
- RS_SET;
- RW_CLR;
- EN_SET;
- DataPort = data;
- delay_ms(5);
- EN_CLR;
- }
- //***********************************************************************
- // 显示屏清空显示
- //***********************************************************************
- void LCD_clear(void)
- {
- LCD_write_com(0x01);
- delay_ms(5);
- }
- //***********************************************************************
- //函数名称:DisplayCgrom(uchar hz)显示CGROM里的汉字
- //***********************************************************************
- void DisplayCgrom(uchar addr,uchar *hz)
- {
- LCD_write_com(addr);
- delay_ms(5);
- while(*hz != '\0')
- {
- LCD_write_data(*hz);
- hz++;
- delay_ms(5);
- }
- }
- //****************************************************************
- //函数名称:Display()显示测试结果
- //****************************************************************
- void Display(void)
- {
- DisplayCgrom(0x80,"测试程序");
- DisplayCgrom(0x88,"helloworld");
- DisplayCgrom(0x90,"helloworld");
- DisplayCgrom(0x98,"12344667");
- }
- //***********************************************************************
- // 显示屏初始化函数
- //***********************************************************************
- void LCD_init(void)
- {
- LCD_write_com(FUN_MODE); //显示模式设置
- delay_ms(5);
- LCD_write_com(FUN_MODE); //显示模式设置
- delay_ms(5);
- LCD_write_com(DISPLAY_ON); //显示开
- delay_ms(5);
- LCD_write_com(CLEAR_SCREEN); //清屏
- delay_ms(5);
- }
- //***********************************************************************
- // 主程序
- //***********************************************************************
- void main(void)
- {
- WDT_Init(); //看门狗设置
- Clock_Init(); //系统时钟设置
- Port_init(); //系统初始化,设置IO口属性
- delay_ms(100); //延时100ms
- LCD_init(); //液晶参数初始化设置
- LCD_clear(); //清屏
- while(1)
- {
- Display(); //显示汉字
- }
- }