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

📄 st7549_lcd.c

📁 ST7549的驱动LCD的程序,ST7549是使用的I2C协议的LCD驱动.
💻 C
字号:
//	    64*64 LCD Program (I^2C方式)
//*****************************************************
//连线表:  CPU=89LV52 (Vop=3V)     System Clock=12M   *
//         RES = P3.5     SCL = P1.7     SDA = P1.6   *
//         SCL  SDA 须接10K上拉电阻                   *
//*****************************************************
#include <reg52.h>
#include <intrins.h>

sbit	RES=P3^5;	//复位信号
sbit	SCL=P1^7;	//时钟信号
sbit	SDA=P1^6;	//数据信号

void CheckACK(void);
void Delay(unsigned int);
void LcdFill(unsigned char);
void LcdInit(void);
void PutBMP(unsigned char *puts);
void PutDot(unsigned char);
void Send8Bit(unsigned char);
void WriteCommand(unsigned char);
void WriteData(unsigned char);

unsigned char code bmp1[];

void main(void)
{
	RES = 1;	//复位
	RES = 0;
	Delay(50);
	RES = 1;
	LcdFill(0);	//清屏
	LcdInit();	//初始化
	while(1)
	{
		PutBMP(bmp1);
		Delay(1000);
		PutDot(0x55);
		Delay(1000);
		PutDot(0xAA);
		Delay(1000);
		LcdFill(0xFF);
		Delay(1000);
	}
}

//写指令函数
void WriteCommand(unsigned char CommandByte)
{
	//启动I2C总线
	SDA = 0;
	SCL = 1;
	SCL = 0;
	//发送总线上器件的SLAVE Address
	Send8Bit(0x78);	//01111(SA1)(SA0)(RW)
				//SA1=0 SA0=0 RW=0写
	CheckACK();		//检测ACK应答信号
	//发送Control Byte
	Send8Bit(0x00);	//(Co)(A0)000000(A) Co=0 A0=0指令
				//Co=0是表示这是最后一个指令
				//后面要Stop总线再从新开始的
	CheckACK();
	//发送数据(对于芯片是指令,所有的字节都是作为数据发送)
	Send8Bit(CommandByte);
	CheckACK();
	//停止I2C总线
	SCL = 1;
	SDA = 0;
	SDA = 1;
}

//写数据函数
void WriteData(unsigned char DataByte)
{
	//启动I2C总线
	SDA = 0;
	SCL = 1;
	SCL = 0;
	//发送总线上器件的SLAVE Address
	Send8Bit(0x78);	//01111(SA1)(SA0)(RW)
				//SA1=0 SA0=0 RW=0写
	CheckACK();		//检测ACK应答信号
	//发送Control Byte
	Send8Bit(0x40);	//(Co)(A0)000000(A) Co=0 A0=1数据
				//Co=0是表示这是最后一个指令
				//后面要Stop总线再从新开始的
	CheckACK();
	//发送数据(所有发送过去的Byte都作为数据发送)
	Send8Bit(DataByte);
	CheckACK();
	//停止I2C总线
	SCL = 1;
	SDA = 0;
	SDA = 1;
}

//发送8Bit函数
void Send8Bit(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SDA = Byte>>(7-i)&0x01;
		SCL = 1;
		SCL = 0;
	}
}

//ACK应答信号函数
void CheckACK(void)
{
	SDA = 1;
	SCL = 1;
	while(SDA);		//如果SDA=High,Wait.....
	SCL = 0;
}

//延时函数(毫秒级)
void Delay(unsigned int MS)
{
	unsigned char us,usn;
	while(MS!=0)
	{ 
		usn = 2;
		while(usn!=0)
		{
			us=0xf5;
			while(us!=0) {us--;};
			usn--;
		}
		MS--;
	}
}

//初始化
void LcdInit(void)
{
	WriteCommand(0x33);	//00110011  0,0,1,MX,MY,PD,H1,H0
					//SET H[1:0]=11 ; MY=0(COM0->COM66); 
					//MX=1(SEG101->SEG0); PD=0
	WriteCommand(0x97);	//10010111  1,0,0,1,BE1,BE0,PC1,PC0
					//BE1,BE0=10(DEFAULT);PC1,PC0=11-->x5
	
	WriteCommand(0x31);	//00110001  0,0,1,MX,MY,PD,H1,H0
					//SET H[1:0]=01 ; MY=0(COM0->COM66); 
					//MX=1(SEG101->SEG0); PD=0
	WriteCommand(0xEA);	//11101010  1,VOP6,VOP5,VOP4,VOP3,VOP2,VOP1,VOP0
					//倍压产生调节 Vop = 6.75+0.03*106 = 9.93 V
	WriteCommand(0x12);	//00010010  0,0,0,1,0,BS2,BS1,BS0   bias = 1/9
	WriteCommand(0x40);	//Start Line = com0
	
	WriteCommand(0x30);	//00110000  0,0,1,MX,MY,PD,H1,H0
					//SET H[1:0]=00 ; MY=0(COM0->COM66);
					//MX=1(SEG101->SEG0); PD=0
	WriteCommand(0x80);	//X Address = 0  (Col=0)
	WriteCommand(0x40);	//Y Address = 0
	WriteCommand(0x05);	//PRS=1,倍压输出大范围
	WriteCommand(0x0C);	//D=1,E=0,Normal Display ON
}

//定位函数
void LocateXY(unsigned char Page,unsigned char Col)
{
	WriteCommand(0x30);	//00110000  0,0,1,MX,MY,PD,H1,H0
					//SET H[1:0]=00 ; MY=0(COM0->COM66);
					//MX=1(SEG101->SEG0); PD=0
	WriteCommand(0x80|Col);	//X Address = 0  Col
	WriteCommand(0x40|Page);//Y Address = 0  Page
}

//清屏(填充)
void LcdFill(unsigned char FillByte)
{
	unsigned char i,j;
	LocateXY(0,0);
	for(i=0;i<8;i++)
	{
		for(j=0;j<102;j++)
		{
			WriteData(FillByte);
		}
	}
}

//显示点阵
void PutDot(unsigned char DotByte)
{
	unsigned char i,j;
	for(i=0;i<8;i++)
	{
		LocateXY(i,0);
		for(j=0;j<64;j++)
		{
			WriteData(DotByte);
			DotByte=~DotByte;
		}
	}
}

//显示图形
void PutBMP(unsigned char *puts)
{
	unsigned char i,j;
	unsigned int  X=0;
	for(i=0;i<8;i++)
	{
		LocateXY(i,0);
		for(j=0;j<64;j++)
		{
			WriteData(puts[X]);
			X++;
		}
	}
}

unsigned char code bmp1[]={
0xFF,0x01,0x01,0x01,0x01,0xF9,0x01,0xE1,0x01,0x81,0x01,0x01,0x01,0x01,0x01,0x81,
0x61,0xF9,0x61,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x81,0x81,0xE1,0x21,0x21,0x21,0xE1,0xE1,0xE1,0x21,0xE1,0xE1,
0xE1,0x21,0xE1,0xE1,0xE1,0x21,0xE1,0xE1,0xE1,0x21,0xE1,0x01,0x01,0x01,0x01,0xFF,
0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFE,0x00,0xF8,0x00,0xE1,
0x01,0xFF,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x07,0x07,0x1F,0x10,0x10,0x10,0x1F,0x1F,0x1F,0x10,0x1F,0x1F,
0x1F,0x10,0x1F,0x1F,0x1F,0x10,0x1F,0x1F,0x1F,0x10,0x1F,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x20,
0xE0,0x00,0x00,0x00,0xF8,0x08,0x28,0x28,0xE8,0x28,0x28,0x28,0x08,0xF8,0x00,0x00,
0x90,0x90,0xF0,0x88,0x88,0x40,0x20,0x58,0x90,0x50,0x30,0x00,0x00,0x80,0x90,0x90,
0x90,0x90,0x80,0x40,0x40,0xF8,0x40,0x40,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x7F,0x02,0x02,0x02,0x02,
0x07,0x00,0x00,0x00,0x7F,0x28,0x29,0x29,0x2F,0x29,0x2B,0x2D,0x28,0x7F,0x00,0x00,
0x18,0x06,0x7F,0x02,0x44,0x48,0x4A,0x25,0x2A,0x13,0x0A,0x06,0x00,0x18,0x14,0x13,
0x10,0x14,0x58,0x20,0x18,0x27,0x40,0x20,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x18,0x84,0x44,0x24,0x18,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0xF8,
0x04,0x04,0x04,0xF8,0x00,0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x80,0x60,0x1C,0x00,
0x00,0x00,0x08,0xFC,0x00,0x00,0x00,0x18,0x84,0x44,0x24,0x18,0x00,0x00,0x80,0x60,
0x1C,0x00,0x00,0xF8,0x04,0x04,0x04,0xF8,0x00,0x00,0x08,0xFC,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x03,0x02,0x02,0x02,0x02,0x00,0x01,0x02,0x82,0xE2,0xE1,0x00,0x01,
0x02,0x02,0x02,0x81,0xC0,0xE0,0x60,0x60,0x63,0xE2,0xC0,0x80,0x03,0x00,0x00,0x00,
0x00,0x00,0x02,0x83,0xC2,0xE0,0x60,0x63,0x62,0xE2,0xC2,0x82,0x00,0x00,0x03,0x80,
0xC0,0x60,0x60,0x61,0xE2,0xC2,0x82,0x01,0x00,0x00,0x02,0x03,0x02,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x00,0x01,0x01,0x80,0xC0,0x60,0x30,0x18,0x0F,0x07,0x00,0x00,0x00,0x06,
0x06,0x00,0x00,0x01,0x01,0x80,0xC0,0x60,0x30,0x18,0x0F,0x07,0x00,0x00,0xFF,0xFF,
0x19,0x0C,0x0C,0x0C,0x1C,0xF9,0xF1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x87,0x87,0x80,0x80,
0x80,0x80,0x80,0x86,0x87,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x80,0x80,0x80,0x86,
0x86,0x80,0x80,0x86,0x87,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x80,0x80,0x80,0x83,
0x83,0x86,0x86,0x86,0x87,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,
};

⌨️ 快捷键说明

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