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

📄 lcmdrive.c

📁 LCM320240点阵图形显示模块的驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -