简单易懂的51单片机LCD1602显示protues仿真程序

2023-05-16

时序图 

仿真效果 

 

#include"AT89X51.h"
typedef unsigned char u8;
typedef unsigned int u16;

#define lcd1602_DB P3
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;

u8 temp_buf[5]={0};
u16 temp_value;
float temp;

void delay_us(u16 us)
{
    while(us--);
}

void lcd1602_wrire_cmd(u8 cmd)//写指令
{
    RS=0;
    RW=0;
    E=0;
    lcd1602_DB=cmd;
    delay_us(1000);
    E=1;
    delay_us(1000);
    E=0;
}

void lcd1602_init(void)//初始化
{
    lcd1602_wrire_cmd(0x38);//数据总线 8 位,显示 2 行,5*7 点阵/字符
    lcd1602_wrire_cmd(0x0c);//显示功能开,无光标,光标闪烁
    lcd1602_wrire_cmd(0x06);//写入新数据后光标右移,显示屏不移动
    lcd1602_wrire_cmd(0x02);
    lcd1602_wrire_cmd(0x01);//清屏
}

void lcd1602_wrire_date(u8 dat)//写数据
{
    RS=1;
    RW=0;
    E=0;
    lcd1602_DB=dat;
    delay_us(1000);
    E=1;
    delay_us(1000);
    E=0;
}

void lcd1602_clear()
{
    lcd1602_wrire_cmd(0x01);
}

void lcd1602_display(u8 x,u8 y,u8 *str)//x=0~15(位) y=0~1(行)
{
    u8 i=0;//i是判断有没有超过第一行的,当i在循环内一直加1,显示地址也一直加1,指针逐个加1扫描且当“\0”的时候停止循环
    if(x>15||y>1) return;
    if(y<1)//第一行
    {
        while(*str!='\0')
        {
            if(i<16-x)//如果字符长度超过第一行显示范围,则在第二行继续显示
            {
                lcd1602_wrire_cmd(0x80+i+x);//第一行显示地址设置
            }
            else
            {
                lcd1602_wrire_cmd(0x40+0x80+i+x-16);//第二行显示地址设置,i+x-16是上一行未显示的数据
            }
            lcd1602_wrire_date(*str);
            str++;
            i++;
        
        }
    
    }
    else
    {
        while(*str!='\0')
        {
            if(i<16-x)//如果字符长度超过第二行显示范围,则在第一行继续显示
            {
                lcd1602_wrire_cmd(0x40+0x80+i+x);
            }
            else
            {
                lcd1602_wrire_cmd(0x80+i+x-16);
            }
            lcd1602_wrire_date(*str);
            str++;
            i++;
    
        }
    }        
}
    
void main()
{
    lcd1602_init();
    temp=38.6; //温度通常为浮点数类型,我们通常用数组来转换显示(+0x30)
    temp_value=temp*10;
    temp_buf[0]=temp_value/100+0x30;//百位
    temp_buf[1]=temp_value%100/10+0x30;//个位
    temp_buf[2]='.';
    temp_buf[3]=temp_value%100%10+0x30;//小数第一位
    temp_buf[4]='\0';
    lcd1602_display(0,0,temp_buf);
    lcd1602_display(0,1,"Hell0 Word!");//第二行数据显示

    while(1)
    {
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单易懂的51单片机LCD1602显示protues仿真程序 的相关文章

  • 关于虚拟机装Anaconda教学

    文章目录 一 第一步装VMware Workstation Pro虚拟机的安装二 下载虚拟机镜像文件三 安装python解释器 xff0c 安装Anaconda xff1a python解释器 xff1a 直接在DOS上安装 xff0c 操
  • C#ftp服务器配置与文件上传

    个人分享 public void test ftp服务器路径 string ftpServer 61 34 ftp 192 168 0 1 34 ftp本地路径 string ftpDefaultUrl 61 34 A 34 登入到ftp的
  • 完整的前端项目开发流程

    一个项目从一开始的计划到最后的上线 大概要经过以下的流程 产品设计原型审评项目分工项目开发项目测试项目构建项目上线 1产品设计 主要负责人 产品经理 产品经理前期负责收集销售 客户 领导的零散需求 然后做需求分析 完成产品设计 需求分析 需
  • debian11 sid

    编辑 etc apt sources list xff0c 增加下面二行 xff1a deb http ftp us debian org debian sid main contrib non free deb src http ftp
  • 单片机学习——定时器/计数器

    单片机必学系列 单片机学习 中断系统 单片机学习 存储器详解 xff08 程序存储器 片内RAM 拓展RAM EEPROM xff09 单片机学习 定时器 计数器 单片机学习 A D转换 更新ing 单片机学习 定时器 计数器 单片机必学系
  • ros bag包转mp4视频

    先在 rosbag2video py 脚本中修改相关配置参数 或者在终端命令改也行 如果使用脚本里的默认参数 则可直接运行 python rosbag2video py 2022 02 02 10 41 38 bag 代码如下 span c
  • 零基础入门Jetson Nano——通过OpenCV调用CSI和USB摄像头

    Jetson Nano学习 摄像头调用 前言一 CSI摄像头的调用1 安装v4l2 utils协助工具2 查看摄像头挂载情况3 查看挂载的摄像头详细参数情况4 检测摄像头能否正常工作5 使用OpenCV调用CSI摄像头方式一 利用Gstre
  • HTML搜索框的制作过程

    1 搜索框的构成 input标签和button标签我的理解应该就类似于行内块元素 xff0c 可以设置宽高 xff0c 但同时又不独占一行placeholder 占位文本 就是输入框一开始默认显示的文本 span class token t
  • Linux

    Linux 文件管理创建目录创建文件复制剪切 重命名删除归档 xff08 解压 压缩 xff09 文件查看帮助文档查看信息文件显示当前工作目录切换目录请屏显示文件内容文件内容搜索文件搜索链接文件搜索命令所在位置 Linux系统查看进程终止进
  • isalpha()库函数

    C C 43 43 isalpha 库函数 isalpha 函数用来检测一个字符是否是字母 xff0c 包括大写字母和小写字母 头文件 xff1a 属于ctype h头文件 xff1b 但也包含在iostream头文件下 语法原型 xff1
  • 计算机网络(谢希仁-第八版)第四章习题全解

    4 01 网络层向上提供的服务有哪两种 xff1f 试比较其优缺点 xff1f 虚电路服务和数据报服务 虚电路 优点 xff1a 1 可以提供可靠的通信服务 2 因为数据是沿着建立的虚电路进行传输的 xff0c 因此分组的首部不需要携带完整
  • Linux下线程池(ThreadPool)

    目录 一 线程池相关概念及其优点 二 线程池的实现 一 线程池相关概念及其优点 线程池一种线程使用模式 xff0c 线程过多会带来这个调度的开销进而影响整体的性能 xff0c 而线程池是提前准备好了线程等待着管理者进行分配任务 1 线程池的
  • Golang协程常见面试题

    协程面试题 交替打印奇数和偶数N个协程打印1到maxVal交替打印字符和数字交替打印字符串三个协程打印ABCChannel练习 交替打印奇数和偶数 下面让我们一起来看看golang当中常见的算法面试题 使用两个goroutine交替打印1
  • JS 几种常见的遍历方式

    JS 几种常见的遍历方式 目录 JS 几种常见的遍历方式for循环for in 循环for of 循环forEach循环map方法参考资料 for循环 普通的写法let arr 61 1 2 3 for let i 61 0 i lt ar
  • mp4 转 jpg 图片

    先在 rosbag2video py 脚本中修改相关配置参数 然后运行脚本 python mp4 2 jpg py 代码如下 span class token keyword import span span class token mod
  • C# WinForm界面设计教程

    WinForm 是 Windows Form 的简称 xff0c 是基于 NET Framework 平台的客户端 xff08 PC软件 xff09 开发技术 xff0c 一般使用 C 编程 C WinForm 编程需要创建 Windows
  • 2021 山东大学软件学院 软件工程应用与实践--YOLOV5项目代码分析——(5)

    2021SC 64 SDUSC detection class Detections detections class for yolov5 inference results def init self imgs pred files n
  • Centos7更改ssh端口报错解决

    Centos7 ssh 端口问题解决 报错如下 xff1a failed to start openssh server daemonssh failed to start openssh server daemon 问题总结 xff1a
  • Python 列表的常见操作

    Python 列表的常见操作 从形式上看 xff0c 列表会将所有元素都放在一对中括号 里面 xff0c 相邻元素之间用逗号 分隔 xff0c 如下所示 xff1a element1 element2 element3 elementn x
  • TortoiseGit的安装教程以及用法

    TortoiseGit的安装教程以及用法 TortoiseGit 是基于 TortoiseSVN 的 Git 版本的 Windows Shell 界面 它是开源的 xff0c 可以完全使用免费软件构建 TortoiseGit 支持你执行常规

随机推荐