📄 lcm.c
字号:
/*=========================================================
* 开发环境: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 + -