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

📄 lcm_1.c

📁 凌阳单片机驱动12864液晶
💻 C
字号:
#include "xing.h"
extern unsigned int *P_IOA_Data;
extern unsigned int *P_IOB_Data;
extern unsigned int *P_Watchdog_Clear;
extern unsigned int *P_IOB_Dir;
extern unsigned int *P_IOB_Attrib;
//===========================================================
//函数名称:void LCM_Check_Busy(void)
//函数作用:检测LCM是否处于忙状态
//无输入输出参数
//日期:2007.02.01
//==========================================================
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;
	*P_Watchdog_Clear=0x0001;
}

//==========================================================
//函数名称: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;
}

//===================================================================
//函数名称:void Draw_Picture(unsigned int *Point)
//函数作用:画图
//输入:数组起始地址
//返回:无
//作者:张丰盛
//日期:2007.02.07
//===================================================================
void Draw_Picture(unsigned int *Point)
{
	unsigned int i,j;
	unsigned int X,Y;
	unsigned int temp;
	
//绘图的初使化
	LCM_Write_Comm(0x0001);              //清屏
	LCM_Write_Comm(0x0032);              //功能设置---8BIT控制界面,绘图显示ON
	LCM_Write_Comm(0x0036);              //功能设置---8BIT控制界面,扩充指令集

//上半行	
	X=0x80;                             //X轴起始位置
	Y=0x80;                             //Y轴起始位置
	temp=0;                              //数组下标
	for(i=0;i<32;i++)		//行
	{   
		//temp=*Point;
	 
		LCM_Write_Comm(Y);              //先写垂直地址
		LCM_Write_Comm(X);              //后写水平地址
		for(j=0;j<16;j++,Point++)        //写完一行
		{
			temp=*Point;
			LCM_Write_Data(temp);	
		} 
		*P_Watchdog_Clear=0x0001;
          Y++;
         
	}
	
//下半行
    X=0x88;                 //X轴起始位置
	Y=0x80;                 //Y轴起始位置
	for(i=0;i<32;i++)		//行
	{
		LCM_Write_Comm(Y);              //先写垂直地址
		LCM_Write_Comm(X);              //后写水平地址
		for(j=0;j<16;j++,Point++)        //写完一行
		{
			temp=*Point;
			LCM_Write_Data(temp);	
		}
		*P_Watchdog_Clear=0x0001;
	    Y++;
	}				
}

//=======================================================

⌨️ 快捷键说明

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