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

📄 lcm.c

📁 凌阳单片机驱动12864液晶
💻 C
字号:
//#include "zfs.h"
#include "LCM.h"
//==========================================================
void public   LCM_Write_Comm(unsigned int Comm);
void public  LCM_Write_Data(unsigned int Data);
unsigned int LCM_Read_Data(void);
void  LCM_Check_Busy(void);

//==========================================================
//函数名称:void LCM_Check_Busy(void)
//函数作用:检测LCM是否处于忙状态,并等待
//输入参数:
//日期:2007.01.31
//RS=0,RW=1,E=H
//==========================================================	
void LCM_Check_Busy(void)
{
	unsigned int ioa;
	unsigned int iob;
	*P_IOB_Dir=0xffff;
	*P_IOB_Attrib=0xffff;
	*P_IOB_Data=0x0000;                //设置IOB为输出口
	iob=*P_IOB_Data;
	iob=iob&0xff00;
	iob=iob|0x00ff;
    *P_IOB_Data=iob;
	ioa=*P_IOA_Data;
	ioa=ioa&Clear_RS; 
	*P_IOA_Data=ioa;                   //RS=0
	ioa=*P_IOA_Data;
    ioa=ioa|Set_RW;
    *P_IOA_Data=ioa;                  //RW=1
	ioa=*P_IOA_Data;
    ioa=ioa|Set_E;                    //E=1
	*P_IOA_Data=ioa;
	*P_IOB_Dir=0x0000;
	*P_IOB_Attrib=0xffff;             //设置IOB为输入口
	///////////////////////////
	iob=*P_IOB_Data;
	//////////////////////////////
	while(*P_IOB_Data&IOB_7)
	{
		*P_Watchdog_Clear=0x0001;     //等待LCM接收命令或数据
	}
	ioa=*P_IOA_Data;
    ioa=ioa&Clear_E;                  //E=0
	*P_IOA_Data=ioa;
	*P_IOB_Dir=0xffff;
	*P_IOB_Attrib=0xffff;             //设置IOB为输出口
}

//=======================================================
//==========================================================
//函数名称:void LCM_Write_Comm(unsigned int Comm)
//函数作用:写命令到LCM
//输入参数:要写的数据,高八位必需为零
//日期:2007.01.31
//RS=0,RW=0,E=高脉冲
//==========================================================
void LCM_Write_Comm(unsigned int Comm)
{   
	unsigned int ioa;
	unsigned int iob;
	unsigned int i;
	LCM_Check_Busy();
	ioa=*P_IOA_Data;
	ioa=ioa&Clear_RS;    
	*P_IOA_Data=ioa;            //RS=0
	ioa=*P_IOA_Data;
	ioa=ioa&Clear_RW;
	*P_IOA_Data=ioa;            //RW=0
	iob=*P_IOB_Data;
	iob=iob*0xff00;
	Comm=Comm&0xff;          
    iob=iob|Comm;  
    *P_IOB_Data=iob;            //形成命令字节     
    ioa=*P_IOA_Data;          
    ioa=ioa|Set_E;             //E=1
    *P_IOA_Data=ioa;
    i=10;
    while(i--);
    ioa=*P_IOA_Data;
    ioa=ioa&Clear_E;          //E=0
    *P_IOA_Data=ioa;  
}
  
//==========================================================

//========================================================== 
//函数名称:void LCM_Write_Data(unsigned int Data)
//函数作用:写数据到LCM
//输入参数:要写的数据,高八位必需为零
//日期:2007.01.31
//RS=1,RW=0,E高脉冲
//==========================================================
void LCM_Write_Data(unsigned int Data)
{
	unsigned int ioa;
	unsigned int iob;
	unsigned int i;
	LCM_Check_Busy();
	ioa=*P_IOA_Data;
	ioa=ioa|Set_RS;
    *P_IOA_Data=ioa;            //RS=1
	ioa=*P_IOA_Data;
	ioa=ioa&Clear_RW;
    *P_IOA_Data=ioa;            //RW=0
	iob=*P_IOB_Data;
	iob=iob&0xff00;
	Data=Data&0x00ff;
	iob=iob|Data;
	*P_IOB_Data=iob; 
	ioa=*P_IOA_Data;
    ioa=ioa|Set_E;              //E=1
	*P_IOA_Data=ioa;
	i=10;
	while(i--);
	ioa=*P_IOA_Data;
    ioa=ioa&Clear_E;           //E=0
	*P_IOA_Data=ioa;
}

//==========================================================
//函数名称:unsinged int LCM_Read_Data(void)
//函数作用:读LCM
//输出参数:从LCM读到的数据
//日期:2007.01.31
//RS=1,RW=1,E=H
//==========================================================
unsigned int LCM_Read_Data(void)
{
	unsigned int ioa;
	unsigned int iob;
	unsigned int Read_Data;
    LCM_Check_Busy();
	ioa=*P_IOA_Data;
	ioa=ioa|Set_RS;
     *P_IOA_Data=ioa;             //RS=1
    ioa=*P_IOA_Data;
	ioa=ioa|Set_RW;
	*P_IOA_Data=ioa;              //RW=1
	ioa=*P_IOA_Data;
	ioa=ioa|Set_E;
	*P_IOA_Data=ioa;             //E=1
	iob=*P_IOB_Data;
	Read_Data=iob&0x00ff;
	iob=*P_IOB_Data;
	iob=iob&Clear_E;             //E=0
	*P_IOB_Data=iob;
	return Read_Data;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -