LCD12864显示

it2022-05-05  93

msp430f5529控制LCD12864显示

一、LCD12864主要参数

1、工作电压(VDD):3.3或5.5V(只支持一种电压) 2、逻辑电平:2.7~5.5V 3、LCD 驱动电压(Vo):0~7V 4、工作温度(TOP):0~55℃(常温)/-20~70℃(宽温) 保存温度(TST):-10~65℃(常温)/-30~80℃(宽温)

二、管脚图

1 VSS - 模块的电源地 2 VDD - 模块的电源正端   3 V0 - LCD驱动电压输入端   4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号   5 R/W(SID) H/L 并行的读写选择信号;串行的数据口   6 E(CLK) H/L 并行的使能信号;串行的同步时钟   7 DB0 H/L 数据0   8 DB1 H/L 数据1   9 DB2 H/L 数据2   10 DB3 H/L 数据3   11 DB4 H/L 数据4   12 DB5 H/L 数据5   13 DB6 H/L 数据6   14 DB7 H/L 数据7   15 PSB H/L 并/串行接口选择:H-并行;L-串行   16 NC 空脚   17 /RET H/L 复位 低电平有效   18 NC 空   19 LED_A (LED+5V) 背光源正极   20 LED_K (LED-OV)背光源和负极

三、代码实现

#include "io430.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 P10 0 #define P11 1 #define P12 2 #define P13 3 #define P14 4 #define P15 5 #define P16 6 #define P17 7 #define RS_CLR P1OUT &= ~(1 << P13) //RS置低 #define RS_SET P1OUT |= (1 << P13) //RS置高 #define RW_CLR P1OUT &= ~(1 << P14) //RW置低 #define RW_SET P1OUT |= (1 << P14) //RW置高 #define EN_CLR P1OUT &= ~(1 << P15) //E置低 #define EN_SET P1OUT |= (1 << P15) //E置高 #define PSB_CLR P6OUT &= ~(1 << P11) //PSB置低,串口方式 #define PSB_SET P6OUT |= (1 << P11) //PSB置高,并口方式 #define RST_CLR P6OUT &= ~(1 << P12) //RST置低 #define RST_SET P6OUT |= (1 << P12) //RST置高 #define DataPort P3OUT //P3口为数据口 //************************************************************************* // 系统时钟初始化 //************************************************************************* void Clock_Init() { // uchar i; // BCSCTL1&=~XT2OFF; //打开XT振荡器 // BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ // do{ // IFG1&=~OFIFG; //清除震荡标志 // for(i=0;i<100;i++) // _NOP(); //延时等待 // } // while((IFG1&OFIFG)!=0); //如果标志为1,则继续循环等待 // IFG1&=~OFIFG; } //************************************************************************* // MSP430内部看门狗初始化 //************************************************************************* void WDT_Init() { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 } //************************************************************************* // 初始化IO口子程序 //************************************************************************* void Port_init() { P3SEL = 0x00; P3DIR = 0xFF; P1SEL = 0x00; P1DIR|= BIT3 + BIT4 + BIT5; P6SEL = 0x00; P6DIR|= BIT1 + BIT2; PSB_SET; //液晶并口方式 RST_SET; //复位脚RST置高 } //*********************************************************************** // 显示屏命令写入函数 //*********************************************************************** 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(0x90,"┃R=    Ω┃");//二 DisplayCgrom(0x88,"┃阻值测量仪 ┃");//三 DisplayCgrom(0x98,"┗━━━━━━┛");//四 } //*********************************************************************** // 显示屏初始化函数 //*********************************************************************** 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) { LCD_write_com(0x98); Display(); //显示汉字 } //return 0; }

最新回复(0)