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

📄 液晶驱动代码.cpp

📁 LCD_disp是针对SMS0810B型号液晶的汇编语言;其他的是与430单片机有关的C代码
💻 CPP
字号:
// MSP430F1121与液晶驱动芯片PCF8576的连接程序

#include "msp430x11x1.h" 

#define uint unsigned int 
#define uchar unsigned char 

//器件地址 
uchar PCF8576=0x70; 

//内存数据定义 
uchar ByteCnt; //I2C 数据字节计数器 
uchar SlvAdr; //被控器地址 
uchar SubAdr; //被控器单元地址 
uchar XmtDat[5]; //发送数据缓冲区 


//uchar MODE1=0x45; 
uchar MODE2=0xCD; // 
uchar Bank_sel=0x78; 

uchar flag; 

uchar Digit[10]; 

#define SDA BIT3 // P2.3 controls SDA line (pull-up used for logic 1) 
#define SCL BIT4 // P2.4 controls SCL line (pull-up used for logic 1) 



/****************************************************************************** 
; 子程序 
;名称:START 
;描述:启动I2C 总线子程序--发送I2C 起始条件 
;;*****************************************************************************/ 
void START(void) 
{ 
	P2OUT |= SDA; //SDA=1 
	_NOP(); 
	P2OUT |= SCL; //SCL=1 
	_NOP(); 
	P2OUT &= ~SDA; //SDA=0 
	_NOP(); 
	P2OUT &= ~SCL; //SCL=0 
} 

/*-------------------------------------------------------------------------- 
;名称:STOP 
;描述:停止I2C 总线子程序--发送I2C 总线停止条件 
;-------------------------------------------------------------------------*/ 
void STOP(void) 
{ 
	P2OUT &= ~SDA; //SDA=0 
	_NOP(); 
	P2OUT |= SCL; 
	_NOP(); 
	P2OUT |= SDA; 
	_NOP(); 
	P2OUT &= ~SCL; 
} 

void cack(void) /* 应答位检查 */ 
{ 
	P2OUT |= SDA; 
	P2OUT |= SCL; 

	P2DIR &= ~SDA; 

	_NOP(); 
	P2OUT &= ~SCL; 

	P2DIR |= SDA; 

} 

void delay(uchar time) 
{ 
	uchar i; 

	do{ 
	for(i=100;i!=0;i--); 

	while(--time!=0); 

} 

/*---------------------------------------------------------------------- 
;名称:SendByte 
;描述:字节数据传送子程序发送一个字节数据或地址给被控器PCF8576 
;要发送的数据在ACC 中 
;发送数据正常返回标志F0=0 F0=1 表示被控器无应答或损坏 
;------------------------------------------------------------------------*/ 
void SendByte(uchar Data) 
{ 
	uchar i=8; 

	do 
	{ 
		if((Data&0x80)==0x80) 
			P2OUT |= SDA; 
		else 
			P2OUT &= ~SDA; 

		P2OUT |= SCL; 
		_NOP (); 
		P2OUT &= ~SCL; 

		Data=Data<<1; 
	} 
	while(--i!=0); 

	cack(); 

} 

/*********************************************************** 
;发送数据程序 
;名称:SendData 
;描述:发送ByteCnt 个字节给被控器PCF8576 
;被控器地址在SlvAdr 中单元地址在SubAdr 中 
;所发送数据的字节数ByteCnt 在中发送的数据在XmtDat 缓冲区中 
;发送数据正常返回标志F0=0 F0=1 表示被控器无应答或损坏 
;**********************************************************/ 
void Display_Data(void) 
{ 
	uchar i=0; 
	uchar size=ByteCnt; 

	START(); //发送I2C 总线起始条件 

	SendByte(SlvAdr); //发送被控器总线地址 

	SendByte(SubAdr); //发送单元地址 

// SendByte(0x73); //闪烁方式为正常,闪烁频率为0.5Hz 的命令字送缓冲区首址, 
//如果不需要闪烁应将数#70H 送入缓冲区首址 
	SendByte(0x70); //不闪烁 


	do 
	{ 
		SendByte(XmtDat[i]); //发送数据 
		i++; 
	} while(--size!=0); 

	STOP(); 

	delay(100); 
} 

void ClearLcd(void) 
{ 
	uchar size=ByteCnt; 

	START(); //启动I2C 总线 

	SendByte(SlvAdr); //送器件地址 

	SendByte(SubAdr); //发送单元地址 

	SendByte(0x70); 

	do 
	{ 
		SendByte(0x00); //发送数据 
	} while(--size!=0); 

	STOP(); 

	delay(200); 
} 

void PCF8576SET(void) 
{ 
	START(); 

	SendByte(SlvAdr); //送器件地址 

	SendByte(MODE2); //取方式命令字 

	SendByte(Bank_sel); 

	STOP(); 
} 


void main(void) 
{ 
	uint out_data; 
	uint tmp_data; 
	uchar i; 
	uchar k; 
	uchar tmp[5]; 

	P2DIR |= SDA; //SDA 
	P2DIR |= SCL; //SCL 

	P2OUT &= ~SDA; 
	P2OUT &= ~SCL; 

	WDTCTL = WDTPW+WDTHOLD; 

	Digit[0]=0x7E; //0 
	Digit[1]=0x18; //1 
	Digit[2]=0xB6; //2 
	Digit[3]=0xBC; //3 
	Digit[4]=0xD8; //4 
	Digit[5]=0xEC; //5 
	Digit[6]=0xEE; //6 
	Digit[7]=0x38; //7 
	Digit[8]=0xFE; //8 
	Digit[9]=0xFC; //9 

	SubAdr=0x80; 
	SlvAdr=PCF8576; 
	ByteCnt=4; 

	PCF8576SET(); 

	ClearLcd(); 

	out_data=0; 

	while(1) 
	{ 
		tmp_data=out_data; 

		for(i=0;i<10;i++)
		{ 
			k=tmp_data%10; 
			tmp_data=tmp_data/10; 

			XmtDat[i]=Digit[k]; 
			tmp[i]=k; 
		} 

		XmtDat[2] |= 0x01; 

		for(i=ByteCnt-1;i!=0;i--) 
		{ 
			if( tmp[i] == 0 ) 
				XmtDat[i]=0x00; 
			else 
				break;
		}
	}
}

⌨️ 快捷键说明

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