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

📄 12864lcdd.c

📁 这是我以前做过的51单片机实验代码
💻 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 + -