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

📄 lcd1602.txt

📁 LCD1602液晶显示头文件。希望对有需要的人有帮助
💻 TXT
字号:
/*
*************************************************************************************
摘    要: 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 + -