proteus仿真之LCD1602字符串显示实验

LCD1602简介

主要技术参数

显示容量16*2个字符
芯片工作电压4.5~5.5V
工作电流2.mA(5.0V)
字符尺寸2.95*4.35(WXH)mm

接口信号说明

编号符号引脚说明
1VSS电源地
2VDD电源正极
3VL液晶显示偏压信号
4RS数据/命令选择端
5R/W读/写选择端
6E使能端
7~14D0~D7Data I/O
15BLA背光源正极
16BLK背光源负极

1、基本时序:

1.1 读状态: 输入:RS=L,RW=H,E=H 输出:D0~D7=状态字
1.2 写指令:输入:RS=L,RW=L,D0~D7=指令码,E=高脉冲 输出:无
1.3 读数据:输入:RS=H,RW=H,E=H 输出:D0~D7=数据
1.4 写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲, 输出:无

2、状态字说明

STA7STA6STA5STA4STA3STA2STA1STA0
D7D6D5D4D3D2D1D0
STA0~6当前数据地址指针的数值
STA7读写操作使能1:禁止 0:允许

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
proteus仿真之LCD1602字符串显示实验。
效果如下图:
在这里插入图片描述
源程序如下:

// 用LCD显示字符 ' abcd ’
#include<reg52.h>  // 包含单片机寄存器的头文件
#include<intrins.h>	  // 包含 _nop_() 函数定义的头文件
typedef unsigned char uchar;
typedef unsigned int uint;

sbit LCD_RS = P1^0;	  // 数据/命令选择端
sbit LCD_RW = P1^1;	  // 读/写选择端
sbit LCD_EN = P1^2;	  // 使能端
sbit LCD_BF = P0^7;	  // 忙碌标志位




// 延时函数		1ms	  (3j+2)*i=(3x33+2)x10=1010(微秒)   可以认为是1毫秒
	void delay1ms()
	{
	  uchar i,j;
	  for(i=0;i<10;i++)
	  for(j=0;j<33;j++);
	} 

// 延时若干毫秒  人口参数:n
void delay(uchar n)
 {
   uchar i;
   for(i=0;i<n;i++)
   delay1ms();
 }


/***************************************************
 函数功能:判断液晶模块的忙碌状态
 返回值:result。 result=1,忙碌, result=0 ,不忙
****************************************************/
 uchar Busy_Test()
  {
  	bit result;
	LCD_RS = 0;  // 根据规定,RS为低电平,RW为高电平时,可以读状态
	LCD_RW = 1;
	LCD_EN = 1;  // E=1时,才可以读写
	_nop_();     //空操作
	_nop_(); 
	_nop_();
	_nop_();     // 空操作四个机器周期,给硬件反应时间
	result = LCD_BF; //将忙碌标志电平赋给result
	LCD_EN = 0;
	return result;

  }

  /*********************************************
   函数功能:将模式指令或显示地址写入液晶模块
   人口参数:dictate
  *********************************************/
  void Write_Instruction(uchar dictate)
   {
   	while(Busy_Test() == 1);  // 如果忙碌就等待
	LCD_RS = 0;    // 根据规定,RS和R/W同时为电平时,可以写人指令
	LCD_RW = 0;
	LCD_EN = 0;   // E置低电平(根据表8-6,写指令时,E为高脉冲)
	              // 就是让E从0到1发生跳变,所以先置0
	_nop_();
	_nop_();      // 空操作两个机器周期,给硬件反应时间

	P0 = dictate;
	_nop_();
	_nop_();
	_nop_();
	_nop_();     // 空操作四个机器周期,给硬件反应时间

	LCD_EN = 1;		// E 置高电平

	_nop_();
	_nop_();
	_nop_();
	_nop_();     // 空操作四个机器周期,给硬件反应时间

	LCD_EN = 0 ;   // 当 E 由高电平跳变到低电平时,液晶模块开始执行
   }

   /*********************************************
    函数功能 : 指定字符显示的实际地址
	人口参数:x
   *********************************************/
  void Write_Address(uchar x)
   {
   	 Write_Instruction(x|0x80);  // 显示位置的确定方法规定为 “80H+地址码x”
   }

   /****************************************************
    函数功能 :将数据(字符的标准ASCII码)写入液晶模块
	人口参数 :y(为字符常量)
   ****************************************************/
   void Write_Date(uchar y)
    {
	  while(Busy_Test() == 1);
	  LCD_RS = 1;  // RS为高电平,RW为低电平时,可以写入数据
	  LCD_RW = 0;
	  LCD_EN = 0;	// E置低电平(根据表8-6,写指令时,E为高脉冲)
	               // 就是让E从0到1发生跳变,所以先置0
	 P0 = y;	   // 将数据送入P2口,即将数据写入液晶模块

	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();     // 空操作四个机器周期,给硬件反应时间
	 
	 LCD_EN = 1;
	 
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();     // 空操作四个机器周期,给硬件反应时间
	 
	 LCD_EN = 0;
	    
	}
  /******************************************************
   函数功能 :对LCD是显示模式进行初始化设置
  ******************************************************/
 void Lcd_Init(void)
  {
   Busy_Test();
   delay(15);    //延时15ms,首次写指令时应给LCD一段较长的反应时间
   Write_Instruction(0x38);  // 显示模式设置:16 x 2 显示,5 x 7 点阵,8位数据接口
   delay(5);   // 延时5ms
   Write_Instruction(0x38);
   delay(5);
   Write_Instruction(0x0E); // 显示模式设置:显示开,
   delay(5);
   Write_Instruction(0x0d);	 // 显示模式设置:光标右移,字符不移
   delay(5);
   Write_Instruction(0x01);	 //清屏指令,将以前的显示内容清除
   delay(5);

  }																						

  
  void main(void)
   {
    uchar date[4] = {"acbd"};
	uchar i;
   	Lcd_Init(); //调用LCD初始化函数
	Write_Address(0x00); // 将显示地址指定为第一行第1列
	for (i=0;i<4;i++)
	 {
	   Write_Date(date[i]);
	 }
	while(1);
   }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值