📄 lcm_1.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 + -