【无标题】

芯片功能及特性

1、引脚及使用.

VDD 电源正接5V电压
VSS 电源负接地
VEE(VL)液晶显示偏压信号,通过下图可变电阻,给VSS供不通电压,以调节对比度。对比度过低,亮区和未亮区无法区分;
在这里插入图片描述
2、内部芯片逻辑
在这里插入图片描述

时序

读操作时序

1、先置E=0
2、再设置  RS  RW 
3、再经过tsp1至少30ns(为了数据的有效建立),51单片机无需延时,其他运行速度快的MCU需要延时;
4、拉高E     
5、再经过tpw至少150ns(为了数据的有效读取),根据主机运行语句速度判断是是否加延时;_nop_();
6、读取数据;
7、拉低E;(作读写保护,防止异常)
8、全程都在使用RS RW  E,因此无需考虑拉高电平保持在引脚常态;

写操作时序

1、先置E=0
2、再设置  RS  RW 
3、写入数据到引脚,最好在RSRW写入后再写入数据
4、再经过tsp2至少40ns(为了数据的有效建立);
5、才可拉高E     
6、再经过tpw至少150ns(为了数据的有效读取);
7、拉低E;(作读写保护,防止异常)
8、全程都在使用RS RW  E,因此无需考虑拉高电平保持在引脚常态;

在这里插入图片描述
在这里插入图片描述

1、忙检测及AC值的读取。

//忙检测函数
#define LCD1602_DATA P0        //LCD的数据口
sbit LCD1602_BUSY=LCD_DATA^7;  //LCD忙信号位
int code LCD1602_AC_read;         
void LCD1602_busy(void)   //检测LCD状态,看它是不是还在忙呢
{
	 while(1)
	  {
	  	   LCD1602_EN=0;
		   LCD1602_RS=0;              //RS、RW为01,也只有忙检测或读取AC值时  
		   LCD1602_RW=1;
		   LCD1602_DATA=0xff;
		   LCD1602_EN=1;              //属于读数据  EN上升沿触触,读完之后回低电平
		   if(!LCD_BUSY) 
		    {
			AC_read=LCD_DATA;   //读取AC值,若无需读取AC可删去
			break;              //忙就循环直到不忙中断
			}	     
	  }
	 LCD_EN=0;
}

在这里插入图片描述

1、写数据指令

写数据指令分为写数据到LCD1602和写指令到1602;

void Lcd1602_Write_Data(unsigned char dat)   //写数据
{
      LCD1602_busy();
      LCD1602_RS = 1;
      LCD1602_RW = 0;           //RS、RW为01,也只有写数据时  
      LCD1602_DB = dat;
      LCD1602_EN = 1;          //属于写数据  EN=0写入引脚,再EN拉高写入LCD1602,再下降LCD写入LCD1602结束
      LCD1602_EN = 0;
}
void LCD_prints(unsigned char *lcd_string)       //输出一个字符串到LCD
{
 unsigned char i=0;
 while(lcd_string[i]!=0x00)
  {
   LCD_write_data(lcd_string[i]);
   i++;
  } 
}
void LCD_WriteCommand(unsigned char Command)       //写指令    与写数据的区别在于RS   RW 不同
{
		LCD_RS = 0;
		LCD_RW = 0;
		LCD_DataPort = Command;
		LCD_E  = 1;
		Delay1ms();
		LCD_E  = 0;
		Delay1ms();
		
}

在这里插入图片描述

3、读数据存在问题,待详细

#define LCD1602_DATA P0        //LCD的数据口
sbit LCD1602_BUSY=LCD_DATA^7;  //LCD忙信号位
int code LCD1602_AC_read;         
void LCD1602_busy(void)   //检测LCD状态,看它是不是还在忙呢
{
	  	   LCD1602_busy();
	  	   LCD1602_EN=0;
		   LCD1602_RS=1;              //RS、RW为01,也只有忙检测或读取AC值时  
		   LCD1602_RW=1;
		   LCD1602_DATA=0xff;
		   LCD1602_EN=1;              //属于读数据  EN上升沿触触,读完之后回低电平
		   AC_read=LCD_DATA;   //读取AC值,若无需读取AC可删去
		   LCD_EN=0;
			}	     
}

在这里插入图片描述

初始化设置

#define LCD_GO_HOME               0x02         //AC=0,光标、画面回HOME位

//输入方式设置
#define LCD_AC_AUTO_INCREMENT     0x06         //数据读、写操作后,AC自动增一
#define LCD_AC_AUTO_DECREASE      0x04         //数据读、写操作后,AC自动减一
#define LCD_MOVE_ENABLE           0x05         //数据读、写操作,画面平移
#define LCD_MOVE_DISENABLE        0x04         //数据读、写操作,画面不动

//设置显示、光标及闪烁开、关
#define LCD_DISPLAY_ON            0x0C         //显示开
#define LCD_DISPLAY_OFF           0x08         //显示关
#define LCD_CURSOR_ON             0x0A         //光标显示
#define LCD_CURSOR_OFF            0x08         //光标不显示
#define LCD_CURSOR_BLINK_ON       0x09         //光标闪烁
#define LCD_CURSOR_BLINK_OFF      0x08         //光标不闪烁

//光标、画面移动,不影响DDRAM
#define LCD_LEFT_MOVE             0x18         //LCD显示左移一位
#define LCD_RIGHT_MOVE            0x1C         //LCD显示右移一位
#define LCD_CURSOR_LEFT_MOVE      0x10         //光标左移一位
#define LCD_CURSOR_RIGHT_MOVE     0x14         //光标右移一位

//工作方式设置
#define LCD_DISPLAY_DOUBLE_LINE   0x38         //两行显示
#define LCD_DISPLAY_SINGLE_LINE   0x30         //单行显示

void LCD_initial(void)                        //初始化LCD
{
 LCD_write_instruction(LCD_AC_AUTO_DECREASE|LCD_MOVE_DISENABLE);	  //自动增1   画面不移动  (LCD_AC_AUTO_DECREASE|LCD_MOVE_DISENABLE)
 LCD_write_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF); 				  //显示开,光标不显示
 LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE);					  //两行显示
 LCD_cls();															  //清屏
}

在这里插入图片描述

函数集

初始化函数
写一个字符函数
写一串字符函数
写入显示地址函数
写数据到CGRAM函数

字模软件的使用

函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值