📄 lcmdrive.c
字号:
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
void Lcm_Delay(unsigned long Times);//对延时子函数的声明.
void Lcm_WriteCommand(unsigned char CommandReg,unsigned char CommandByte);
//对写控制命令到某指令寄存器的子函数声明.
unsigned char Lcm_ReadCommand(unsigned char CommandReg);
//对读取某指令寄存器状态的子函数声明.
void Lcm_WriteData(unsigned char DataByte);//对写单字节数据到显存的子函数声明.
void Lcm_Initial(void);//对LCM初始化子函数声明.
void Lcm_DisplaySW(unsigned char DisplaySW);//对显示开关子函数的声明.
void Lcm_DisplayLayer(unsigned char DisplayLayer,unsigned char LayerLogic);
//对设定当前显示图层子函数的声明.
void Lcm_FrameRate(unsigned char FrameRate);//对设定刷新速率子函数的声明.
void Lcm_ReadWriteLayer(unsigned char ReadWriteLayer);//对设定读写图层号子函数的声明.
void Lcm_Contrast(unsigned char Contrast);//对软件设定对比度子函数的声明.
void Lcm_Grey(unsigned char Grey);//对设定LCM灰度显示子函数的声明.
void Lcm_Fill(unsigned char FillData);//对LCM全屏填充子函数的声明.
void Lcm_Zoom(unsigned char XZoom,unsigned char YZoom);//对设定字体或图案缩放比例子函数的声明.
void Lcm_Reverse(unsigned char Reverse);//对设定字体或图案的正相(正常)/反相(反白)显示子函数的声明.
void Lcm_FontTidiness(unsigned char FontTidiness);//对设定中/英文字对齐子函数的声明.
void Lcm_FontThick(unsigned char FontThick);//对设定文字正常/粗体显示子函数的声明.
void Lcm_RowSpacing(unsigned char RowSpacing);//对文字模式下设定行距值子函数的声明.
void Lcm_LocateXY(unsigned char x,unsigned y);//对坐标定位子函数的声明.
void Lcm_DisplayASCII(unsigned char X,unsigned char Y,
unsigned char Area,
unsigned char Reverse,
unsigned char XZoom,unsigned char YZoom,
unsigned char ASCIIReg);//对显示单个ASCII码字符或图形子函数的声明.
void Lcm_DisplayIntVar(unsigned char X,unsigned char Y,long int Intvar);//对显示整型变量子函数的声明.
void Lcm_DisplayString(unsigned char X,unsigned char Y,
unsigned char Reverse,
unsigned char XZoom,unsigned char YZoom,
unsigned char FontTidiness,
unsigned char FontThick,
unsigned char RowSpacing,
unsigned char *String);//对在指定坐标处开始显示字符串子函数的声明.
void Lcm_Button(unsigned char X0,Y0,unsigned char Press,unsigned char *String);
//对绘制文字按钮子函数的声明.
void Lcm_IntSetPanel(unsigned char X0,Y0,unsigned char Width,unsigned char Select,long int IntVar);
//对绘制整型变量设定面板子函数的声明.
void Lcm_IntDisplayPanel(unsigned char X0,Y0,unsigned char Width,
unsigned char Reverse,long int IntVar);//对绘制整型变量显示面板子函数的声明.
void Lcm_WordDisplayPanel(unsigned char X0,Y0,unsigned char Reverse,unsigned char *String);
//对绘制文字显示面板子函数的声明.
unsigned char code Lcm_ASCIITable[] = "0123456789+-";
/**************************************************************************************************
CA320240B4硬件连接说明:
LCM-------AT89C51
1: VSS连接到GND;
2: VDD连接到+5V;
3: V0连接到20K可变电阻的中心抽头,调节V0大约到-18.5V;
4: WR连接到AT89C51的P3.6脚;
5: RD连接到AT89C51的P3.7脚;
6: CS连接到AT89C51的P2.7脚;
7: A0(RS)连接到AT89C51的P2.0脚;
8: RST串连按钮到GND(方便手动复位),同时RST上拉2K电阻到+5V;
9-16: 连接到P0口(低位连接低位,高位连接高位);
17: BLA连接到+5V;
18: Vout连接到20K可变电阻的一端,可变电阻的另一端接地;
19: INT连接到AT89C51的P2.5脚;
20: BUSY连接到AT89C51的P2.6脚;
**************************************************************************************************/
sfr Lcm_Port=0x80 ;//定义LCM的并行通讯口为P0口.
sbit Lcm_Write=P3^6 ;//定义LCM的WR接单片机的P3.6脚.
sbit Lcm_Read=P3^7 ;//定义LCM的RD接单片机的P3.7脚.
sbit Lcm_Cs=P2^7 ;//定义LCM的CS接单片机的P2.7脚.
sbit Lcm_Rs=P2^0 ;//定义LCM的A0(RS)接单片机的P2.0脚.
sbit Lcm_Int=P2^5 ;//定义LCM的INT接单片机的P2.5脚.
sbit Lcm_Busy=P2^6 ;//定义LCM的BUSY接单片机的P2.6脚.
/**************************************************************************************************
函数名称: Lcm_Delay.
功能描述: 实现按所需要的时间长度延时.
函数说明: 无.
调用函数: 无.
全局变量: 无.
输 入: 无符号长整型时间常数Times.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Delay(unsigned long Times)
{ unsigned long i;//辅助变量i.
for(i=1;i<=Times;i++) {}//执行程序为空.
}//子程序Lcm_Delay结束.
/**************************************************************************************************
函数名称: Lcm_WriteCommand.
功能描述: 写控制命令到某指令寄存器.
函数说明: 采用I/O口模拟总线的方式进行操作.
调用函数: 空操作子函数_nop_().
全局变量: 无.
输 入: 无符号字符型指令地址CommandReg及无符号字符型指令命令CommandByte.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_WriteCommand(unsigned char CommandReg,unsigned char CommandByte)
{ Lcm_Port=0xff;//准备本次操作.
Lcm_Cs=1;//准备本次操作.
Lcm_Rs=1;//准备本次操作.
Lcm_Read=1;//准备本次操作.
Lcm_Write=1;//准备本次操作.
Lcm_Port=CommandReg;//送数据到总线.
Lcm_Cs=0;//片选中.
Lcm_Rs=0;//选择指令操作.
Lcm_Read=1;//选择写操作.
_nop_();//空操作指令延时.
Lcm_Write=0;//写入数据.
_nop_();//空操作指令延时.
Lcm_Write=1;//写操作完成.
_nop_();//空操作指令延时.
Lcm_Port=CommandByte;//送数据到总线.
_nop_();//空操作指令延时.
Lcm_Write=0;//写入数据.
_nop_();//空操作指令延时.
Lcm_Write=1;//写操作完成.
_nop_();//空操作指令延时.
Lcm_Port=0xff;//准备下次操作.
Lcm_Cs=1;//准备下次操作.
Lcm_Rs=1;//准备下次操作.
Lcm_Read=1;//准备下次操作.
Lcm_Write=1;//准备下次操作.
}//子程序Lcm_WriteCommand结束.
/**************************************************************************************************
函数名称: Lcm_ReadCommand.
功能描述: 读取某指令寄存器状态.
函数说明: 采用I/O口模拟总线的方式进行操作.
调用函数: 空操作子函数_nop_().
全局变量: 无.
输 入: 无符号字符型指令地址CommandReg.
返 回: 无符号字符型指令寄存器状态CommandByte.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
unsigned char Lcm_ReadCommand(unsigned char CommandReg)
{ unsigned char CommandByte;//定义寄存器状态值存储器.
Lcm_Port=0xff;//准备本次操作.
Lcm_Cs=1;//准备本次操作.
Lcm_Rs=1;//准备本次操作.
Lcm_Read=1;//准备本次操作.
Lcm_Write=1;//准备本次操作.
Lcm_Port=CommandReg;//送数据到总线.
Lcm_Cs=0;//片选中.
Lcm_Rs=0;//选择指令操作.
Lcm_Read=1;//选择写操作.
_nop_();//空操作指令延时.
Lcm_Write=0;//写入数据.
_nop_();//空操作指令延时.
Lcm_Write=1;//写操作完成.
_nop_();//空操作指令延时.
Lcm_Port=0xff;//准备读数据.
_nop_();//空操作指令延时.
Lcm_Read=0;//选择读操作.
_nop_();//空操作指令延时.
CommandByte=Lcm_Port;//读总线数据.
_nop_();//空操作指令延时.
Lcm_Read=1;//读操作完成.
_nop_();//空操作指令延时.
Lcm_Port=0xff;//准备下次操作.
Lcm_Cs=1;//准备下次操作.
Lcm_Rs=1;//准备下次操作.
Lcm_Read=1;//准备下次操作.
Lcm_Write=1;//准备下次操作.
return(CommandByte);
}//子程序Lcm_ReadCommand结束.
/**************************************************************************************************
函数名称: Lcm_WriteData.
功能描述: 在当前坐标下将单字节数据写入显存.
函数说明: 采用I/O口模拟总线的方式进行操作.
调用函数: 空操作子函数_nop_().
全局变量: 无.
输 入: 无符号字符型显示数据DataByte.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_WriteData(unsigned char DataByte)
{ Lcm_Port=0xff;//准备本次操作.
Lcm_Cs=1;//准备本次操作.
Lcm_Rs=1;//准备本次操作.
Lcm_Read=1;//准备本次操作.
Lcm_Write=1;//准备本次操作.
Lcm_Port=DataByte;//送数据到总线.
Lcm_Cs=0;//片选中.
Lcm_Rs=1;//选择数据操作.
Lcm_Read=1;//选择写操作.
_nop_();//空操作指令延时.
Lcm_Write=0;//写入数据.
_nop_();//空操作指令延时.
Lcm_Write=1;//写操作完成.
_nop_();//空操作指令延时.
Lcm_Port=0xff;//准备下次操作.
Lcm_Cs=1;//准备下次操作.
Lcm_Rs=1;//准备下次操作.
Lcm_Read=1;//准备下次操作.
Lcm_Write=1;//准备下次操作.
}//子程序Lcm_WriteData结束.
/**************************************************************************************************
函数名称: Lcm_Initial.
功能描述: 对LCM进行初始化操作.
函数说明: 祥见各语句后面的注释.
调用函数: 写控制命令到某指令寄存器子函数Lcm_WriteCommand.
全局变量: 无.
输 入: 无.
返 回: 无.
设 计: 特盈自动化 电气设计部 洪天长.
**************************************************************************************************/
void Lcm_Initial(void)
{ Lcm_WriteCommand(0x00,0xC9);//Power ON,TXT mode,Display OFF.
Lcm_WriteCommand(0x01,0xf2);//Dis CLK_OUT,BUSY(INT) high,System clock 8MHz.
Lcm_WriteCommand(0x02,0x10);//ROM/RAM Speed1--60ns.
Lcm_WriteCommand(0x03,0x80);//Advance Display Setup.
Lcm_WriteCommand(0x10,0x2b);//Align Disable;Bold Disable;Cursor Disable.
Lcm_WriteCommand(0x11,0x20);//Cursor high = 2;Row Distance = 0.
Lcm_WriteCommand(0x12,0x91);//Disable Gray,Only use Page1;page1 OR page2;R/W page1.
Lcm_WriteCommand(0x20,0x27);//Active window Right = (320/8)-1 = 39.
Lcm_WriteCommand(0x30,0xEF);//Active Window Bottom = 240-1 = 239.
Lcm_WriteCommand(0x40,0x00);//Active Window Left = 0.
Lcm_WriteCommand(0x50,0x00);//Active Window Top = 0.
Lcm_WriteCommand(0x21,0x27);//Display Window Right = (320/8)-1 = 39.
Lcm_WriteCommand(0x31,0xEF);//Display Window Bottom = 240-1 = 239.
Lcm_WriteCommand(0x41,0x00);//Display Window Left = 0.
Lcm_WriteCommand(0x51,0x00);//Display Window Top = 0.
Lcm_WriteCommand(0x60,0x00);//Cursor Position (X) = 0.
Lcm_WriteCommand(0x61,0x00);//Begin Segment Position = 0.
Lcm_WriteCommand(0x70,0x00);//Cursor Position (Y) = 0.
Lcm_WriteCommand(0x71,0x00);//Shift Begin Commom = 0.
Lcm_WriteCommand(0x72,0xEF);//Shift End Commom = 239.
Lcm_WriteCommand(0x80,0x33);//Blink Time = 51.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -