51单片机控制1602LCD字符滚动三

51单片机控制1602LCD字符滚动三

1.概述

这篇文章介绍单片机控制1602LCD屏幕上的字符滚动显示

2.字符滚动

2.1.第一种方式

使用LCD内置指令设置整屏左移或者右移,在读入字符时每读一个字符都要有个延迟,否则会因为速度太快,看到屏幕上就是没有字符。

#define LCD_DIS_MODE_LEFT 0x07 	// AC自增,画面左移
#define LCD_DIS_MODE_RIGHT 0X05	// AC自增,画面右移
设置字符左移核心代码
void main(){unsigned char str1[] = "Beyound Self Beyound Time Beyound Sky";unsigned char i;LCD1602_Init();// 1.设置整屏幕左移LCD1602_WriteCMD(LCD_DIS_MODE_LEFT);while(1){//设置字符显示起始位置LCD1602_WriteCMD(0x80);//读取字符,注意每读取一个字符时都要有个延迟时间。for(i=0;i<strlen(str1);i++){LCD1602_WriteData(str1[i]);DELAY_MS(500);}}}
字符移动完整代码
#include <STC12C2052AD.H>
#include <string.h> 
typedef unsigned char uint8;
// 定义引脚
#define	LCD1602_DB0_DB7	P1			// 定义LCD1602的数据总线
sbit LCD1602_RS = P3 ^ 2;					// 定义LCD1602的RS控制线
sbit LCD1602_RW = P3 ^ 3;					// 定义LCD1602的RW控制线
sbit LCD1602_E  = P3 ^ 4;					// 定义LCD1602的E控制线
sbit LCD1602_Busy = P1 ^ 7;					// 定义LCD1602的测忙线(与LCD1602_DB0_DB7关联)// 定义指令集
/*设置显示模式*/
#define LCD_MODE_PIN8 0x38	// 8位数据线,两行显示
#define LCD_MODE_PIN4 0x28	// 4位数据线,两个显示
#define LCD_SCREEN_CLR 0x01	// 清屏
#define LCD_CURSOR_RET 0x02	// 光标复位
#define LCD_CURSOR_RIGHT 0x06	// 光标右移,显示不移动
#define LCD_CURSOR_LEFT 0x04	// 光标左移,显示不移动
#define LCD_DIS_MODE_LEFT 0x07 	// AC自增,画面左移
#define LCD_DIS_MODE_RIGHT 0X05	// AC自增,画面右移/*光标开关控制*/
#define LCD_DIS_CUR_BLK_ON 0x0f	// 显示开,光标开,光标闪烁
#define LCD_DIS_CUR_ON 0x0e	// 显示开,光标开,光标不闪烁
#define LCD_DIS_ON 0x0c	// 显示开,光标关,光标不闪烁
#define LCD_DIS_OFF 0x08	// 显示关,光标关,光标不闪烁/*光标、显示移动*/
#define LCD_CUR_MOVE_LEFT 0x10	// 光标左移
#define LCD_CUR_MOVE_RIGHT 0x14	// 光标右移
#define LCD_DIS_MOVE_LEFT 0x18	// 显示左移
#define LCD_DIS_MOVE_RIGHT 0x1c	// 显示右移/**
LCD1602忙碌状态不会接收新指令,因此在发送新指令前先检测是否忙碌。
判断LCD1602_Busy变量的值为低电平则为不忙。
*/
void LCD1602_TestBusy(void){LCD1602_DB0_DB7 = 0xff;	//将数据引脚置为高电平LCD1602_RS = 0; // 指令状态LCD1602_RW = 1;	// 读状态LCD1602_E = 1;	// 打开LCD显示器读指令while(LCD1602_Busy);	//读取LCD1602_Busy(P1.7)为低电平则结束循环LCD1602_E = 0;	// 关闭LCD显示器读指令
}/********************************************************************************************
// 写指令程序 //
// 向LCD1602写命令 本函数需要1个指令集的入口参数 //
/********************************************************************************************/
void LCD1602_WriteCMD(uint8 LCD1602_command) { LCD1602_TestBusy();//输入的命令赋值给LCD1602_DB0_DB7LCD1602_DB0_DB7 = LCD1602_command;LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_E = 1;LCD1602_E = 0;
}
/********************************************************************************************
// 写数据程序 //
// 向LCD1602写数据 //
/********************************************************************************************/
void LCD1602_WriteData(uint8 LCD1602_data){ LCD1602_TestBusy();LCD1602_DB0_DB7 = LCD1602_data;LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_E = 1;LCD1602_E = 0;
}// LCD1602初始化
void LCD1602_Init(void){LCD1602_WriteCMD(LCD_MODE_PIN8);	// 显示模式设置:显示2行,每个字符为5*7个像素LCD1602_WriteCMD(LCD_DIS_ON); 	// 显示开及光标设置:显示开,光标关LCD1602_WriteCMD(LCD_CURSOR_RIGHT);		//显示光标移动设置:文字不动,光标右移LCD1602_WriteCMD(LCD_SCREEN_CLR);	// 显示清屏
}void DELAY_MS (unsigned int a){unsigned int i;while( --a != 0){for(i = 0; i < 600; i++);}
}void main(){unsigned char str1[] = "Beyound Self Beyound Time Beyound Sky";unsigned char i;LCD1602_Init();// 设置整屏幕左移LCD1602_WriteCMD(LCD_DIS_MODE_LEFT);while(1){LCD1602_WriteCMD(0x80);for(i=0;i<strlen(str1);i++){LCD1602_WriteData(str1[i]);DELAY_MS(500);}}}

2.2.第二种移动方式

这种移动方式不需要在初始化时设置好移动方式,而是在需要的时候开启移动,不需要时候关闭移动。

核心代码

1602的内置指令中提供了显示左移或右移的指令#define LCD_DIS_MOVE_LEFT 0x18,使用该指令可以使内容移动。
下面是实现屏幕左移的核心代码,其他代码同上面实例代码一致就不在展示。

void main(){unsigned char str1[] = "Beyound Self Beyound Time Beyound Sky";unsigned char i;LCD1602_Init();// 输出字符内容LCD1602_WriteCMD(0x80);for(i=0;i<strlen(str1);i++){LCD1602_WriteData(str1[i]);}while(1){// 设置屏幕左移LCD1602_WriteCMD(LCD_DIS_MOVE_LEFT);DELAY_MS(500);}}

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

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

相关文章

微服务保护--熔断降级

1.熔断降级介绍 熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例、慢请求比例&#xff0c;如果超出阈值则会熔断该服务。即拦截访问该服务的一切请求&#xff1b;而当服务恢复时&#xff0c;断路器会放行访问该服务的请求。 断路器控制熔断和放行…

3小时快速入门自动化测试 —— Selenium测试工具

自动化测试 自动化测试简单来说就是利用自动化测试工具和自动化测试脚本来完成指定的测试任务&#xff0c;测试启动过程无需人工参与&#xff0c;但自动化测试之前的准备工作需要人工手动配置好。它是一种将重复性、繁琐的测试任务交给计算机自动执行的方法&#xff0c;能够显…

ansible crontab任务管理 —— 筑梦之路

添加一个定时任务 # ansible-playbook.yml --- - name: Manage crontabhosts: your_target_hoststasks:- name: Add crontab entrycron:name: "rsync backup"minute: "0"hour: "2"job: "/path/to/your/backup_script.sh" your_target…

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

【采坑分享】npm login/publish/whoami失败采坑,解决npmERR426、ETIMEDOUT、ECONNREFUSED等错误

目录 前言背景&#xff1a; 采坑之路&#xff1a; 1.修改https为http&#xff0c;问题还在 2.修改为淘宝镜像&#xff0c;问题还在 3.修改为官网地址&#xff0c;问题还在 4.升级node和npm&#xff0c;问题还在 5.猜想网络问题&#xff0c;问题解决 采坑总结&#xff1a…

HTTP 414错误:请求URI过长,如何避免

在Web开发中&#xff0c;HTTP状态码是用于表示Web服务器响应的各种状态。其中&#xff0c;HTTP 414错误表示请求URI过长&#xff0c;这意味着客户端发送的请求URL超过了服务器所能处理的长度限制。 当请求的URI过长时&#xff0c;服务器可能无法正确处理请求&#xff0c;从而导…

Spring批量加载Resource目录下的文件

项目中的配置文件用json方式存储在了resources下面的文件夹下面。如下&#xff1a; 在代码里面需要将他们全部读出来。 但是ClassLoader.getResource 只能读取单个文件&#xff0c;不能读取文件列表。然后就想到了 mybatis 同样也是要读配置文件列表&#xff0c;就想看看 myba…

01-EEA电子电器架构

1.背景 汽车正在从传统的机械装置逐步电气化&#xff0c;汽车电子电气功能不断的丰富。越来越多的电气系统和功能被集成到汽车上&#xff0c;传统的原理及线束设计已经远远不能满足。为此&#xff0c;EEA(电子电气架构)应运而生。如何设计电子电气架构&#xff0c;满足日益增长…

字符串——OJ题

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、字符串相加1、题目讲解2、思路讲解3、代码实现 二、仅仅反转字母1、题目讲解2、思路讲解3…

前端面试CSS知识点

目录 前言 一、块级元素、行内元素和行内块元素的区别 1. 块级元素-display:block 1.1.1 常见的块级元素 1.1.2 块级元素的特点 2. 行内元素-display-inline 2.1.1 常见的行内元素 2.1.2 行内元素的特点 3. 行内块元素-display:inline-block 3.1.1 常见的行内块元素 3.1.2 行内…

docker搭建gitlab

1. 搭建gitlab # 1. 获取镜像 docker pull gitlab/gitlab-ce:latest# 2. 创建并启动容器 # 映射了2个端口&#xff0c;都是需要用到的 docker run -itd -p 9980:80 -p 9922:22 --restart always --privilegedtrue --name gitlab gitlab/gitlab-ce # 进入容器 docker exec -it …

媒体直播平台有哪些,活动直播如何扩大曝光?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体直播平台包括人民视频、新华社现场云、中国网、新浪新闻直播、搜狐视频直播、凤凰新闻直播、腾讯新闻直播等。活动直播想要扩大曝光&#xff0c;可以考虑以下方式&#xff1a; 1.选择…

Nginx七层代理,四层代理 + Tomcat多实例部署

目录 1.tomcat多实例部署 准备两台虚拟机 进入pc1 pc2同时安装jdk 进入pc1 pc2安装tomcat PC1配置&#xff08;192.168.88.50&#xff09; 安装tomcat多实例 tomcat2中修改端口 启动tomcat1 tomcat2 分别在三个tomcat服务上部署jsp的动态页面 2.nginx的七层代理&…

Logistic 回归算法

Logistic 回归 Logistic 回归算法Logistic 回归简述Sigmoid 函数Logistic 回归模型表达式求解参数 $\theta $梯度上升优化算法 Logistic 回归简单实现使用 sklearn 构建 Logistic 回归分类器Logistic 回归算法的优缺点 Logistic 回归算法 Logistic 回归简述 Logistic 回归是一…

ros2+xml格式launch文件示例代码(重要内容)

源自githubeasy_ros2_launch_talk/easy_launch_demo/launch/demo_launch.xml at main tylerjw/easy_ros2_launch_talk GitHub <launch><arg name"robot_ip" default"xxx.yyy.zzz.www" /><arg name"use_fake_hardware" default…

【Spring】07 懒加载

文章目录 1.定义2. 作用3. 配置方式1&#xff09;XML配置2&#xff09;Java配置3&#xff09;注解方式 4. 应用场景5. 注意事项总结 1.定义 懒加载&#xff08;Lazy Initialization&#xff09;是Spring 框架中的一项强大的特性&#xff0c;它允许我们推迟 Bean 的初始化&…

直播源自动检测工具iptv-m3u-maker

【申明】&#xff1a;本文不提供任何播放列表或其他数字内容。屏幕截图中的频道和图片仅供演示和说明之用。 老苏以前介绍过 IPTV Checker &#xff0c;能对直播源进行有效性检测 文章传送门&#xff1a;用Jellyfin➕xTeVe播放和录制IPTV 今天要介绍的 iptv-m3u-maker 功能是一…

python学习1补充

大家好&#xff0c;这里是七七&#xff0c;这个专栏是用代码实例来学习的&#xff0c;不是去介绍很多知识的。 话不多说&#xff0c;开始今天的内容 目录 代码1 代码2 代码3 代码4 代码5 学习1的总代码 代码1 groupeddf.groupby(单品编码) result{} groupeddf.groupb…

华为大数据开发者教程知识点提纲

一、线下处理 1.离线处理方案 数据支持&#xff1a;HDFS 调度&#xff1a;YARN 收入&#xff1a;Flume&#xff0c;sqoop&#xff0c;loader 处理&#xff1a;Mapreduce&#xff0c;SparkSql&#xff0c;spark&#xff0c;hive&#xff08;&#xff0c;Flink&#xff09; 2.Had…

Axure的动态图使用以及说明

认识Axure动态图 Axure动态图是Axure中的一种功能&#xff0c;它允许用户在原型中添加动画效果和交互动作&#xff0c;使原型更加生动和具有真实的用户体验。用户可以通过添加动态图来展示页面过渡、按钮点击、下拉菜单等交互操作的效果。 这是&#xff1a;就是我们今天要叫的…