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

📄 串口.c

📁 430的LCD驱动电路和简单的消抖程序
💻 C
字号:
#ifndef _L12864_H_
#define _L12864_H_


#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 -> P4.0
#define LCD_PSB_DIR	P4DIR
#define LCD_PSB_HI	P4OUT |= LCD_PSB
#define LCD_PSB_LO	P4OUT &= ~LCD_PSB

#define	LCD_RST		BIT2			//LCD_RST -> P4.2
#define LCD_RST_DIR	P4DIR
#define LCD_RST_LO	P4OUT &= ~LCD_RST
#define LCD_RST_HI	P4OUT |= 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);




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);
}
#endif

⌨️ 快捷键说明

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