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

📄 lcd12864s_430.c

📁 msp430驱动t6963c的12864的程序
💻 C
字号:
/**********************************************************/
//MSP430 Advanced Developping Components - [LCD12864S_430.C]
////->>> http://www.just430.cn
////->>> tel :(0)13130044096
/**********************************************************/
//MSP430高级实验开发组件 - LCD12864(字符型)液晶显示驱动
/*********************************************************/

#include <msp430x14x.h>

#define LCD_CS		BIT7			//LCD_CS -> P2.7
#define LCD_CS_DIR	P2DIR
#define LCD_CS_HI	P2OUT |= LCD_CS
#define LCD_CS_LO	P2OUT &= ~LCD_CS

#define LCD_DAT		BIT6			//LCD_DAT -> P2.6
#define LCD_DAT_DIR	P2DIR
#define LCD_DAT_IN	P2IN
#define LCD_DAT_HI	P2OUT |= LCD_DAT
#define LCD_DAT_LO	P2OUT &= ~LCD_DAT

#define LCD_CLK		BIT5			//LCD_CLK -> P2.5
#define LCD_CLK_DIR	P2DIR
#define LCD_CLK_HI	P2OUT |= LCD_CLK
#define LCD_CLK_LO	P2OUT &= ~LCD_CLK

#define LCD_PSB		BIT0			//LCD_PSB -> P6.0
#define LCD_PSB_DIR	P6DIR
#define LCD_PSB_HI	P6OUT |= LCD_PSB
#define LCD_PSB_LO	P6OUT &= ~LCD_PSB

#define	LCD_RST		BIT2			//LCD_RST -> P6.2
#define LCD_RST_DIR	P6DIR
#define LCD_RST_LO	P6OUT &= ~LCD_RST
#define LCD_RST_HI	P6OUT |= LCD_RST

void LCD_Init(void);
unsigned char CheckBusy(void);
void LCD_Delayt(unsigned int dtime);
void LCD_WriteComm(unsigned char wdata);
void LCD_WriteByte(unsigned char wdata);
void LCD_SetXY(unsigned char X,unsigned char Y);
void LCD_WriteDEC(unsigned char X,unsigned char Y,unsigned char Num);
void LCD_WriteString(unsigned char X,unsigned char Y,unsigned char *String);

unsigned char *aaa = "这是第一行吗?";

/*****************************************
void main(void) {	
  
	WDTCTL = WDTPW + WDTHOLD;
	
	LCD_Init();
	
	LCD_WriteDEC(1,2,20);
	
	while(1) {
		LCD_WriteString(1,1,aaa);
		LCD_Delayt(50000);LCD_Delayt(50000);LCD_Delayt(50000);LCD_Delayt(50000);
		LCD_WriteString(1,1,"这是第一行的!");
		LCD_Delayt(50000);LCD_Delayt(50000);LCD_Delayt(50000);LCD_Delayt(50000);
	}
}
*****************************************/

void LCD_Init(void) {  
  	LCD_RST_DIR |= LCD_RST;			//RST -> 复位输出
	LCD_RST_LO;				//复位状态
	
	LCD_PSB_DIR |= LCD_PSB;
	LCD_PSB_LO;

	LCD_CLK_DIR |= LCD_CLK;
	LCD_CLK_LO;

	LCD_DAT_DIR |= LCD_DAT;
	LCD_DAT_LO;

	LCD_CS_DIR |= LCD_CS;
	LCD_CS_LO;
	
	LCD_RST_HI;
	
	LCD_WriteComm(0x30);			//设定基本指令集
	LCD_WriteComm(0x01);			//清除显示
	LCD_WriteComm(0x02);			//地址归位
	LCD_WriteComm(0x0c);			//开显示状态
	LCD_WriteComm(0x03);
	LCD_WriteComm(0x06);			//进入设定点
}

void LCD_Delayt(unsigned int dtime) {
	unsigned int itemp;
	for(itemp=0;itemp<dtime;itemp++);
}

unsigned char CheckBusy(void) {
	unsigned char itemp;
	unsigned char Read = 0XFC;		//判断是否忙的指令
	unsigned char Read_H,Read_L;

	LCD_CS_LO;
	LCD_CLK_LO;
	LCD_DAT_LO;

	LCD_CS_HI;

	for(itemp=0;itemp<8;itemp++) {
		if((Read<<itemp) & BIT7)
			LCD_DAT_HI;
		else
			LCD_DAT_LO;
		LCD_CLK_HI;
		_NOP();
		LCD_CLK_LO;
	}
	
	LCD_DAT_DIR &= ~LCD_DAT;
	for(itemp=0;itemp<8;itemp++) {
		LCD_CLK_LO;
		LCD_CLK_HI;
		Read<<=1;
		if((LCD_DAT_IN&LCD_DAT) == LCD_DAT)
			Read |= BIT0;
		else
			Read &= ~BIT0;
	}
	Read_H = Read;
	for(itemp=0;itemp<8;itemp++) {
		LCD_CLK_LO;
		LCD_CLK_HI;
		Read<<=1;
		if((LCD_DAT_IN&LCD_DAT) == LCD_DAT)
			Read |= BIT0;
		else
			Read &= ~BIT0;
	}

	LCD_CS_LO;
	
	LCD_DAT_DIR |= LCD_DAT;
	LCD_DAT_LO;
	
	Read_L = Read>>4;
	Read = Read_H|Read_L;
	return(Read);
}

void LCD_WriteComm(unsigned char wdata) {
	unsigned char itemp;
	unsigned char jtemp=0xf8;
	
	do {
		itemp = CheckBusy();  
	}while(itemp&0x80);
	
	LCD_CS_LO;
	LCD_CLK_LO;
	LCD_DAT_LO;
	
	LCD_CS_HI;

	for(itemp=0;itemp<8;itemp++) {
		if((jtemp<<itemp) & BIT7)
			LCD_DAT_HI;
		else
			LCD_DAT_LO;
		LCD_CLK_HI;
		_NOP();
		LCD_CLK_LO;
	}

	jtemp = wdata&0xf0;
	for(itemp=0;itemp<8;itemp++) {
		if((jtemp<<itemp) & BIT7)
			LCD_DAT_HI;
		else
			LCD_DAT_LO;
		LCD_CLK_HI;
		_NOP();
		LCD_CLK_LO;
	}
	
	itemp = wdata&0x0f;
	jtemp = (itemp<<4)&0xf0;
	for(itemp=0;itemp<8;itemp++) {
		if((jtemp<<itemp) & BIT7)
			LCD_DAT_HI;
		else
			LCD_DAT_LO;
		LCD_CLK_HI;
		_NOP();
		LCD_CLK_LO;
	}
	
	LCD_CS_LO;
}

void LCD_WriteByte(unsigned char wdata) {
	unsigned char itemp;
	unsigned char jtemp=0xfa;
	
	do {
		itemp = CheckBusy();  
	}while(itemp&0x80);
	
	LCD_CS_LO;
	LCD_CLK_LO;
	LCD_DAT_LO;
	
	LCD_CS_HI;

	for(itemp=0;itemp<8;itemp++) {
		if((jtemp<<itemp) & BIT7)
			LCD_DAT_HI;
		else
			LCD_DAT_LO;
		LCD_CLK_HI;
		_NOP();
		LCD_CLK_LO;
	}

	jtemp = wdata&0xf0;
	for(itemp=0;itemp<8;itemp++) {
		if((jtemp<<itemp) & BIT7)
			LCD_DAT_HI;
		else
			LCD_DAT_LO;
		LCD_CLK_HI;
		_NOP();
		LCD_CLK_LO;
	}
	
	itemp = wdata&0x0f;
	jtemp = (itemp<<4)&0xf0;
	for(itemp=0;itemp<8;itemp++) {
		if((jtemp<<itemp) & BIT7)
			LCD_DAT_HI;
		else
			LCD_DAT_LO;
		LCD_CLK_HI;
		_NOP();
		LCD_CLK_LO;
	}
	
	LCD_CS_LO;
}

void LCD_SetXY(unsigned char X, unsigned char Y) {
	switch(Y) {
		case 1:
			LCD_WriteComm(0x7F + X);
			break;
		case 2:
			LCD_WriteComm(0x8F + X);
			break;
		case 3:
			LCD_WriteComm(0x87 + X);
			break;
		case 4:
			LCD_WriteComm(0x97 + X);
	}
}

void LCD_WriteString(unsigned char X,unsigned char Y,unsigned char *String) {
	unsigned char temp;
	LCD_SetXY(X,Y);
	temp = *String;
	while(temp!=0) {
		LCD_WriteByte(temp);
		temp = *(++String);
	}  
}

void LCD_WriteDEC(unsigned char X,unsigned char Y,unsigned char Num) {
	LCD_SetXY(X,Y);
	LCD_WriteByte((Num/10) + 0x30);
	LCD_WriteByte((Num%10) + 0x30);
}

⌨️ 快捷键说明

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