51单片机-液晶屏代码讲解

发布者:心灵捕手最新更新时间:2021-10-14 来源: eefocus关键字:51单片机  1602液晶屏  指针 手机看文章 扫描二维码
随时随地手机看文章

关于指针和1602液晶屏的知识讲解我们就不赘述了,《手把手教你学51单片机》文档第12,13章有很详细的讲解,我们也不用再自己搞些与众不同的驱动代码,没必要再“重新发明轮子”,只需直接移植使用宋老师为我们写好的代码就好。那么宋老师的液晶屏代码原理他也在文档详细讲解了,大家只需反复细读都会掌握的了的,这里笔者只对部分代码做出一些解释。打开宋老师的代码lesson12_4。


1.显示字符的执行操作

如果我们需要在液晶屏上显示下图的内容

11.1.png

那么在代码上需要一步步地操作来完成。


首先设置好液晶屏的使用指标,比如需要“16*2显示,5*7点阵”、“显示器开,光标关闭”、“文字不动,地址自动+1”,这些叫做液晶屏的初始化,表明液晶屏要正常显示内容就需要提前配置好这些工作。


比如我们要设置液晶屏“显示器开,光标关闭”的功能,需要给液晶屏写入命令的字节为0x0C。在写入之前要读出液晶屏的状态是否在忙,也就是“sta = LCD1602_DB;”读取整个P0端口的8个位的状态,而“while (sta & 0x80);”就是只要P0.7为高电平状态,证明液晶屏在忙,不能写入0x0C这个字节给液晶屏,等到P0.7被液晶屏输出低电平拉低引脚之后,证明液晶屏不忙了,可以允许写入命令字节了,“void LcdWaitReady()”函数分析完毕。


“void LcdWriteCmd(unsigned char cmd)”就是要写入命令的字节,前面的

LCD1602_RS = 0;

LCD1602_RW = 0;


是令液晶屏接收命令做准备,然后使”P0= cmd;”输出相关的高低电平,再让LCD1602_E 完成一个高脉冲,这样当“cmd=0x0C;”时,液晶屏就接收了这个命令,让显示功能为“显示器开,光标关闭”。


然后我们再说说,要显示的内容从哪个格子显示应该怎么去实现代码,如果要在第二行第一个格子显示一个字符,那么光标要设置在这个位置上,也就是写命令给液晶屏的字节为“0x80|0x40”,设置坐标的命令字节最高位要为1。在哪个位置显示就写入哪个地址。

11.2.png


最后就是“void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)”函数的讲解了。


设置地址在哪显示的函数已经讲过。我们看到“LcdWriteDat(*str++);”,这个函数的意思是把一个数组或者一个字符串里的字符数据写进上图的显示位置的地址里让相应的地方显示字符。


在初始化函数里“LcdWriteCmd(0x06);”的设置是令地址自动加1,假如在液晶屏第二行的第一个位置(也就是地址为0x40)不停写数据,那么写完一个数据之后,再写下一个数据,写进去的地址就是0x41的位置了,后面再写就是0x41的位置。


液晶屏的代码我们就简略讲完了,如果理解上还存在疑惑,我们也许掌握的理论知识还有所欠缺,这是需要慢慢消化的。


当然我们也可以不用去深究每一个细节,后面我们教会大家怎么去使用这些函数就可以了。

关键字:51单片机  1602液晶屏  指针 引用地址:51单片机-液晶屏代码讲解

上一篇:51单片机-串口printf系列函数
下一篇:51单片机-指向数组的指针

推荐阅读最新更新时间:2024-11-22 10:25

51单片机,点阵显示汉字(C语言)
#include reg51.h #include intrins.h //要用到 _nop_() #define uint unsigned int #define uchar unsigned char sbit SH_595=P2^1; sbit DATA_595=P2^0; sbit ST_CP_595=P2^2;//74HC595(12)-ST_CP上升沿-移位寄存器的数据进入数据存储寄存器 输出锁存器的时钟信号端口 sbit MR_595=P2^3; //74HC595(10)-MR 为0将移位寄存器的数据清0 sbit E1_154=P2^4;//74HC154(18)-E1为0开列(col)输出 显示允许
[单片机]
C51单片机,128*64串口LCD驱动
CA12864K 串口C51演示程序 // CA12864K 测试程序(串口) //*************************************************************************** //连线表: CPU=89C52 SystemClock=12Mhz * //CS=P3.0 SCLK=P3.1 SID=P3.2 Reset=RC in Board * //************************************************************************
[单片机]
51单片机内存问题
关于 51单片机内存问题,一直是个疑惑大家的问题,因为51单片机是个很另类的单片机。 下面我给楼主讲解一下: 51单片机之所以另类,是因为,他寻址内存的空间,不是靠总线,是用指令的方式。 51单片机有以下几个内存模块组成: 1】ROM或者Flash,叫程序存储区,你写的程序是存在这里面的,上电后从这里面执行。 程序存储区也分为片内和片外,一般来说,现在的51很多已经做到了64K,所以很少有外扩 片外Flash或者片外的Rom了,Flash或者Rom不管是片内还是片外的,只能用来定义常量,是用code来修饰,也就是说,用code来修饰的东西,在程序运行过程中,不能修改; 2】RAM有------内部RAM的低128位(00-7F),
[单片机]
51单片机串行口通信程序设计例子
串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。 单片机串行口通信程序设计硬件连接图 例:用8051单片机串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,能靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用
[单片机]
<font color='red'>51单片机</font>串行口通信程序设计例子
51单片机计时器和中断
计时器,中断 ############################ EX0(IE.0),外部中断0允许位; ET0(IE.1),定时/计数器T0中断允许位; EX1(IE.2),外部中断0允许位; ET1(IE.3),定时/计数器T1中断允许位; ES(IE.4),串行口中断允许位; EA (IE.7), CPU中断允许(总允许)位。 初始化对定时计数器操作: 第一步: 对TMOD赋值,以确定T0,T1的工作方式 第二部: 计算初值,写入TH0,TL0或者TH1,TL1 第三步: 中断方式,对IE赋值开放中断 第四步: 使TR0或者TR1置位,启动定时计数器工作方式是定时或者计数 TMOD: 低4位控制T
[单片机]
51单片机管脚说明文档
P0端口(P0.0-P0.7):P0口为一个8位漏极开路双向I/O口,每个引脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1端口(P1.0-P1.7):P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高电平,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2端口(P2.0
[单片机]
max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)
1、STM32 硬件SPI max7219 8位数码管显示模块 数码管模块电路图 /***************************************************************** Updated time: 12th,12,2015 Function:通过MAX7219驱动数码管 ******************************************************************/ #include “delay.h” #include “sys.h” #include “usart.h”//串口通信 #define Max7219_pinCLK PAout(
[单片机]
max7219驱动数码管程序(<font color='red'>51单片机</font>+STM32 MAX7219数码管程序案例)
图形点阵式液晶显示模块与51单片机的接口设计
引 言 液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。以往的测控仪器的显示部分大都采用LED式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。本文在介绍以ST7920为驱动器的WGM-12832液晶显示模块的引脚、结构、功能的基础上,详述了与AT
[单片机]

推荐帖子

WinCE上TCP套接字的KeepAlive问题
查了一下大家所说的,都是使用WSAIoctl来使用SIO_KEEPALIVE_VALS参数来设置,让TCP自动进行心跳,但是我用的EVC4上这样设置好像不支持,不知道大家是怎样做的。另外还查到一种方法,在注册表里该KeepAlive设置,不知道这样可不可以。我自己也会试一试,但是也希望大家能跟我多交流交流WinCE上TCP套接字的KeepAlive问题
tudi WindowsCE
42“万里”树莓派小车——ROS学习(Android使用ROSBridge控制小乌龟)
前面通过网页使用ROSBridge控制小乌龟,这里介绍使用Android手机来控制小乌龟。一、从零开始新建ROSBridge工程从Android源码开始学习并不是最好的方法,由于环境不一样,直接编译不一定能通过,移植到自己工程也不一定能成功,所有这里介绍从零开始新建ROSBridge工程。0.下载源码下载链接在帖子最后。1.新建AS工程本帖采用AndroidStudio4.1,新建一个空白工程,包名为Lb_ROSBridg
lb8820265 创新实验室
CC3200烧录问题!
本帖最后由uart9600spi于2015-7-3008:45编辑 询问CC3200的SDK里的example的out_of_box如何烧录到板子里面,请问我应该怎么做?我的过程是先用(1)uniflash---设置format---servicepackprogramming(CC31xx_CC32xx_ServicePack_1.0.0.10.0---servicepack_1.0.0.10.0.bin)-
uart9600spi 无线连接
【米尔边缘AI计算盒FZ5测评】EasyDL实现花朵分类识别网络搭建
本次将尝试使用百度官方的EasyDL平台训练和部署一个花朵识别网络。首先需要创建一个模型:可以看到官方已经提供了各种各样的网络识别方案,这里我们选择图像分类,进行模型创建,然后可以导入我们本地的数据集:这里我们导入了本地已经标注好的数据集,这里导入了五种花及其对应的标签,平台还提供了在线标注的服务,有兴趣的读者可以尝试一下。然后准备训练模型:这里选择实现平台为Edgeboard(FZ),,然后配置为高精度,其他配置为自动。选择
zzx1997 嵌入式系统
在安卓中使用Socket实现数据传输的问题
我在学习安卓,用Socket实现数据传输。我看的Android智能穿戴设备开发从入门到精通。服务器端是java工程,代码如下:publicclassAndroidServerimplementsRunnable{publicvoidrun(){try{ServerSocketserverSocket=newServerSocket(54321);while(true)
chenbingjy Linux与安卓
基于逻辑分析内核的FPGA电路内调试技术
随着FPGA融入越来越多的能力,对有效调试工具的需求将变得至关重要。对内部可视能力的事前周密计划将能使研制组采用正确的调试战略,以更快完成他们的设计任务。  “我知道我的设计中存在一个问题,但我没有很快找到问题所需要的内部可视能力。”由于缺乏足够的内部可视能力,调试FPGA基系统可能会受挫。使用通常包含整个系统的较大FPGA时,调试的可视能力成为很大的问题。为获得内部可视能力,设计工程师必须把一些引脚专门用作调试引脚,而不是实际用于设计。哪些工具可用于进行内部FPGA迹线测量?又有哪些
songbo 测试/测量
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved