小白跟做江科大51单片机之LCD1602滚动显示效果

news2025/1/19 20:59:46

1.查看原理图

图1 LCD1602接口

图2 LCD1602与STC的接口

2.编写代码

图3 时序结构

根据时序结构编写命令和写入数据代码

#include <REGX52.H>
#include "Delay.h"

sbit LCD1602_EN=P2^7;
sbit LCD1602_RS=P2^6;
sbit LCD1602_WR=P2^5;

#define LCD1602_lCD0  P0  //因为是并口通信,一个就行

void LCD1602_WriteCommand(unsigned char command)
{
    LCD1602_RS=0;           //RS为低电平时表示发送指令
    LCD1602_WR=0;           //表示开始写,写命令和写数据都是WR=0
    LCD1602_lCD0=command;
    LCD1602_EN=1;
    Delay();
    LCD1602_EN=0;
    Delay();
}

void LCD1602_WriteData(unsigned char Data)
{
    LCD1602_RS=1;           //RS为高电平时表示发送的是数据
    LCD1602_WR=0;           //表示开始写
    LCD1602_lCD0=Data;
    LCD1602_EN=1;
    Delay();
    LCD1602_EN=0;
    Delay();
}

根据操作流程进行初始化和显示数据代码函数的编写

void LCD1602_Init()
{
    LCD1602_WriteCommand(0x38);
    LCD1602_WriteCommand(0x0C);
    LCD1602_WriteCommand(0x06);
    LCD1602_WriteCommand(0x01);
}

void LCD1602_showChar(unsigned char line,unsigned char column,unsigned char C)
{
    
    if(line==1)
    {
        LCD1602_WriteCommand(0x80|column-1);
    }
    else
    {
        LCD1602_WriteCommand(0x80|(column-1)+0x40);
    }
    LCD1602_WriteData(C);
}

LCD1602.C代码汇总

#include <REGX52.H>
#include "Delay.h"

sbit LCD1602_EN=P2^7;
sbit LCD1602_RS=P2^6;
sbit LCD1602_WR=P2^5;

#define LCD1602_lCD0  P0  //因为是并口通信,一个就行

void LCD1602_WriteCommand(unsigned char command)
{
    LCD1602_RS=0;           //RS为低电平时表示发送指令
    LCD1602_WR=0;           //表示开始写,写命令和写数据都是WR=0
    LCD1602_lCD0=command;
    LCD1602_EN=1;
    Delay();
    LCD1602_EN=0;
    Delay();
}

void LCD1602_WriteData(unsigned char Data)
{
    LCD1602_RS=1;           //RS为高电平时表示发送的是数据
    LCD1602_WR=0;           //表示开始写
    LCD1602_lCD0=Data;
    LCD1602_EN=1;
    Delay();
    LCD1602_EN=0;
    Delay();
}

void LCD1602_Init()
{
    LCD1602_WriteCommand(0x38);
    LCD1602_WriteCommand(0x0C);
    LCD1602_WriteCommand(0x06);
    LCD1602_WriteCommand(0x01);
}

第1行和第二行要注意按图修改

void LCD1602_showChar(unsigned char line,unsigned char column,unsigned char C)
{
    
    if(line==1)
    {
        LCD1602_WriteCommand(0x80|column-1);
    }
    else
    {
        LCD1602_WriteCommand(0x80|(column-1)+0x40);
    }
    LCD1602_WriteData(C);
}

void LCD_ShowString(unsigned char line,unsigned char Column,char *String)
{
    unsigned char i;
    if(line==1)
    {
        LCD1602_WriteCommand(0x80|Column-1);
    }
    else
    {
        LCD1602_WriteCommand(0x80|(Column-1)+0x40);
    }
    for(i=0;String[i];i++)
    LCD1602_WriteData(String[i]);
}


void LCD_ShowNum(unsigned char line,unsigned char Column,unsigned int Number,unsigned char Length)
{
    unsigned char i=0;
    if(line==1)
    {
        LCD1602_WriteCommand(0x80|Column-1);
    }
    else
    {
        LCD1602_WriteCommand(0x80|(Column-1)+0x40);
    }
    while(i<Length)
    {
        if(Number>10000)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/10000));
            Number=Number%10000;
        }
        else if(Number>1000)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/1000));
            Number=Number%1000;
        }
        else if(Number>100)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/100));
            Number=Number%100;
        }
        else if(Number>10)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/10));
            Number=Number%10;
        }
        else
        {
            LCD1602_WriteData('0'+(unsigned char)(Number%10));
            break;
        }
        i++;
    }
}


void LCD_ShowSignedNum(unsigned char line,unsigned char Column,int Number,unsigned char Length)
{
    unsigned char i=0;
    
    if(line==1)
    {
        LCD1602_WriteCommand(0x80|Column-1);
    }
    else
    {
        LCD1602_WriteCommand(0x80|(Column-1)+0x40);
    }
    if(Number<0)
    {
        LCD1602_showChar(line,Column,'-');
        Number=-Number;
    }
    else
    {
        LCD1602_showChar(line,Column,'+');
    }
    while(i<Length)
    {
        if(Number>10000)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/10000));
            Number=Number%10000;
        }
        else if(Number>1000)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/1000));
            Number=Number%1000;
        }
        else if(Number>100)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/100));
            Number=Number%100;
        }
        else if(Number>10)
        {
            LCD1602_WriteData('0'+(unsigned char)(Number/10));
            Number=Number%10;
        }
        else
        {
            LCD1602_WriteData('0'+(unsigned char)(Number%10));
            break;
        }
        i++;
    }
}

void LCD_ShowBinNum(unsigned char line,unsigned char Column,unsigned int Number,unsigned char Length)
{
     unsigned char Binarr[16]={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
     unsigned char i=0;
    if(line==1)
    {
        LCD1602_WriteCommand(0x80|Column-1);
    }
    else
    {
        LCD1602_WriteCommand(0x80|(Column-1)+0x40);
    }
    while(Number)
    {
        Binarr[i]='0'+(unsigned char)Number%2;
        Number=Number/2;
        i++;
    }
    
    for(i=Length;i>0;i--)
    {
        LCD1602_WriteData(Binarr[i-1]);
    }
}


void LCD_ShowHexNum(unsigned char line,unsigned char Column,unsigned int Number,unsigned char Length)
{
    unsigned char Hexnum[4]={'0','0','0','0'};
    unsigned char temp,i;
    if(line==1)
    {
        LCD1602_WriteCommand(0x80|Column-1);
    }
    else
    {
        LCD1602_WriteCommand(0x80|(Column-1)+0x40);
    }
    while(Number)
    {
        temp=Number%16;
        if(temp<10)
        {
            Hexnum[i]='0'+temp;
        }
        else
        {
            Hexnum[i]='A'+(temp-10);
        }
        Number=Number/16;
        i++;
    }
    
    for(i=Length;i>0;i--)
    {
        LCD1602_WriteData(Hexnum[i-1]);
    }
    
}

LCD1602.h代码展示

#ifndef __LCD1602_H__
#define __LCD1602_H__

void LCD1602_WriteCommand(unsigned char command);
void LCD1602_Init();
void LCD1602_showChar(unsigned char line,unsigned char column,unsigned char C);
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

#endif

3.编写main.c代码

#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"

void main()
{
    LCD1602_Init();
    LCD1602_showChar(1,1,'+');
    LCD_ShowString(1,3,"Hello");
    LCD_ShowNum(1,9,212,4);
    LCD_ShowSignedNum(2,1,-212,4);
    LCD_ShowBinNum(1,13,32,16);
    LCD_ShowHexNum(2,5,15,2);
    while(1)    
    {
        unsigned char i,j,k;
        LCD1602_WriteCommand(0x18);   //移动屏幕命令0x18
        i = 10     ;
        j = 11;
        k = 45;
        do
        {
            do
            {
                while (--k);
            } while (--j);
        } while (--i);

    }
}

4.结果展示

LCD1602滚动显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dgraph 入门教程二《 快速开始》

1、Clound 云 云地址&#xff1a;Dgraph Cloud 登录Clound 云后&#xff0c;可以用云上的东西操作&#xff0c;可以用谷歌账号或者github账号登录。 启动云 &#xff08;1&#xff09;在云控制台&#xff0c;点击 Launch new backend. &#xff08;2&#xff09;选择计划&…

AIGC工具( 7个 )

人工智能技术有好的一方面&#xff0c;又不好的地方&#xff0c;要区别对待&#xff0c;吸取精华&#xff0c;去其糟粕。目前市场上有很多AI大模型&#xff0c;可以支持聊天&#xff0c;写文稿&#xff0c;创作等&#xff0c;部分可以生成图片&#xff0c;以下是7个很不错的免费…

YOLOSHOW - YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 基于 Pyside6 的图形化界面

YOLOSHOW 是一个基于 PySide6&#xff08;Qt for Python&#xff09;开发的图形化界面应用程序&#xff0c;主要用于集成和可视化YOLO系列&#xff08;包括但不限于YOLOv5、YOLOv7、YOLOv8、YOLOv9&#xff09;的目标检测模型。YOLOSHOW 提供了一个用户友好的交互界面&#xff…

一张图带你了解数据分析的完整流程

一个完整的数据分析流程&#xff0c;应该包括以下几个方面&#xff0c;建议收藏此图仔细阅读。 作为数据分析师&#xff0c;无论最初的职业定位方向是技术还是业务&#xff0c;最终发到一定阶段后都会承担数据管理的角色。因此&#xff0c;一个具有较高层次的数据分析师需要…

electron 程序与安装包图标放大与制作

原因 electron-builder 在打包时需要最小支持到256x256像素的icon图标。原有历史图标都太小了。需要尝试将图标放大。 工具 convertio.co/zh/ico-png/ 在线ico转png网站 https://github.com/upscayl/upscayl 图片放大工具 csdn下载 greenfish-icon-editor-pro.en.softonic.c…

分布式ID生成系统之雪花算法详解

在当今的云计算和微服务架构盛行的时代&#xff0c;分布式系统已成为软件开发的重要组成部分。随着系统规模的扩大和业务的复杂化&#xff0c;对数据一致性和唯一性的要求也越来越高&#xff0c;尤其是在全局唯一标识符&#xff08;ID&#xff09;的生成上。因此&#xff0c;分…

mongo和redis的数据备份和还原

redis 安装 Redis安装和基本使用&#xff08;windows版&#xff09; - 知乎 window环境下Redis7服务器的安装和运行_redis7 windows-CSDN博客 备份数据 Redis SAVE 命令用于创建当前数据库的备份。 该命令将在 redis 安装目录中创建dump.rdb文件 查询路径 CONFIG GET dir…

[备赛笔记]——5G大唐杯(5G考试等级考考试基础试题)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

0基础学习VR全景平台篇第142篇:VR直播下载流程

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01; 这期&#xff0c;我们将为大家介绍如何下载VR直播内容。 一.如何下载VR直播内容&#xff1f; 首先登录蛙色官网&#xff0c;点击作品管理&#xff1b; 进入作品管理界面后选择全景直播&#xff0c;找到…

常用MII接口详解

开放式系统互连 (OSI) 模型 七层开放系统互连 (OSI) 模型中&#xff0c;以太网层 位于最底部两层 - 物理层和数据链路层。 从百兆以太网接口开始 首先是百兆以太网规定的两种接口 介质无关接口 (MII) Media Independent Interface 介质相关接口 (MDI) Medium Depen…

[Redis]——缓存击穿和缓存穿透及解决方案(图解+代码+解释)

目录 一、缓存击穿&#xff08;热点Key问题&#xff09; 1.1 问题描述 1.2 解决方案及逻辑图 1.2.1 互斥锁 1.2.2 逻辑过期 二、缓存穿透 2.1 问题描述 2.2 解决方案逻辑图 2.2.1 缓存空对象 2.2.2 布隆过滤器 一、缓存击穿&#xff08;热点Key问题&#xff09; 个人理…

web学习笔记(二十六)

目录 1.JS执行队列 1.1JS是单线程 1.2Web Worker 1.3同步和异步 1.4JS执行机制 2.location对象 2.1什么是location对象 2.2url包含的信息 2.3location对象属性 2.4location对象的方法 3.navigator对象和history对象 3.1navigator对象 3.2history对象 1.JS执行队…

manjaro 安装 wps 教程

内核: Linux 6.6.16.2 wps-office版本&#xff1a; 11.10.11719-1 本文仅作为参考使用, 如果以上版本差别较大不建议参考 安装wps主体 yay -S wps-office 安装wps字体 &#xff08;如果下载未成功看下面的方法&#xff09; yay -S ttf-waps-fonts 安装wps中文语言 yay …

数据结构之时间复杂度和空间复杂度

目录 一.什么是数据结构&#xff1f; 二.什么是算法&#xff1f; 三.算法效率 1.如何衡量算法的好坏 2.算法的复杂度 四.时间复杂度 1.时间复杂度的概念 2.例题展示 五.空间复杂度 1.概念 2.注意事项 空间的销毁>归还对空间的使用权内存空间属于操作系统的进程 …

【工具相关】zentao用例管理平台部署实践

文章目录 一、备份还原1、数据备份1.1、前言1.2、版本备份1.3、数据备份 2、数据恢复2.1、版本恢复2.2、数据恢复 二、问题处理1、ERROR: SQLSTATE[HY000] [2002] Connection refused 一、备份还原 1、数据备份 1.1、前言 禅道系统从10.6版本以后&#xff0c;新增数据备份设…

element-ui radio 组件源码分享

今日简单分享 radio 组件的实现原理&#xff0c;主要从以下三个方面来分享&#xff1a; 1、radio 页面结构 2、radio 组件属性 3、radio 组件方法 一、radio 页面结构 1.1 页面结构如下&#xff1a; 二、radio 属性 2.1 value / v-model 属性&#xff0c;类型为 string / …

谷歌新作:AI 检测文件内容类型,5ms 即可完成 | 开源日报 No.192

google/magika Stars: 5.0k License: Apache-2.0 magika 是一个利用深度学习来检测文件内容类型的工具。 使用自定义、高度优化的 Keras 模型&#xff0c;仅约 1MB 大小&#xff0c;在单个 CPU 上能够在毫秒内实现精确的文件识别。在超过 1M 文件和 100 种内容类型&#xff0…

供应链管理(SCM):界面设计全面扫盲,得供应链者得天下

大家伙&#xff0c;我是大千UI工场&#xff0c;专注UI分享和项目接单&#xff0c;本期带来供应链系统的设计分享&#xff0c;欢迎大家关注、互动交流。 一、什么是SCM SCM系统是供应链管理&#xff08;Supply Chain Management&#xff09;系统的缩写。供应链管理是指协调和管…

立式学习灯哪个牌子好?教你6个挑选窍门,甩掉坑货!

很多用户对立式学习灯的理解存在偏差&#xff0c;认为只要选择昂贵的、热度高的台灯就能万事大吉&#xff0c;实测不然!要知道&#xff0c;目前的市场上充斥着各类不专业立式学习灯&#xff0c;其中就包括不少所谓的网红品牌、跨界品牌&#xff0c;它们普遍通过造型精致、明星代…

Vue+SpringBoot打造考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…