LCD1602显示程序头文件——51单片机的Proteus实验
本文转载自小波电子工作室。
C语言源代码/*
*************************************************************************************
摘 要: LCD1602显示程序头文件,到时在主程序里包含这个头文件后,
就可以直接调用里面的函数了
版 本: V1.0
完成日期: 2008.5.5
作 者: ZHOUSFE
*******************************************************************************
修改日期:
版 本:
******************************************************************************/
#i nclude "delay.h"
#define uchar unsigned char
#define uint unsigned int
#define Port P0 //数据端口
/*定义端口*********************************************************/
sbit Rs = P1^0;
sbit Rw = P1^1;
sbit En = P1^2;
/*定义LCD控制字*****************************************************/
//清屏及光标归位
#define LCD_CLEAR 0x01 // 清屏
#define LCD_HOMING 0x02 // 光标返回左上角字符串函数的头文件
//显示开关控制指令
#define LCD_SCREEN_ON 0x0C //显示开
#define LCD_SCREEN_OFF 0x08 //显示关
#define LCD_CURSOR_ON 0x0A //显示光标
#define LCD_CURSOR_OFF 0x08 //无光标
#define LCD_C_FLASH_ON 0x09 //光标闪动
#define LCD_C_FLASH_OFF 0x08 //光标不闪动
//进入模式设置指令
#define LCD_AC_UP 0x06 //新数据后光标右移
#define LCD_AC_DOWN 0x04 //新数据后光标左移
#define LCD_S_MOVE_ON 0x05 // 画面可平移
#define LCD_S_MOVE_OFF 0x04 //画面不可平移
//设定显示屏或光标移动方向指令
#define LCD_C_LEFT 0x10 //光标左移1格,且AC值减1
#define LCD_C_RIGHT 0x11 //光标右移1格,且AC值加1
#define LCD_CHAR_LEFT 0x18 //显示器上字符全部左移一格,但光标不动
#define LCD_CHAR_RIGHT 0x1C //显示器上字符全部右移一格,但光标不动
uchar code number[10]={"0123456789"};
/*所有函数声明*********************************************************/
void LCD_init(void);
void LCD_wdata(uchar wdata);
void LCD_wcommand(uchar lcd_cmd,busy_f);
void LCD_gotoxy(uchar x,uchar y);
void Disp_char(uchar *str);
void Disp_number(unsigned int num);
uchar Rstatus(void);
uchar LCD_rdata(void);
/*
********************************************************************
函数名称:LCD_wcommand()
功能描述:LCD写指令
入口参数:uchar lcd_cmd:命令字,uchar busy_f:忙检测标志位
返回值:无
********************************************************************
*/
void LCD_wcommand(uchar lcd_cmd,busy_f)
{
if (busy_f) Rstatus(); //不忙才执行下个程序
Port = lcd_cmd;
Rs = 0;
Rw = 0;
En = 0;
En = 0;
En = 1;
}
/*********************************************************************
函数名称:LCD_wdata()
功能描述:LCD写数据
入口参数:uchar wdata:所写数据
返回值:无
*********************************************************************/
void LCD_wdata(uchar wdata)
{
Rstatus();
Port = wdata;
Rs = 1;
Rw = 0;
En = 0; //若晶振速度太高可以在这后加小的延时
En = 0; //延时
En = 1;
}
/*********************************************************************
函数名称:LCD_rdata()
功能描述:LCD读数据
入口参数:无
返回值:所读数据
*********************************************************************/
uchar LCD_rdata(void)
{
Rs = 1;
Rw = 1;
En = 0;
En = 0;
En = 1;
return Port;
}
/*********************************************************************
函数名称:Rstatus()
功能描述:LCD读忙状态
入口参数:无
返回值:若忙,则等待,不忙则返回Port
*********************************************************************/
uchar Rstatus(void)
{
Port = 0xFF;
Rs = 0;
Rw = 1;
En = 0;
En = 0;
En = 1;
while (Port & 0x80); //检测忙信号,不忙则退出等待
return(Port);
}
/*********************************************************************
函数名称:LCD_init()
功能描述:LCD初始化
入口参数:无
返回值:无
*********************************************************************/
void LCD_init(void)
{
Port = 0;
LCD_wcommand(0x38,0); //三次显示模式设置,不检测忙信号
delay_ms(3);
LCD_wcommand(0x38,0);
delay_ms(3);
LCD_wcommand(0x38,0);
delay_ms(3);
LCD_wcommand(0x38,1); //显示模式设置(0X38双行(5*7),0X34单行(5*10)),0X30单行(5*7);开始要求
每次检测忙信号
LCD_wcommand(0x08,1); //关闭显示
LCD_wcommand(0x01,1); //显示清屏
LCD_wcommand(0x06,1); // 显示光标移动设置
LCD_wcommand(0x0C,1); // 显示开及光标设置
}
/*********************************************************************
函数名称:LCD_gotoxy()
功能描述:定位到(x,y)位置
入口参数:x为行(0~1),y为列(0~15)
返回值:无
*********************************************************************/
void LCD_gotoxy(uchar x, uchar y)
{
x &= 0x1; //限制x不能大于1,y不能大于15
y &= 0xF;
if(!x) LCD_wcommand(0x80|y,1);
else LCD_wcommand(0xC0|y,1);
}
/*********************************************************************
函数名称:Disp_char()
功能描述:显示字符或字符串
入口参数:字符或字符串
返回值:无
**********************************************************************/
void Disp_char(uchar *str)
{
while(*str!='\0')
{
LCD_wdata(*str);
str++;
}
}
/*********************************************************************
函数名称:Disp_number()
功能描述:显示四数字
入口参数:num:显示的数字 n:数字位数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论