⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_driver.c

📁 msp430+dypme007
💻 C
字号:
//By LINZH_BME_SEU

//头文件
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"

//宏

#define	SetCS 	GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_0,GPIO_PIN_0)
#define	SetSID	GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_3,GPIO_PIN_3)
#define	SetCLK	GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_2,GPIO_PIN_2)

#define	ClrCS 	GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_0,0)
#define	ClrSID 	GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_3,0)
#define	ClrCLK	GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_2,0)


//宏 指令

#define LCD_CLR		0x01	//Clear
#define LCD_HOME		0x02	//地址归位
#define LCD_MODE		0x04	//指定在资料的读取与写入时,设定游标移动方向(Inc/Dec)及指定显示的移位(Shift)
				// 0 0 0 0 0 I/D S
#define LCD_ON		0x08	//显示状态开关( 0 0 0 0 1 D C B) (D整体显示;C=1游标;B=1游标位置)
#define LCD_OFF		0x08	//同上
#define LCD_CUR		0x10	//游标或显示移位控制(0 0 0 1 S/C R/L X X)
#define LCD_IF		0x20	//功能设定(0 0 1 DL X RE X X) DL必须为 1 ,RE为扩充指令集
#define LCD_CGADDR	0x40	//设定CGRAM地址到地址计数器 0 1 AC(6)
#define LCD_DDADDR	0x80	//设定DDRAM地址到地址计数器 1 AC(7)

#define LCD_SH		0x01	//LCD_MODE的设定     
#define LCD_ID		0x02

#define LCD_BLINK	0x01	//LCD_ON/OFF的设定
#define LCD_CURSOR	0x02
#define LCD_DIS		0x04 

#define LCD_RL		0x04	//LCD_CURSE的设定
#define LCD_SC		0x08

#define LCD_RE		0x04	//LCD_IF的设定
#define LCD_DL		0x10

#define LCD_BUSY		0x80	//Flag(Busy)

//函数

void LcdWriteWord(unsigned char *str) ;  		//写字符
void LcdWriteTest(unsigned char start,unsigned char ddata);  	//(0,指令) (1,数据)
void LcdWriteByte(unsigned char bbyte);  		//写一个字节
void LcdDelay(unsigned int di);  		//延时
void LcdInit(void); 				//初始化
void LcdClear(void);  				//清屏
void LcdPst(unsigned int xx,unsigned int yy);	//设定位置(8×4)

//初始化
void LcdInit(void) 
 {
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
	GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_0);
  	GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_3);
  	GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_2);
	//GPIOPadConfigSet(GPIO_PORTA_BASE,GPIO_PIN_0,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);
        //GPIOPadConfigSet(GPIO_PORTA_BASE,GPIO_PIN_2,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);
	//GPIOPadConfigSet(GPIO_PORTA_BASE,GPIO_PIN_3,GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);

	LcdDelay(10); 			//启动等待,等LCM讲入工作状态
	LcdWriteTest(0x00,LCD_IF|LCD_DL);  	//8 位介面,基本指令集
        LcdDelay(10);
	LcdWriteTest(0x00,LCD_ON|LCD_DIS);  	//显示打开,光标关,反白关
        LcdDelay(10);
	LcdWriteTest(0x00,LCD_CLR); 	 	//清屏,将DDRAM的地址计数器归零
        LcdDelay(10);
}

//发送一个字节

void LcdWriteByte(unsigned char bbyte)
{
	unsigned char i;
        unsigned char x;
	for(i=0;i<8;i++)
	{
		x=bbyte&0x80;
                if(x==0x80) SetSID;
                if(x==0x00) ClrSID;
		ClrCLK;
                LcdDelay(4);
		SetCLK;
                LcdDelay(4);
		bbyte<<=1; //左移
	} 
}

//发送一个字符串
void LcdWriteWord(unsigned char *str)
{
	while(*str != '\0')
	{
		LcdWriteTest(0x01,*str);
		*str++;
       	 }
	*str = 0;
}

//写指令或数据  (0,指令) (1,数据)

void LcdWriteTest(unsigned char start, unsigned char ddata)
{
	unsigned char start_data,Hdata,Ldata;
	SetCS;
	if(start==0x00) start_data=0xf8;  //0:写指令
	else start_data=0xfa;  //1:写数据
 
	Hdata=ddata&0xf0;    //取高四位
	Ldata=(ddata<<4)&0xf0;  //取低四位

	LcdWriteByte(start_data);   //发送起始信号	
   	LcdWriteByte(Hdata);       //发送高四位
	LcdWriteByte(Ldata);    //发送低四位
        ClrCS;
}

//延时

void LcdDelay(unsigned int di)
{
	unsigned int da,db;
	for(da=0;da<di;da++)
	for(db=0;db<100;db++);
}

//清屏函数

void LcdClear(void)
{
	LcdWriteTest(0x00,LCD_CLR);
}

//设定位置

void LcdPst(unsigned int xx,unsigned int yy)	
{
	unsigned int line;
	LcdWriteTest(0x00,LCD_IF|LCD_DL); //基本指令集
	switch(yy)
	{
 		case 0:line=0x00;break;
		case 1:line=0x10;break;
		case 2:line=0x08;break;
		case 3:line=0x18;break;
	}
	LcdWriteTest(0x00,LCD_DDADDR+line+xx);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -