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

📄 lcd1602.c

📁 AT89C52单片机的1602液晶显示
💻 C
字号:
#ifndef _LCD_H_
#define _LCD_H_
   
#define LCD_REG P1  	  // 液晶BD0~BD7与P0口相连    
sbit LCD_RS = P3^7;       // 液晶 RS  引脚与P2.0相接    
sbit LCD_RW = P3^6;       // 液晶 R/W 引脚与P2.1相接    
sbit LCD_E  = P3^5;       // 液晶 E   引脚与P2.2相接    
sbit LCD_BF = P1^7;       // 液晶 DB7 引脚与P0.7相接 Busy Flag
/*         
// LCD初始化    
void lcd_init(void);
   
// 设置显示位置(即写入显示地址),行列均从0开始    
void lcd_goto_xy(unsigned char x, unsigned char y);    
   
// 写字符(传入的参数实际为所需显示字符的地址,即液晶字符产生器中字符的地址)    
void lcd_putc(unsigned char c);    
// 写字符串    
void lcd_puts(unsigned char *s);
   
// 指定位置写字符    
void lcd_xy_putc(unsigned char x, unsigned char y, unsigned char c);    
// 指定位置写字符串    
void lcd_xy_puts(unsigned char x, unsigned char y, unsigned char *s);    
*/

// 产生使能脉冲      
void lcd_e_toggle()
{
	LCD_E = 1;    
    delay_2us(10);    
    LCD_E = 0;

}
	   
// 循环检测LCD忙标志(BF),直到其值为0,方可执行下一指令    
void lcd_wait_until_finish(void)    
{    
    LCD_RW = 1;              // 读    
    LCD_RS = 0;              // 指令
        
    LCD_E = 1;               // 读取信息            
    while(LCD_BF);           // 循环直至BF=0       
    LCD_E = 0;               // E重置为0    
}
    
//读光标地址
Uint8 lcd_get_loc(void)
{
	unsigned char loc;
	LCD_RW = 1;              // 读    
    LCD_RS = 0;              // 指令
        
    LCD_E = 1;               // 读取信息            
    while(LCD_BF);           // 循环直至BF=0
	loc = LCD_REG;
	LCD_E = 0;
	return loc;
}
   
// 公共函数    
// 向LCD写命令字    
void lcd_command(unsigned char cmd)    
{    
    LCD_RW = 0;              // 写    
    LCD_RS = 0;              // 指令   
        
    LCD_REG = cmd;     		 // 将命令字cmd送入LCD的数据端口
   	lcd_e_toggle();          // 使能脉冲,下降沿执行指令
    lcd_wait_until_finish(); // 等待执行完毕    
}    
   
// 设置显示位置(即写入显示地址),x,y均从0开始    
void lcd_goto_xy(unsigned char x, unsigned char y)    
{    
    unsigned char p = x;       // p为字符显示位置,即DDRAM中的地址,(0,0)显示位置为0x00            
    if (y==1)      
        p += 0x40;      // (0,1)显示位置为0x40       
    lcd_command(p + 0x80); // 写入显示地址时DB7须为高电平,加0x80    
}    
   
// 写字符(传入的参数实际为所需显示字符的地址,即液晶字符产生器中字符的地址)    
void lcd_putc(unsigned char c)    
{    
    LCD_RW = 0;               // 写    
    LCD_RS = 1;               // 数据    
        
    LCD_REG = c;        	  // 将字符c(实际上是字符的地址)送入LCD数据端口    
    lcd_e_toggle();           // 使能脉冲,显示读入数据    
    lcd_wait_until_finish();  // 等待完成    
}    
   
// 指定位置写字符    
void lcd_xy_putc(unsigned char x, unsigned char y, unsigned char c)    
{    
    lcd_goto_xy(x,y);    
    lcd_putc(c);    
}    
   
// 写字符串    
void lcd_puts(unsigned char *s)    
{    
    while(*s)        
        lcd_putc(*s++);      
}    
   
// 指定位置写字符串    
void lcd_xy_puts(unsigned char x, unsigned char y, unsigned char *s)    
{    
    lcd_goto_xy(x, y);    
    lcd_puts(s);    
}    
   
// LCD初始化    
void lcd_init(void)    
{   
	LCD_E = 0; 
    delay_50us(200);       	   //上电后适当延时,10ms	 
    lcd_command(0x38);         //00111000	8位,双行,5x7  
    lcd_command(0x06);         //00000110	光标右移,文字移动无效
    lcd_command(0x0c);         //00001100	显示功能开,显示光标关,光标闪烁关    
    lcd_command(0x01);         //00000001	清屏,光标复位
	lcd_goto_xy(0,0);
}
  
#endif	//LCD_H

⌨️ 快捷键说明

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