基于51单片机的 Proteus液晶显示LM016L仿真

液晶显示LM016L简要介绍

首先是LM016L液晶显示屏的简单介绍:(啊!其实我一直没有搞懂!)

  • LM016L的结构:LM016L 液晶模块采用 HD44780控制器。HD44780具有简单而功能较强的指令集,可以实现字符移动、闪烁等功能。LM016L与单片机 MCU (Microcontroller Unit)通讯可采用8位或者4位并行传输两种方式。HD44780控制器由两个8位寄存器、指令寄存器(IR)和数据寄存器(DR)、忙标志(BF)、显示数据RAM( DDRAM)、字符发生器ROM(CGROM)、字符发生器RAM (CGRAM)、地址计数器(AC)。IR用于寄存指令码,只能写入不能读出;DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从 DDRAM和 CGRAM读出的数据;BF为1时,液晶模块处于内部处理模式,不响应外部操作指令和接受数据;DDRAM用来存储显示的字符,能存储80个字符码;CGROM由 8位字符码生成57点阵字符160种和510点阵字符32种,CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个57点阵字符或者4个510点阵字符;AC可以存储DDRAM和 CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM单元。

  • LM016L引脚说明:
    LM016L引脚说明
    读/写以及指令/数据功能——与RS,R/W组合得到;

  • LM016L的控制指令:通过对HD44780写入控制指令,HD44780产生显示驱动信号来驱动LMO16L。HD44780的控制指令主要有:清除显示(Clear Display)、地址归位 (Return Home)、输入模式设定(Entry Mode Set)、显示开/关控制(Display On/Off Control)、功能设定(Function Set)、设定CGRAM的地址(Set CGRAM Address)、设定 DDRAM 的地址(Set DDRAM Address)、写 DDRAM/CGRAM (Write Date to DDRAMICGRAM)、读忙标志和地址(Read Busy Flagand Address)以及从 DDRAM和 CGRAM 中读数据(Read Date from DDRAM/CGRAM)。
    具体指令解析,可以参见:LM016L指令解析

  • LM016L的DDRAM地址:
    LM016L实际就是1602LCD,即一行可以显示16个字,可以显示两行,第一行起始地址是0x00,第二行起始地址是0x40;实际要向相应地址内写入内容的话,需要先将光标定位到相应位置——写入指令0x80+0x00或者0x80+0x40,对应单元写入数据之后AC会自动+1,另外在初始化的时候可以设置光标自动右移;
    在这里插入图片描述

  • LM016L的读写时序:
    LM016L的读时序
    LM016L写时序

基于Proteus的LM016L显示仿真:

代码中包含LM016L读指令(检查忙信号)、写指令、写数据、初始化:

#include <reg52.h>  
#include <intrins.h>

#define NOP    _nop_()
#define noACK 0
#define ACK 1
#define uint unsigned int
#define uchar unsigned char

sbit E=P3^0;				//LCD使能端口定义 
sbit RW=P3^1;				//LCD读写使能端口定义
sbit RS=P3^2;				//LCD数据/命令选择方式端口定义
sbit bflag=P2^7;			//LCD忙指示端口,高电平为忙

void busy_1602()		   //判忙LCD忙闲? 
{  
   do
   {
   	P2=0xff;
    RS=0;		//RS=0,RW=1时才可读忙信号
	RW=1;
	E=0;
	_nop_();
	//读取P2口数据,读取bflag
	E=1;
   }while(bflag);	//当其值为0时,表示不忙,才可以接收命令或者数据信号
}

void wreg_1602(unsigned char com)	 //函数功能:写指令函数 
{
   busy_1602();
   RS=0;		//当RS=0,RW=0时,表明写入的是命令
   RW=0;
   E=1;
   P2=com;		//当使能由高到低时,LCD执行相应命令
   E=0;
}

void wdata_1602(unsigned char dat)	 //函数功能:写数据函数 
{
   busy_1602();
   RS=1;		//当RS=1,RW=0时,表明写入的是数据
   RW=0;
   E=1;
   P2=dat;		//当使能由高到低时,LCD执行相应命令
   E=0;
}

void lcd_pos(unsigned char pos)	//函数功能:指定数据显示地址
{
	wreg_1602(pos | 0x80);		//命令8,最高位必须为1,第一行最左边地址为0x00;第二行为0x40    指令8
}

void init_1602()			 //函数功能:设置LCD_1602的开显示 光标不闪烁等的功能 
{
   wreg_1602(0x38);			//指令6,8位数据总线,双行显示,每位采用5*7点阵  指令6
   wreg_1602(0x08);			//指令4,关显示,关光标,无闪烁                  指令4
   wreg_1602(0x06);			//指令3,光标自动右移,文字不移动                指令3
   wreg_1602(0x01);			//指令1,清显示                                  指令1
   wreg_1602(0x0c);			//指令4,开显示                                  指令4
}

void main(void)
{
   init_1602();
   while(1)
   {
	lcd_pos(0x00+0x04);			//第一行
	//按道理第一行起始地址是0x00就ok
	//但是考虑让显示居中一下,就从中间某个位置开始,就+0x04,即前面没写
	wdata_1602('L');
	wdata_1602('M');
	wdata_1602('0');
	wdata_1602('1');
	wdata_1602('6');
	wdata_1602('L');
	wdata_1602('1');

	lcd_pos(0x40+0x04);			//第二行
	//+0x04同第一行解释
	wdata_1602('L');
	wdata_1602('M');
	wdata_1602('0');
	wdata_1602('1');
	wdata_1602('6');
	wdata_1602('L');
    wdata_1602('2');	 
   }	
}

仿真显示结果如下:
在这里插入图片描述

此工程是老师给出的示例工程,在此只是记录自己的学习过程,整理笔记,若有不妥,戳我戳我!俺改!🤡

  • 42
    点赞
  • 271
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 基于51单片机的数控可调稳压电源是一种能够根据负载的电压需求调整输出电压的电源系统。Proteus是一种电子电路仿真软件,可以帮助我们进行电路的设计和仿真。 在Proteus中,我们可以使用51单片机的模型来设计数控可调稳压电源的电路。首先,我们需要绘制一个适合的电路图,包括51单片机、电源电路和稳压电路。 在电源电路中,我们可以选择使用变压器、整流电路和滤波电路来将交流电转换为直流电。然后,将直流电输入稳压电路中,稳压电路可以采用反馈控制的方式来控制输出电压的稳定性。在稳压电路中,我们可以使用稳压芯片或者自己设计的反馈电路。 51单片机作为主控制器,可以通过检测输出电压和负载电流来动态地调整稳压电源的输出电压。通过编程,我们可以实现根据负载的电压需求进行动态调整。例如,当负载电压下降时,51单片机可以检测到并通过反馈信号调整稳压电流的输出,使其恢复到设定的目标电压。 除了电路设计,Proteus还可以进行电路的仿真,我们可以通过添加合适的信号源、示波器等元件来模拟电路的输入和输出情况。通过仿真,我们可以验证电路的性能和稳定性,优化电路设计。 总之,基于51单片机的数控可调稳压电源可以通过Proteus进行电路设计和仿真。通过设计合适的电路图和使用51单片机进行动态控制,我们可以实现电源输出电压的稳定调节,并通过Proteus进行仿真验证电路的性能。 ### 回答2: 基于51单片机的数控可调稳压电源proteus仿真,主要是通过使用Proteus软件来模拟51单片机及其外围电路,实现数控可调稳压电源的功能。 首先,在Proteus中创建一个新的项目,选择适合的51单片机型号并添加到项目中。然后,通过连线连接所需的电路元件,包括电源输入、电路滤波、稳压电路、AD转换器和显示装置等。 其次,根据设计要求,编写51单片机的程序代码,其中包含了控制稳压电源输出电压的关键算法。代码中通过AD转换获取输入电压,并通过调节PWM信号来控制稳压电路的输出电压,从而实现可调稳压的功能。 接着,在Proteus中进行仿真。利用Proteus仿真功能,可以模拟稳压电源输出电压的变化、数码显示装置的显示效果等。可以设置输入电压的变化曲线,观察稳压电源在不同输入情况下的输出电压是否符合要求。 最后,分析仿真结果。根据仿真结果评估电路设计的稳定性和可靠性。如果稳压电源输出电压在设定范围内,且能够随输入变化而调整,则说明设计成功;反之则需要进行修改和优化。 总结来说,通过Proteus仿真,可以帮助我们验证基于51单片机的数控可调稳压电源的设计方案,减少不必要的实验和调试,节约时间和成本。同时,也能够提供电路稳定性和可靠性方面的信息,为后续的实际制作和使用提供参考。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值