微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 自制51单片机常用头文件(LCD1602)

自制51单片机常用头文件(LCD1602)

时间:11-10 来源:互联网 点击:

***************
函 数 名:void WriteCommandLCM()
功 能:向LCM1602中写入指令
说 明:向LCM中写入指令;如果BuysC=0时,忽略忙检测,如果BuysC=1时,不忽略忙检测
入口参数:WCLCM,BuysC
返 回 值:无
*****************************************************/
//写指令
void WriteCommandLCM(uchar WCLCM,BuysC) // BuysC为0时忽略忙检测
{
if (BuysC)
{
ReadStatusLCM(); // 根据需要检测忙
}

LCM_Data = WCLCM; // 写入指令

LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}

/*****************************************************
函 数 名:void LCMInit()
功 能:初始化LCM1602
说 明:LCM在工作前先要对显示屏初始化,否则模块无法正常工作
入口参数:无
返 回 值:无
*****************************************************/
//LCM初始化
void LCMInit(void)
{
LCM_Data = 0;
WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0); // 三次显示模式设置,不检测忙信号
Delay_LCD();
WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0); // 0x38指令表示:8位数据显示模式,俩行多显示
Delay_LCD();
WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,0);
Delay_LCD();

WriteCommandLCM(LCD_DISPLAY_DOUBLE_LINE,1); // 显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(LCD_DISPLAY_OFF,1); // 关闭显示
WriteCommandLCM(LCD_CLEAR_SCREEN,1); // 显示清屏
WriteCommandLCM(LCD_AC_AUTO_INCREMENT,1); // 显示光标移动设置
WriteCommandLCM(LCD_DISPLAY_ON,1); // 显示开及光标设置
}

/*****************************************************
函 数 名:void DisplayOneChar()
功 能:按指定坐标中写入数据
说 明:X-横坐标,Y-纵坐标,DData为ASCII值
入口参数:X,Y,DData
返 回 值:无
*****************************************************/
//按指定位置显示一个字符
void DisplayOneChar(uchar X, uchar Y, uchar DData)
{
Y &= 0x01;
X &= 0x0F; // 限制X不能大于15,Y不能大于1

if (Y)
{
X |= LINE2_HEAD; // 当要显示第二行时地址码:0xc0
}

X |= LINE1_HEAD; // 第一行的地址码:0x80
WriteCommandLCM(X, 0); // 这里不检测忙信号,发送地址码
WriteDataLCM(DData);
}
/*在LCD1602中使用此函数,在DIPS082中使用下面的函数
/*****************************************************
函 数 名:void DisplayListChar(uchar x,uchar y,uchar *DData)
功 能:向指定坐标中写入字符串(在LCD1602中使用此函数)
说 明:X-横坐标,Y-纵坐标
入口参数:X,Y,*DData
返 回 值:无
*****************************************************
//按指定位置显示字符串
void DisplayListChar(uchar x,uchar y,uchar *DData)
{
if (y == LINE1) // 判断是否写入第1行
{
if (x < LINE_LENGTH) // 写入位数
{
WriteCommandLCM(LINE1_HEAD+x,0); // 写入第1行地址

for (;x{
WriteDataLCM(*(DData++)); // 写入数据
}

if(*DData != \0) // 判断数据是否写完
{
x = 0; // 没写完写入第2行
y = LINE2;
}
}
}

if (y == LINE2) // 判断是否写入第2行
{
WriteCommandLCM(LINE2_HEAD+x,0); // 写入第2行地址

for (; x{
WriteDataLCM(*(DData++)); // 写入数据
}
}
}*/

/*****************************************************
函 数 名:void DisplayListChar(uchar X, uchar Y, uchar code *DData)
功 能:向指定坐标中写入字符串(在DIPS082中使用此的函数)
说 明:X-横坐标,Y-纵坐标
入口参数:X,Y,*DData
返 回 值:无
*****************************************************/
//按指定位置显示一串字符 ***原来的遇到空格0x20就不显示***
void DisplayListChar(uchar X, uchar Y, uchar code *DData)
{
uchar ListLength,j;

ListLength = strlen(DData); // strlen:读取字符串的长度
Y &= 0x1;
X &= 0xF; // 限制X不能大于15,Y不能大于1

if (X <= 0x0F) // X坐标应小于0xF
{
for(j=0; j{
DisplayOneChar(X, Y, DData[j]); // 显示单个字符
X++; // 横坐标加1,纵坐标不变
}
}
}

/*****************************************************
函 数 名:void Mychar()
功 能:自定义字符--CGRAM
说 明:LCM1602字符库中没有温度符号,自定义温度符号
入口参数:无
返 回 值:无
/*****************************************************/
void Mychar(void)
{
//---------自定义字符代码--00H------闹铃符号-------------
WriteCommandLCM(0x40,1); //第1行
WriteDataLCM(0x01);//
WriteCommandLCM(0x41,1); //第2行
WriteDataLCM(0x1b);//
WriteCommandLCM(0x42,1); //第3行
WriteDataLCM(0x1d);//
WriteCommandLCM(0x43,1); //第4行
WriteDataLCM(0x19);//
WriteCommandLCM(0x44,1); //第5行
WriteDataLCM(0x1d);//
WriteCommandLCM(0x45,1); //第6行
WriteDataLCM(0x1b);//
WriteCommandLCM(0x46,1); //第7行
WriteDataLCM(0x01);//
WriteCommandLCM(0x47,1); //第8行
WriteDataLCM(0x00);//
//---------自定义字符代码--01H-------温度符号------------
WriteCommandLCM(0x48,1); //第1行
WriteDataLCM(0x02);//
WriteCommandLCM(0x49,1); //第2行
WriteDataLCM(0x05);//
WriteCommandLCM(0x4a,1); //第3行 1------**--
WriteDataLCM(0x05);// 2----**--**
WriteCommandLCM(0x4b,1); //第4行 3----**--**
WriteDataLCM(0x02);// 4------**--
WriteCommandLCM(0x4c,1); //第5行 5----------
WriteDataLCM(0x00);// 6----------
WriteCommandLCM(0x4d,1); //第6行 7----------
WriteDataLCM(0x00);// 8----------
WriteCommandLCM(0x4e,1); //第7行
WriteDataLCM(0x00);//
WriteCommandLCM(0x4f,1); //第8行
WriteDataLCM(0x00);//
//---------自定义字符代码--02H-------当前时间------------
WriteCommandLCM(0x50,1); //第1行
WriteDataLCM(0x1f);//
WriteCommandLCM(0x51,1); //第2行
WriteDataLCM(0x11);//
WriteCommandLCM(0x52,1); //第3行
WriteDataLCM(0x15);//
WriteCommandLCM(0x53,1); //第4行
WriteDataLCM(0x11);//
WriteCommandLCM(0x54,1); //第5行
WriteDataLCM(0x1b);//
WriteCommandLCM(0x55,1); //第6行
WriteDataLCM(0x0a);//
WriteCommandLCM(0x56,1); //第7行
WriteDataLCM(0x1f);//
WriteCommandLCM(0x57,1); //第8行
WriteDataLCM(0x00);//
//-----------------------------------------------
}
#endif

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top