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

📄 lcd1602_51.txt

📁 LCD1602显示程序头文件——51单片机的Proteus实验
💻 TXT
字号:
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:数字位数
返回值:无
************************************************************************/
void Disp_number(uint num,uchar n)
{ 
uchar a; //个位 
uchar b; //十位
uchar c; //百位
uchar d; //千位
// uchar e; //万位
switch(n)
{
case 1:LCD_wdata(num);
break;
case 2:b=num/10;
a=num%10;
LCD_wdata(number[a]);
LCD_wdata(number[b]);
break;
case 3:c=num/100;
b=num%100/10;
a=num%10;
LCD_wdata(number[a]);
LCD_wdata(number[b]);
LCD_wdata(number[c]);
break;
case 4:d=num/1000;
c=num%1000/100;
b=num%1000%100/10;
a=num%10;
LCD_wdata(number[a]);
LCD_wdata(number[b]);
LCD_wdata(number[c]);
LCD_wdata(number[d]);
break;
}

⌨️ 快捷键说明

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