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

📄 lcd1602.txt

📁 很基础很实用的LCD1602源程序,调试通过,请大家放心参考!
💻 TXT
字号:
/****************************************************************/                                                                             
/*  LCD1602 4线并口通信源程序  EDN51实验板实验成功                                                 
/*  显示内容 cat_li's blog                       
/*     QQ 15942526
/* 连接方式:   DB4-DB7接P0.4-P0.7;
/*    RS:P1.0;
/*    RW:P1.1;
/*    EN:P1.2;
/*  作者: 好心情
/*  Date: 2007-11-15                                           
/****************************************************************/   
#include <reg51.h>
#define unchar unsigned char  //unchar 定义一下方便使用
/****************************************************************/
#define  LCD_IO P0    //DB4-DB7接P0.4-P0.7
 
sbit LCD_RS=P1^0; 
sbit LCD_RW=P1^1;   
sbit LCD_EN=P1^2;  
/****************************************************************/
void lcd_check_BF(void);   //读状态,忙检测 
void lcd_en_command(unchar command,bit bcheck); // 写指令
void lcd_en(void); //写使能,产生高脉冲,写入数据
void lcd_en_dat(unchar dat,bit bcheck);  //写数据
void lcd_set_add( unchar x, unchar y );  //设定地址
void lcd_write_char( unchar x,unchar y,unchar dat); //写字符
void lcd_write_string(unchar X,unchar Y,unchar *s); //写字符串
void lcd_init(void); //初始化
void delay_nms(unsigned int n);

/*************************LCD PART*******************************/


/***********************读状态忙检测*****************************/
/* 忙检测,无返回值 RS选指令寄存器,RW置为读状态,EN高电平读指令 */
/****************************************************************/
void check_BF(void)
{
 unchar read;
 LCD_RS = 0;
 LCD_RW = 1;
 LCD_IO = 0xff; // 将LCD_IO置为读状态
 LCD_EN = 1; 
 do
 {     
  read = LCD_IO ; 

 }while(read & 0x80); //如果BF位为1则继续读,否则退出
  LCD_EN = 0;   
}

/****************************写使能******************************/
/* 写使能,在EN脚产生高脉冲
/****************************************************************/
void lcd_en(void)
{
 LCD_EN=1;      
   LCD_EN=0; 
}


/****************************写指令******************************/
/* 写指令,RS=0选指令寄存器,RW=0选写模式,bcheck判断是否忙检测
/****************************************************************/  
void LCD_en_command(unchar command,bit bcheck)
{  
   if(bcheck)  //根据bcheck判断是否忙检测
 {
  check_BF();
 }

   LCD_RS=0;   
   LCD_RW=0;  
 LCD_IO = (command & 0xf0);  // 写指令的高4位 
   lcd_en();
  
 LCD_IO = (command & 0x0f)<<4;//写指令的第四位   
   lcd_en();
}


/****************************写数据******************************/
/* 写数据,RS=1选数据寄存器,RW=0写模式
/****************************************************************/
void LCD_en_dat(unchar dat,bit bcheck)
{   
   if(bcheck)
 {
  check_BF();
 }

 LCD_RS=1;    // 设置写模式和数据寄存器
 LCD_RW=0;

 LCD_IO = (dat & 0xf0);  //高四位 
 lcd_en();
 
 LCD_IO = (dat & 0x0f)<<4;//第四位
   lcd_en();
}


/****************************地址设置****************************/
/* 地址设置 x="0" 第一行 x="1" 第二行;y 设置每行从首地址开始的偏移量
/****************************************************************/
void LCD_set_add( unchar x, unchar y )
{
   unchar address;
   if (x ==0)
   { 
     address = 0x80 + y;
   }
   else
 { 
       address = 0xC0 + y;
 }
   lcd_en_command(address,1); 
}

/*****************************写字符*****************************/
/* 写字符 x y 为字符的位置地址,dat为要写入的字符
/****************************************************************/
void lcd_write_char( unchar x,unchar y,unchar dat)
{
   lcd_set_add(x,y);  // 设置地址
   lcd_en_dat(dat,1); // 写数据
}


/****************************写字符串****************************/
/* 写字符串 x y 为字符的位置地址,*s为要写入的字符串的首地址
/****************************************************************/
void lcd_write_string(unchar X,unchar Y,unchar *s)
{
    lcd_set_add( X,Y );  // 设置地址
    /* 字符串最后一位为自动加入的"\n",对应的ASCII值为0,其他为非零
 在这里利用s指向的内容值判断字符串是否结束*/ 
 while (*s)         
    {        
       lcd_en_dat(*s,1);   
     s ++; //指向下一个字符地址
    }
}
/*****************************初始化******************************/
void lcd_init(void)
{   
 delay_nms(15);  
   lcd_en_command(0x28,0);
   delay_nms(5);    
   lcd_en_command(0x28,0);
   delay_nms(5);
   lcd_en_command(0x28,0);
   delay_nms(5);
   lcd_en_command(0x28,1);   
   lcd_en_command(0x08,1); //关显示
 lcd_en_command(0x01,1); //清屏      
   lcd_en_command(0x0C,1); //开显示光标设置
   
}
/******************************延时*******************************/
void delay_nms(unsigned int n)      
{
    unsigned int i="0",j=0;
    for (i=n;i>0;i--)
     for (j=0;j<1140;j++);  
}
/*****************************************************************/


/*****************************************************************/

 

/*****************************************************************/
void main(void)
{
  lcd_init(); 
  while(1 )    
  {
    lcd_en_command(0x01,1);
 delay_nms(120);
    
    lcd_write_string(0,1,"cat_li's  blog");
    lcd_write_string(1,2,"QQ 15942526");
    delay_nms(120);          
  }
}


⌨️ 快捷键说明

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