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

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滚动显示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css补充(上)

有关字体 1.所有有关字体的样式都会被继承 div {font-size: 30px;}<span>777</span> <div>123<p>456</p> </div>span中777是默认大小16px div设置了30px p作为div的后代继承了字体样式也是30px 2.字体颜色 div{color: red;border: 1px …

[java] 23种设计模式之责任链模式

1.1例子 公司请假系统&#xff0c;业务逻辑如下&#xff1a; 不超过3天的&#xff0c;组长审批 超过3天且小于7天的&#xff0c;总监审批 超过7天且小于15天的&#xff0c;部长审批 超过15天&#xff0c;前端直接拒绝&#xff0c;不会进入审批流程&#xff08;违反了公司的请假…

Stable diffusion零基础课程

该课程专为零基础学习者设计&#xff0c;旨在介绍和解释稳定扩散的基本概念。学员将通过简单易懂的方式了解扩散现象、数学模型及其应用&#xff0c;为日后更深入的科学研究和工程应用打下坚实基础。 课程大小&#xff1a;3.8G 课程下载&#xff1a;https://download.csdn.ne…

如何理解和利用好点对点传输?

在当今数字化时代&#xff0c;数据传输已成为企业和个人日常工作的核心部分。点对点传输&#xff08;P2P&#xff09;作为一种高效的数据交换方式&#xff0c;正逐渐成为网络通信的主流。本文将探讨如何理解和利用点对点传输&#xff0c;分析其优缺点&#xff0c;并介绍镭速如何…

绝地求生:收纳控福音!老登教你怎么塞满三级包最划算!

大家好&#xff0c;我是闲游盒~ 作为一个5000小时的PUBG老登&#xff0c;我认为这个绝地求生这个游戏&#xff0c;抛开外挂不谈&#xff0c;是一个非常有意思的FPS游戏&#xff0c;不论是要强度还是要趣味&#xff0c;大多数玩家都能在这里找到想要的节奏。 一直以来是想做一些…

HarmonyOS NEXT应用开发案例——全屏登录页面

全屏登录页面 介绍 本例介绍各种应用登录页面。 全屏登录页面&#xff1a;在主页面点击跳转到全屏登录页后&#xff0c;显示全屏模态页面&#xff0c;全屏模态页面从下方滑出并覆盖整个屏幕&#xff0c;模态页面内容自定义&#xff0c;此处分为默认一键登录方式和其他登录方…

leancloud云存储如何接入App Inventor 2?

提问&#xff1a;leancloud如何应用到App Inventor 2&#xff1f; LeanCloud 能够高效存取海量级 JSON 对象、二进制文件、地理位置等数据。其内置的行级 ACL 权限控制&#xff0c;以及通用的用户及角色管理体系&#xff0c;可以快速实现安全而灵活的数据访问。 根据官方文档&a…

Java零基础 - try-catch-finally和throw语句

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

语义化与自动化——第三代指标平台两大核心能力详解(内含QA)

【作者简介】杜雪芳&#xff0c;Aloudata 合伙人兼首席业务架构师。12 年数据业务从业经验&#xff0c;3 年管理咨询经验。历任阿里集团淘宝商业分析负责人、阿里音乐商业智能中心负责人、蚂蚁集团用户增长分析与洞察产品负责人。在数据体系搭建、数据分析、用户标签建设、用户…

百度给程序员发放京东购物卡,注册即送30元购物卡

活动真实有效&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;https://comate.baidu.com/?inviteCodeexf818mt 活动参与流程说明&#xff1a;点击下面的邀请链接进行登陆&#xff0c;注意一定要邀请链接&#xff0c;因为通过链接注册可以获…

windows使用sarama往kafka发送数据

首先先在本地安装好java&#xff0c;打开cmd&#xff0c;输入java -version&#xff0c;出现以下信息代表java安装成功。 之后依次安装zookeeper和kafka并启动&#xff0c;详细安装与启动步骤可参考&#xff1a; 【Kafka】Windows下安装Kafka&#xff08;图文记录详细步骤&…

STM32采集电池电量方法实现

一、项目简介 若设备接了锂电池&#xff0c;可以通过STM32的ADC采集电池的电量。锂电池为3节3.7V的单节串联&#xff0c;整体电压大约为12V。 二、实现过程 1、由于STM32采集的电压范围为0-3.3V&#xff0c;所以无法直接采集锂电池的电压&#xff0c;这里可以用外接分压电阻的…

新建Flutter工程修改配置

由于国内 网络环境原因&#xff0c; 新建 flutter工程的 配置文件 需要修改几个地方&#xff0c; 1. gradle-wrapper.properties 问题&#xff1a;Exception in thread "main" java.net.ConnectException: Connection timed out: connect&#xff1a; 解决方法&#…

已解决(亲测可行):pycharm打开项目、关闭项目进度缓慢或者卡住

1.问题描述 pycharm打开项目、关闭项目进度缓慢或者卡住,自己体会。 2. 解决方案 方案一 在帮助里面 更改内存设置里面将最大堆大小调大。并保存重启。如果还卡,请看方案二。 方案二 安装下述顺序进行操作:帮助 -> 查找操作 -> 输入 注册表 -> 不勾选 ide.…

应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控

作者&#xff1a;古琦 在现代软件架构中&#xff0c;微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能&#xff0c;它们共同工作以提供完整的服务。由于微服务架构的分散特性&#xff0c;监控变得至关重要&#xff0c;有效的微服务监控是…

3.4日java作业---华为手机小米手机入库问题

​​​​​​​ ​​​​​​​ ​​​​​​​ 【案例】 任务描述 现要对华为和小米两种手机产品进行入库&#xff0c;本案例要求编写一个模拟商品入库的程序&#xff0c;可以在控制台输入入库商品的数量&#xff0c;最后打印出仓库中所有商品详细信息…

去除PDF论文行号的完美解决方案

去除PDF论文行号的完美解决方案 1. 遇到的问题 我想去除论文的行号&#xff0c;但是使用网上的Adobe Acrobat裁剪保存后 如何去掉pdf的行编号&#xff1f; - 知乎 (zhihu.com) 翻译时依然会出现行号&#xff0c;或者是转成word&#xff0c;这样就大大损失了格式&#xff0c…

day13_微服务监控Nginx(微服务集成SBA)

文章目录 1 微服务系统监控1.1 监控系统的意义1.2 SBA监控方案1.3 SBA实战1.3.1 创建SBA服务端1.3.2 微服务集成SBA 1.4 微服务集成logback1.5 配置邮件告警 2 Nginx2.1 Nginx简介2.2 下载和安装2.2.1 方式1&#xff1a;window本地安装2.2.1.1 下载2.2.1.2 安装2.2.1.3 目录结构…

扫地机器人

题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由N个方格区域组成&#xff0c;如下图所示。 R r 走廊内部署了K台扫地机器人&#xff0c;其中第台在第A&#xff0c;个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中&#xff0c;并将该区域清扫干净。 请…

Java 学习和实践笔记(29):super关键字的作用

1. super“可以看做”是直接父类对象的引用。可通过super来访问父类中被子类覆盖的方法或属性&#xff0c;这就是super关键字的作用。 在Java 学习和实践笔记&#xff08;24&#xff09;&#xff1a;方法重写&#xff08;override)-CSDN博客中提到&#xff0c;子类可以重写父类…