【STC单片机学习】第十七课:LCD1602显示器

news/2024/11/24 11:49:11/

【朱老师课程总结 侵删】

第一部分、章节目录

1.17.1_2.LCD显示器相关背景1_2

1.17.3.开始学习LCD1602

1.17.4.LCD1602控制器的低层时序1

1.17.5.LCD1602控制器的低层时序2

1.17.6.代码实践


第二部分、随堂记录

1.17.1_2.LCD显示器相关背景1_2

1.17.1.1、LCD简介
(1)显示器
CRT显示器(大头电视)
LCD液晶显示器
LED液晶显示器等等

(2)LCD(Liquid Crystal Display),液晶显示器,原理介绍
液晶显示器的工作原理是利用液晶的物理特性,在通电时导通,使液晶排列变得有秩序,使光线容易通过;不通电时,排列则变得混乱,阻止光线通过。
透光率!
(3)LCD应用领域
平板电脑、笔记本电脑、手机屏幕、智能电视屏幕...
(4)LED OLED(被认为下一代显示器)
OLED:曲面屏,尤其三星


1.17.1.2、电子显示器的原理
(1)像素(分辨率):

  • 像素(px):组成图像的最小单位
  • 分辨率:屏幕分辨率是指纵横向上的最大像素点数
  • PPI:单位英寸下像素点数


拿画图做演示!

(2)显存(显卡内存):用来做显示的内存

  • 显存是用来存储要处理的图形信息的部件,用来存储像素数据
  • 显卡 = 显存+GPU+电路板+BIOS固件
  • 编程时,把要操纵的像素点存在显存里就不用管了!

(3)字模:字模就是字在点阵上显示时对应的编码

  • 要显示汉字或字符的时候会用到字模
  • 之前在LED点阵显示汉字的时候接触过
  • 字模不是唯一的:宋体、楷体、黑体、Time New Rome等等,同一个字不同字体对应的编码不同
    生成的字库说明

(4)字库:包含字模的库
     类似于活字印刷术
(5)控制器和驱动器

  • 显示器的控制器:控制芯片负责和CPU通信,更靠近软件。
  • 显示器的驱动器:以液晶显示器的驱动器为例,用来调制施加在液晶显示器件电极上的电位信号的相位、峰值、频率等,以建立驱动电场,以实现液晶显示期间的显示效果,更靠近硬件。
  • 编程时考虑控制器,驱动器不敏感。

(6)软件+硬件实现功能

  • 硬件只需了解,通过控制器来控制显存进而控制硬件来实现功能。


1.17.3.开始学习LCD1602


1.17.3.1、简介
(1)LCD1602简介

  • 16列x2行,显示器显示2行,每行16个字符。
  • 专门用来显示字母、数字、符号的点阵型液晶模块
  • 能显示32个字符,但是像素数不是32,因为一个字符是由多个像素组成的。有可能一个字符是由5*7=35个像素组成的,也有可能是由5*10=50个像素组成的。
  • LCD1602内置了字库。可以直接获取字模!

(2)不能显示中文

  • LCD1602带ASCII码字库,当我们想让LCD1602显示某个ASCII码字符时,只需要将这个字符对应的ASCII码发给LCD1602内部的控制器,控制器就会去查字库得到字模,然后将字模发给内部的驱动器去驱动LCD做显示。

(3)用途:用的很少,计算器中可以用到
查看源图像

1.17.3.2、原理图和接线引脚

(1)引脚:

  • 数据接口8个—DB0-DB7:并行传输数据
  • 控制接口3个—RS:数据/命令选择位(H/L)、RW:读/写选择位(H/L)、E:使能信号
  • 调节对比度1个:VO
  • VCC/GND4个:GND、VCC、BG VCC、BG GND:电源正负极和背光源正负极

(2)并行接口(DB0-DB7)
并行就是数据线有多根,每一根可以传输1个bit位,所以同时可以传输多个bit位。LCD1602有8根数据线,所以一次同时传输8个bit位。
(3)接线确认

  • LCD1602怎么接到开发板(演示)
  • MCU如何接LCD1602插排:已经接好了,只要sbit声明好就行



1.17.3.3、数据手册
点击SMC1602数据手册下载
(1)概念:LCM:LCD Module(LCD模组)
(2)主要技术参数解析
(3)引脚定义(结合原理图来对照分析)

(4)控制器接口说明(注意控制器型号)

RS=H时,D0-D7上传输的是数据
RS=L时,D0-D7上传输的是命令
RW=H时,表示我们要读
RW=L时,表示我们要写
E=H时,表示使能           
E=L时,表示禁止(禁能)

1.17.4.LCD1602控制器的低层时序1

1.17.4.1、关键点
(1)时序控制接口引脚


(2)状态字、指令码、数据,都是通过DB0-DB7数据接口
>>状态字:

  • 官方例程读写检测函数

STA0-6是当前地址的值,也就是光标!
控制器内部自带80*8位(80字节)的RAM缓冲区,如下所示:
RAM地址范围:

  • 官方例程坐标显示函数
  • 通过写指令来实现坐标配置

>>指令码:

  • 初始化:
    0x38(打开,5*7,8位数据)
  • 显示开/关设置:
    0x0C   打开显示,不显示光标
    0x08    关闭显示
    0x0F    打开显示并且显示光标并且光标闪烁

  • 光标设置:
    0x06(读写一个字符,地址指针和光标加一)

  • 清屏:
    0x01
  • 回车:
    0x02
  • 设置开始显示的坐标
    0x80+(0x00-0x0F)    第一行设置地址指针指令
    0x80+(0x40-0x4F)    第二行设置地址指针指令

    addr | 0x80,就可以实现addr加0x80,想一下为什么?

>>数据:
写数据直接只要设置好RS/RW/E,然后把数据放在DB0-DB7即可!因为数据是并行传输,可以同时传过去!

1.17.4.2、底层时序函数分析

  • Read_Busy()
  • Lcd1602_Write_Cmd()
  • Lcd1602_Write_Data()

1.17.5.1、读数据

  • 示例代码没有读数据这个函数。
  • 可以从LCD1602读出来数据,然后打印在串口内!

1.17.5.LCD1602控制器的低层时序2

1.17.5.1、RAM空间

(1)RAM地址范围(地址范围每行是00-39,但是我们每行只用00-16)

(2)数据是什么:
数据:要显示的字符的ASCII码编码值
写数据方式:

  • 字符串" " 或者 字符 ' '
  • 直接发ascii码表中的编码值             

1.17.6.代码实践

//main.c
#include "lcd1602.h"void LCD_init(void);
void LCD_show(u8 *str);
void main(void)
{u8 str[] = "hello,everyone!";LCD_init();LCD_show(str);while(1);
}void LCD_init(void)
{Lcd1602_Write_Cmd(0x38); //初始化Lcd1602_Write_Cmd(0x0C); //显示开/关设置Lcd1602_Write_Cmd(0x06); //光标设置Lcd1602_Write_Cmd(0x01); //清屏LCD_setcursor(0,0);
}
void LCD_show(u8 *str)
{while(*str != '\0'){Lcd1602_Write_Data(*str);str++;}
}
//lcd1602.h
#ifndef __LCD1602_H_
#define __LCD1602_H_#include <reg51.h>#define  u8  unsigned char
#define  u16  unsigned int
#define LCD_DB  P0  //DB0-DB7sbit LCD_EN = P2^7;
sbit LCD_RS = P2^6;
sbit LCD_WR = P2^5;void RW_Busy();  //忙检测函数
void Lcd1602_Write_Cmd(unsigned char cmd);   //写命令
void Lcd1602_Write_Data(unsigned char dat);  //写数据
void LCD_setcursor(u8 x,u8 y); //设置坐标#endif
//lcd1602.c
#include "lcd1602.h"void RW_Busy()  //忙检测函数,读状态
{unsigned char sta;    LCD_DB = 0xff;		//LCD_RS = 0;LCD_WR = 1;do{LCD_EN = 1;sta = LCD_DB;LCD_EN = 0;    //使能,用完就拉低,释放总线}while(sta & 0x80);//判断第7位是否为0
}
void Lcd1602_Write_Cmd(unsigned char cmd) //写命令
{RW_Busy();LCD_RS = 0;LCD_WR = 0;LCD_DB = cmd;LCD_EN = 1;LCD_EN = 0;	
}
void Lcd1602_Write_Data(unsigned char dat) //写数据
{RW_Busy();LCD_RS = 1;LCD_WR = 0;LCD_DB = dat;LCD_EN = 1;LCD_EN = 0;
}
void LCD_setcursor(u8 x,u8 y) //设置坐标
{unsigned char addr;if(y == 0)addr = 0x00 + x;elseaddr = 0x40 + x;Lcd1602_Write_Cmd(addr|0x80);}

本节课程序下载链接:LCD1602

本节课结束!


http://www.ppmy.cn/news/429998.html

相关文章

显示器的维护与故障处理

一&#xff0e;显示器的使用维护&#xff1a; 1.显示器的放置应尽量远离强磁场&#xff0c;如高压电线、音箱等&#xff0c;否则显像管容易被磁化。 2.使用时尽量将显示器面向东方&#xff0c;因显示器出厂调整是面向东方进行的&#xff0c;这样可以使显示器受地球磁场的影响最…

电脑显示器基本设置与故障处理

随着个人电脑进入千家万户&#xff0c;作为电脑的主要设备之一的显示器也迅速在寻常百姓家普及。因为显示器要和电脑匹配使用&#xff0c;所以需要一定的微机方面基础知识&#xff0c;而刚接触到它的人还比较陌生。下面就显示器在使用过程中的注意事项及常见问题向大家作一些介…

【三色N95pro显示器驱动板烧录-维修小记】

本人手头三台166Hz电竞屏&#xff0c;用来和朋友开黑吃鸡用&#xff0c;暑假其中一台玩到高潮时间歇性黑屏&#xff0c;让我们一直嘲笑他的人品&#xff0c;结果一周后我这台也开始不断黑屏&#xff0c;难道显示器故障还能传染? 元旦放假我就把这两台机器折开&#xff0c;其中…

投影机检测不到计算机信号,将投影机连接到计算机后,没有信号,如何排除原因?...

当需要使用投影仪时,将投影仪连接到笔记本电脑不会出现信号故障. 这确实不是一件好事. 延迟业务可能会很麻烦. 如果投影机没有信号怎么办?让我们看一下解决方案! 1. 计算机已连接到投影仪,并且投影仪没有信号. 简单的方法和步骤是: 1)确保投影仪和笔记本电脑正确连接,并且…

win7 无显示器 服务器,win7显示器无信号怎么办?电脑显示器无信号修复方法

在使用电脑的时候&#xff0c;我们往往离不开显示器。如果显示器出现无信号的情况&#xff0c;那么我们应该如何解决呢&#xff1f;显示器无信号&#xff0c;我们需要先判断是什么故障&#xff0c;然后才能加以解决。那么下面就让小编为大家带来电脑显示器无信号修复方法。 解决…

电脑显示器的相关设置与常见故障排除方法

一、如何达到最佳使用效果 1.显示器刷新率的设置&#xff1a;刷新率即场频&#xff0c;指每秒钟重复绘制画面的次数&#xff0c;以hz为单位。刷新率越高&#xff0c;画面显示越稳定&#xff0c;闪烁感就越小。一般人的眼睛对于75hz以上的刷新率基本感觉不到闪烁&#xff0c;85h…

2023年05月份青少年软件编程Scratch试卷三级真题

2023-05 Scratch三级真题 分数&#xff1a;100 题数&#xff1a;38 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 关于变量&#xff0c;下列描述错误的是&#xff1f;&#xff08;A&#xff09;&#xff08;2分&#xff09; &#xff08;变量那一栏…

代码审计——命令执行详解

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 命令注入是指因为系统使用了可以执行命令的危险函数&#xff0c;但是调用这些函数的参数可控&#xff0c;并没有做过滤或过滤不…