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

📄 lcm.c

📁 LCM320*240液晶驱动代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*=========================================================
  *				开发环境:Keil uVision3					*
  *				软件名称:					*
  *				开发日期:2007/1/10						*
  *				开 发 者:LPC							*
=========================================================*/
/*加入头文件*/
#include<W77C32.h>											//W77E58头文件
#include<intrins.h>											//
#include<stdio.h>											//
#include<stdlib.h>											//
#include<TYPE.H>											//声明定义
#include<WORD.H>											//声明字库
#include<OUTTYPE.H>											//
#include<INCLUDES.H>										//声明所有子函数
//=======================================================//
/********************LCM函数开始**************************/
//=======================================================//

/*=========================================================
函数名:LCM_WriteByteData()
功能:LCM写数据字节函数
入口参数:Data
出口参数:无
=========================================================*/
void LCM_WriteByteData(Uchar Data)
{
	LCM_CS=1;												//置高片选
	LCM_A0=1;												//数据输入使能
	P0=Data;												//写入字节数据
	LCM_A0=0;												//输入为数据输入状态
	LCM_CS=0;												//使能LCM
	LCM_WR=0;												//写使能
	_nop_();												//空操作
	LCM_WR=1;												//写禁止
	LCM_CS=1;												//释放LCM
	LCM_A0=1;												//数据传输状态结束
}

/*=========================================================
函数名:LCM_WriteByteCon()
功能:LCM写指令字节函数
入口参数:Data
出口参数:无
=========================================================*/
void LCM_WriteByteCon(Uchar Data)
{
	LCM_CS=1;												//片选置高
	LCM_A0=0;												//数据/指令选择
	P0=Data;												//输入指令
	LCM_A0=1;												//指令使能
	LCM_CS=0;												//片选使能
	LCM_WR=0;												//写启动
	_nop_();												//空操作
	LCM_WR=1;												//写结束
	LCM_CS=1;												//释放片选
	LCM_A0=0;												//数据/指令选择
}

/*=========================================================
函数名:LCM_ClrRam()
功能:LCM清除RAM函数
入口参数:无
出口参数:无
=========================================================*/
void LCM_ClrRam(void)
{
	Uchar i,j;												//临时变量
	LCM_WriteByteCon(0x46);									//CSRW,指令代码:46H
	LCM_WriteByteData(0x00);								//CSRL=0
	LCM_WriteByteData(0x00);								//CSRH=0

	LCM_WriteByteCon(0x4C);									//CSRDIR:指令代码:4CH

	LCM_WriteByteCon(0x42);									//MWRTTE:指令代码:42H
	
	for(i=0;i<240;i++)
	{
		for(j=0;j<40;j++)
		{
			LCM_WriteByteData(0x00);						//清空RAM
		}
	}
}

/*=========================================================
函数名:LCM_Screen()
功能:LCM全屏函数
入口参数:无
出口参数:无
=========================================================*/
void LCM_Screen(Uchar Data1,Uchar Data2)
{
	Uchar i,j;												//临时变量
	LCM_WriteByteCon(0x46);									//CSRW,指令代码:46H
	LCM_WriteByteData(0x00);								//
	LCM_WriteByteData(0x40);								//为什么送40H?
	
	LCM_WriteByteCon(0x4C);									//该指令设置光标右移

	LCM_WriteByteCon(0x42);									//该指令允许显示数据连续输入显示区

	for(i=0;i<120;i++)
	{
		for(j=0;j<40;j++)
		{
			LCM_WriteByteData(Data1);						//黑屏
		}
		for(j=0;j<40;j++)
		{
			LCM_WriteByteData(Data2);						//黑屏
		}
	}
}

/*=========================================================
函数名:LCM_WriteChinese()
功能:LCM显示汉字函数
入口参数:字符位置参数(2字节),字符数据
出口参数:无
=========================================================*/
void LCM_WriteChinese(Uchar Row,Uchar Col,Uchar x[32])
{
	Uchar i,j,k;											//临时变量
	Uint Biao;												//临时变量
	Biao=(Uint)((Row*40+Col)+0x4000);						//计算位置
	k=0;
	for(i=0;i<16;i++)
	{
		LCM_WriteByteCon(0x46);								//写入指令,设置光标地址和缓冲区地址
		LCM_WriteByteData((Uchar)(Biao&0x00FF));			//写入附带数据
		LCM_WriteByteData((Uchar)((Biao&0xFF00)>>8));		//写入附带数据
		for(j=0;j<2;j++)
		{
			LCM_WriteByteCon(0x4C);							//光标右移操作
			LCM_WriteByteCon(0x42);							//连续写操作
			LCM_WriteByteData(x[k++]);						//带入数据
		}
		Biao+=(Uint)(40);									//重新计算
	}
}

/*=========================================================
函数名:LCM_WriteEnglish()
功能:LCM显示英文字母和数字函数
入口参数:字符位置参数(2字节),内置字符代码
出口参数:无
=========================================================*/
void LCM_WriteEnglish(Uchar Row,Uchar Col,Uchar x[16])
{
	Uchar i,k;												//临时变量
	Uint Biao;												//临时变量
	Biao=(Uint)((Row*40+Col)+0x4000);						//计算位置
	k=0;
	for(i=0;i<16;i++)
	{
		LCM_WriteByteCon(0x46);								//写入指令,设置光标地址和缓冲区地址
		LCM_WriteByteData((Uchar)(Biao&0x00FF));			//写入附带数据
		LCM_WriteByteData((Uchar)((Biao&0xFF00)>>8));		//写入附带数据
		LCM_WriteByteCon(0x4C);								//光标右移操作
		LCM_WriteByteCon(0x42);								//连续写操作
		LCM_WriteByteData(x[k++]);							//带入数据
		Biao+=(Uint)(40);									//重新计算
	}
}

/*=========================================================
函数名:LCM_Write8x8()
功能:LCM显示1/4汉字大小的字符函数
入口参数:字符位置参数(2字节),内置字符代码
出口参数:无
=========================================================*/
void LCM_Write8x8(Uchar Row,Uchar Col,Uchar x[8])
{
	Uchar i,k;												//临时变量
	Uint Biao;												//临时变量
	Biao=(Uint)((Row*40+Col)+0x4000);						//计算位置
	k=0;
	for(i=0;i<8;i++)
	{
		LCM_WriteByteCon(0x46);								//写入指令,设置光标地址和缓冲区地址
		LCM_WriteByteData((Uchar)(Biao&0x00FF));			//写入附带数据
		LCM_WriteByteData((Uchar)((Biao&0xFF00)>>8));		//写入附带数据
		LCM_WriteByteCon(0x4C);								//光标右移操作
		LCM_WriteByteCon(0x42);								//连续写操作
		LCM_WriteByteData(x[k++]);							//带入数据
		Biao+=(Uint)(40);									//重新计算
	}
}

/*=========================================================
函数名:LCM_Wel()
功能:LCM显示欢迎使用函数
入口参数:无
出口参数:无
=========================================================*/
void LCM_Wel(void)
{
	Uchar y;												//声明变量
	//显示【欢迎使用】
	LCM_ClearWorkSpace();									//清除工作区
	y=0x68;													//定位纵坐标
	LCM_WriteChinese(y,0x0D,W29);							//“欢”
	LCM_WriteChinese(y,0x11,W30);							//“迎”
	LCM_WriteChinese(y,0x15,W31);							//“使”
	LCM_WriteChinese(y,0x19,W32);							//“用”
}

/*=========================================================
函数名:LCM_Welcom()
功能:LCM显示欢迎界面函数
入口参数:无
出口参数:无
=========================================================*/
void LCM_Welcom(void)
{
	Uchar i,j;												//声明变量
	LCM_ClrRam();											//清除LCM中RAM
	LCM_Screen(0xFF,0xFF);									//黑屏

	LCM_WriteByteCon(0x46);									//准备显示数据指令
	LCM_WriteByteData(0x00);								//附带参数
	LCM_WriteByteData(0x00);								//	
	//显示【欢迎使用】
	LCM_Wel();												//调显【欢迎使用】	
	//显示【中央空调计费系统】
	i=0x08;													//定位纵坐标
	LCM_WriteChinese(i,0x0C,W33);							//“中”
	LCM_WriteChinese(i,0x0E,W34);							//“央”
	LCM_WriteChinese(i,0x10,W35);							//“空”
	LCM_WriteChinese(i,0x12,W36);							//“调”
	LCM_WriteChinese(i,0x14,W37);							//“计”
	LCM_WriteChinese(i,0x16,W38);							//“费”
	LCM_WriteChinese(i,0x18,W39);							//“系”
	LCM_WriteChinese(i,0x1A,W40);							//“统”

	//显示时间固定字符【20年月日星期】
	i=0x20;													//定位纵坐标
	LCM_WriteEnglish(i,0x04,No2);							//“2”
	LCM_WriteEnglish(i,0x05,No0);							//“0”
	LCM_WriteChinese(i,0x08,W18);							//“年”
	LCM_WriteChinese(i,0x0C,W19);							//“月”
	LCM_WriteChinese(i,0x10,W20);							//“日”
	LCM_WriteChinese(i,0x14,W21);							//“星”
	LCM_WriteChinese(i,0x16,W22);							//“期”
	LCM_WriteEnglish(i,0x1E,FH3);							//时钟分割符号“:”
	LCM_WriteEnglish(i,0x21,FH3);							//时钟分割符号“:”
	
	//显示【郑州春泉暖通节能设备有限公司】
	i=0xC8;													//定位纵坐标
	j=0x06;													//定位起始横坐标
	LCM_WriteChinese(i,j,W0);								//“郑”
	LCM_WriteChinese(i,j+2,W1);								//“州”
	LCM_WriteChinese(i,j+4,W2);								//“春”
	LCM_WriteChinese(i,j+6,W3);								//“泉”
	LCM_WriteChinese(i,j+8,W4);								//“暖”
	LCM_WriteChinese(i,j+10,W5);							//“通”
	LCM_WriteChinese(i,j+12,W6);							//“节”
	LCM_WriteChinese(i,j+14,W7);							//“能”
	LCM_WriteChinese(i,j+16,W8);							//“设”
	LCM_WriteChinese(i,j+18,W9);							//“备”
	LCM_WriteChinese(i,j+20,W10);							//“有”
	LCM_WriteChinese(i,j+22,W11);							//“限”
	LCM_WriteChinese(i,j+24,W12);							//“公”
	LCM_WriteChinese(i,j+26,W13);							//“司”

	//显示【电话:(0371)67579116 67579117】
	i=0xD8;													//定位纵坐标
	j=0x06;													//定位起始横坐标
	LCM_WriteChinese(i,j,W70);								//“电”
	LCM_WriteChinese(i,j+2,W131);							//“话”
	LCM_WriteEnglish(i,j+4,FH3);							//“:”
	LCM_WriteEnglish(i,j+5,FH1);							//“(”
	LCM_WriteEnglish(i,j+6,No0);							//“0”
	LCM_WriteEnglish(i,j+7,No3);							//“3”
	LCM_WriteEnglish(i,j+8,No7);							//“7”
	LCM_WriteEnglish(i,j+9,No1);							//“1”
	LCM_WriteEnglish(i,j+10,FH2);							//“)”
	LCM_WriteEnglish(i,j+11,No6);							//“6”
	LCM_WriteEnglish(i,j+12,No7);							//“7”
	LCM_WriteEnglish(i,j+13,No5);							//“5”
	LCM_WriteEnglish(i,j+14,No7);							//“7”
	LCM_WriteEnglish(i,j+15,No9);							//“9”
	LCM_WriteEnglish(i,j+16,No1);							//“1”
	LCM_WriteEnglish(i,j+17,No1);							//“1”
	LCM_WriteEnglish(i,j+18,No6);							//“6”
	LCM_WriteEnglish(i,j+19,FH5);							//“/”
	LCM_WriteEnglish(i,j+20,No6);							//“6”
	LCM_WriteEnglish(i,j+21,No7);							//“7”
	LCM_WriteEnglish(i,j+22,No5);							//“5”
	LCM_WriteEnglish(i,j+23,No7);							//“7”
	LCM_WriteEnglish(i,j+24,No9);							//“9”
	LCM_WriteEnglish(i,j+25,No1);							//“1”
	LCM_WriteEnglish(i,j+26,No1);							//“1”
	LCM_WriteEnglish(i,j+27,No7);							//“7”
	
/*	LCM_WriteEnglish(0xD8,0x1C,No12);						//“C”
	LCM_WriteEnglish(0xD8,0x1D,No50);						//“o”
	LCM_WriteEnglish(0xD8,0x1E,No51);						//“p”
	LCM_WriteEnglish(0xD8,0x1F,No60);						//“y”
	LCM_WriteEnglish(0xD8,0x20,No53);						//“r”
	LCM_WriteEnglish(0xD8,0x21,No44);						//“i”
	LCM_WriteEnglish(0xD8,0x22,No42);						//“g”
	LCM_WriteEnglish(0xD8,0x23,No43);						//“h”
	LCM_WriteEnglish(0xD8,0x24,No55);						//“t”
	LCM_WriteEnglish(0xD8,0x25,FH1);						//“(”
	LCM_WriteEnglish(0xD8,0x26,No38);						//“c”
	LCM_WriteEnglish(0xD8,0x27,FH2);						//“)”
*/
	//显示上述字符下短线【-】
	for(i=0x06;i<0x22;i++)
	{
		LCM_Write8x8(0x18,i,L0);							//画单线
	}
	
	//显示上述字符下短线【=】
	for(i=0x02;i<0x26;i++)
	{
		LCM_Write8x8(0x30,i,L1);							//画粗线
	}
	for(i=0x02;i<0x26;i++)
	{
		LCM_Write8x8(0xC0,i,L1);							//画粗线
	}
}

/*=========================================================
函数名:LCM_ClearWorkSpace()
功能:LCM清除工作区函数
入口参数:无
出口参数:无
=========================================================*/
void LCM_ClearWorkSpace(void)
{
	Uchar i,j,y;											//声明变量
	y=0x40;													//变量赋值
	for(i=0;i<8;i++,y+=0x10)
	{
		for(j=0;j<40;j++)
		{
			LCM_WriteEnglish(y,j,FH4);						//清除工作区
		}
	}
}

/*=========================================================

⌨️ 快捷键说明

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