📄 cm12864_driver.c
字号:
#include "AT89S52.h"
#include "CONFIG.h"
#include "CM12864_Driver.h"
#include <intrins.h>
#include <absacc.h>
//**********************************************************************************************************************子程序
#ifdef _BUS_
bit Lcd_Busy()// 测试LCD忙碌状态
{
ACC=BUSY;
return ACC_7;
}
void Lcd_Wcmd_L(uchar cmd)// 写入指令数据到LCD左
{
while(Lcd_Busy());
CMD_L = cmd;
}
void Lcd_Wcmd_R(uchar cmd)// 写入指令数据到LCD右
{
while(Lcd_Busy());
CMD_R = cmd;
}
void Lcd_Wdat_L(uchar dat)//写入字符显示数据到LCD左
{
while(Lcd_Busy());
WDAT_L = dat;
}
void Lcd_Wdat_R(uchar dat)//写入字符显示数据到LCD右
{
while(Lcd_Busy());
WDAT_R = dat;
}
uchar Lcd_Rdat_L(void)//读入字符显示数据到LCD左
{
uchar data dat;
while(Lcd_Busy());
dat=RDAT_L;
return dat;
}
uchar Lcd_Rdat_R(void)//读入字符显示数据到LCD右
{
uchar data dat;
while(Lcd_Busy());
dat=RDAT_R;
return dat;
}
#else
void Lcd_Wcmd_L(uchar cmd)// 写入指令数据到LCD左
{
CS1=0;
CS2=1;
DI=0;
RW=0;
P0 = cmd;
E=1;
E=0;
}
void Lcd_Wcmd_R(uchar cmd)// 写入指令数据到LCD右
{
CS1=1;
CS2=0;
DI=0;
RW=0;
P0 = cmd;
E=1;
E=0;
}
void Lcd_Wdat_L(uchar dat)//写入字符显示数据到LCD左
{
CS1=0;
CS2=1;
DI=1;
RW=0;
P0 = dat;
E=1;
E=0;
}
void Lcd_Wdat_R(uchar dat)//写入字符显示数据到LCD右
{
CS1=1;
CS2=0;
DI=1;
RW=0;
P0 = dat;
E=1;
E=0;
}
#endif
/*--------------------------------------
写数据到液晶屏
dat:数据
page:目标页
column:目标列
--------------------------------------*/
void Lcd_Wdat(uchar dat,uchar page,uchar column)
{
if(column<64)
{
Lcd_Wcmd_L(page| 0xb8);
Lcd_Wcmd_L(column | 0x40);
Lcd_Wdat_L(dat);
}
else
{
Lcd_Wcmd_R(page| 0xb8);
Lcd_Wcmd_R((column-64) | 0x40);
Lcd_Wdat_R(dat);
}
}
/*--------------------------------------
从液晶屏读数据
page:目标页
column:目标列
--------------------------------------*/
uchar Lcd_Rdat(uchar page,uchar column)
{
if(column<64)
{
Lcd_Wcmd_L(page| 0xb8);
Lcd_Wcmd_L(column | 0x40);
return Lcd_Rdat_L();
}
else
{
Lcd_Wcmd_R(page| 0xb8);
Lcd_Wcmd_R((column-64) | 0x40);
return Lcd_Rdat_R();
}
}
/*
void Lcd_LRow(uchar row)//LCD左屏显示起始行设置
{
Lcd_Wcmd_L(row | 0xc0);
}
void Lcd_RRow(uchar row)//LCD右屏显示起始行设置
{
Lcd_Wcmd_R(row | 0xc0);
}
*/
void Lcd_Row(uchar row)//LCD双屏显示起始行设置
{
Lcd_Wcmd_L(row | 0xc0);
Lcd_Wcmd_R(row | 0xc0);
}
void Lcd_On_Off()//LCD开关设置
{
Lcd_Wcmd_L(0x3f);
Lcd_Wcmd_R(0x3f);
}
void Lcd_Init()//LCD初始化设置
{
Lcd_On_Off();
Lcd_Row(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -