历史上的今天
今天是:2025年02月15日(星期六)
2020年02月15日 | MSP430 12864显示
2020-02-15 来源:eefocus
/********************************************************************
//DM430开发板控制带字库型12864液晶模块显示测试程序
//显示模式为汉字模式,直接将12864插入12864接口即可
//注意选择液晶的电源,位于电位器附近,可选5V或3.3V,根据液晶电压进行选择
//调试环境:EW430 V5.30
//
********************************************************************/
#include #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 P3OUT &= ~(1 << P13) //RS置低 #define RS_SET P3OUT |= (1 << P13) //RS置高 #define RW_CLR P3OUT &= ~(1 << P16) //RW置低 #define RW_SET P3OUT |= (1 << P16) //RW置高 #define EN_CLR P3OUT &= ~(1 << P17) //E置低 #define EN_SET P3OUT |= (1 << P17) //E置高 #define PSB_CLR P5OUT &= ~(1 << P11) //PSB置低,串口方式 #define PSB_SET P5OUT |= (1 << P11) //PSB置高,并口方式 #define RST_CLR P5OUT &= ~(1 << P12) //RST置低 #define RST_SET P5OUT |= (1 << P12) //RST置高 #define DataPort P4OUT //P4口为数据口 //************************************************************************* // 系统时钟初始化 //************************************************************************* 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() { P4SEL = 0x00; P4DIR = 0xFF; P3SEL = 0x00; P3DIR|= BIT3 + BIT6 + BIT7; P5SEL = 0x00; P5DIR|= 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 != '




