📄 12864lcdd.c
字号:
/**********************************************************
*YM12864R-3 液晶驱动(3线串行方式) LCD Module
*控制芯片:ST7920
*版本:V1.3
*日期:2007-6-6
*创建人:飞扬
**********************************************************/
#include <reg51.H>
sbit B_0 = B^0;//用累加器操作速度比较快.
sbit B_7 = B^7;
/****************** 液晶模块引脚定义 *******************/
sbit LCD_CS = P1^3;//LCD模块片选端,高电平有效
sbit LCD_SID = P1^4;//LCD串行数据输入端
sbit LCD_CLK = P1^2;//LCD串行同步时钟,上升沿读取SID数据
/**************** 常用操作命令和参数定义 *****************/
#define DisplayClear 0x01 //清屏指令(00000001)
#define ReturnHome 0x02 //光标回到"00H"(0000001X)
#define EntryMode 0x06 //进入点设定,光标右移,AC加1(00000110)
#define DisplayOn 0x0c //整体显示开,光标关,反白关
#define DisplayOff 0x08 //整体显示关
#define CursorOn 0x0e //光标显示开
#define Reverse 0x0d //反白显示开
#define Basic 0x30 //基本指令
/************************************************/
#define Extend 0x34 //扩充指令
#define SleepOn 0x08 //进入睡眠模式
#define SleepOff 0x0c //脱离睡眠模式
#define PlotOn 0x36 //绘图开
#define PlotOff 0x34 //绘图关
#define uchar unsigned char //定义下方便使用
/**********************************************************
*函数名:SendData
*功能:发送数据
*说明:向LCD发送一个字节数据
*输入:ucDat
*返回:无
**********************************************************/
void SendData(uchar ucDat)
{
uchar i;
B = ucDat;
for (i=8;i>0;i--)
{
LCD_CLK = 0;
LCD_SID = B_7;
LCD_CLK = 1;
B <<= 1;
}
}
/**********************************************************
*函数名:ReceiveData
*功能:接收数据
*说明:接收来自LCD的一个字节的数据
*输入:无
*返回:B
**********************************************************/
uchar ReceiveData()
{
uchar i;
for (i=8;i>0;i--)
{
LCD_CLK = 0;
B <<= 1;
LCD_CLK = 1;
B_0 = LCD_SID;
}
return (B);
}
/**********************************************************
*函数名:ReadBusyFlag
*功能:读忙碌标志和AC
*说明:
*输入:
*返回:B
**********************************************************/
uchar ReadBusyFlag()
{
uchar ucDat1,ucDat2;
LCD_CS = 1;
SendData(0xfc); //发送读忙碌标志指令
ucDat1 = ReceiveData();//
ucDat2 = ReceiveData();
LCD_CS = 0;
B = (ucDat2>>4)|(ucDat1&0xf0);
return (B);
}
/**********************************************************
*函数名:LCDWriteData
*功能:写数据到LCD
*说明:
*输入: Dat
*返回: 无
**********************************************************/
void LCDWriteData(uchar Dat)
{
uchar ucDat;
LCD_CS = 0;
do {
ucDat = ReadBusyFlag(); //忙碌判断
} while (ucDat&0x80);
LCD_CS = 1;
SendData(0xfa); //发送写数据指令
SendData(Dat&0xf0);//发送高4位
SendData(Dat<<4); //发送低4位
LCD_CS = 0;
}
/**********************************************************
*函数名:LCDWriteCommand
*功能:写指令到LCD
*说明:
*输入: Dat
*返回: 无
**********************************************************/
void LCDWriteCommand (uchar Dat)
{
uchar ucDat;
LCD_CS = 0;
do {
ucDat = ReadBusyFlag();//忙碌标志
} while (ucDat&0x80);
LCD_CS = 1;
SendData(0xf8); //发送写指令到LCD
SendData(Dat&0xf0);//发送高4位
SendData(Dat<<4); //发送低4位
LCD_CS = 0;
}
/**********************************************************
*函数名: LCDInit
*功能:初始化
*说明:液晶初始化函数
*输入:无
*返回:无
**********************************************************/
void LCDInit()
{
LCDWriteCommand(Basic); //基本指令集
LCDWriteCommand(DisplayOn); //显示开,光标关,发白关
LCDWriteCommand(DisplayClear); //清屏
LCDWriteCommand(EntryMode); //进入点设定,光标右移,AC加1
}
/**********************************************************
*函数名:
*功能:
*说明:
*输入:
*返回:
**********************************************************/
/**********************************************************
*函数名:
*功能:
*说明:
*输入:
*返回:
**********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -