• 基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示两行常规字符应用


    基于基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD1602显示两行常规字符应用

    • STC12C5A60S2系列1T 8051单片机管脚图
    • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
    • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
    • 液晶显示器LCD1602简单介绍
      • 通过液晶显示器LCD1602显示两行常规字符

    STC12C5A60S2系列1T 8051单片机管脚图

    在这里插入图片描述在这里插入图片描述

    STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

    在这里插入图片描述

    STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

    在这里插入图片描述在这里插入图片描述

    液晶显示器LCD1602简单介绍

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    通过液晶显示器LCD1602显示两行常规字符

    在这里插入图片描述在这里插入图片描述

    #include <stc12c5a60s2.h>
    #define uchar unsigned char//自定义无符号字符型为uchar
    #define uint unsigned int//自定义无符号整数型为uint 
    #define LCD1602PinMode1 0x38//自定义液晶显示器LCD1602八位数据接口的两行5*8点阵 
    #define LCD1602PinMode2 0x28//自定义液晶显示器LCD1602四位数据接口的两行5*8点阵
    #define LCD1602CleanScreen 0x01//自定义液晶显示器LCD1602清屏变量
    #define LCD1602CursorRst 0x02//自定义液晶显示器LCD1602光标复位 
    #define LCD1602DisplayCursorGlint 0x0f//自定义液晶显示器LCD1602开显示开光标开光标闪烁 
    #define LCD1602DisplayCursorNoGlint 0x0e//自定义液晶显示器LCD1602开显示开光标不开光标闪烁  
    #define LCD1602DisplayNoCursorNoGlint 0x0c//自定义液晶显示器LCD1602开显示不开光标不开光标闪烁  
    #define LCD1602NoDisplayCursorNoGlint 0x08//自定义液晶显示器LCD1602不开显示不开光标不开光标闪烁  
    #define LCD1602CursorRightMoveDisplayNoMove 0x06//自定义液晶显示器LCD1602光标右移 显示不移动
    #define LCD1602CursorLeftMoveDisplayNoMove 0x04//自定义液晶显示器LCD1602光标左移 显示不移动
    #define LCD1602PictureLeftMove 0x07//自定义液晶显示器LCD1602画面左移 AC自增
    #define LCD1602PictureRightMove 0x05//自定义液晶显示器LCD1602画面右移 AC自减
    #define LCD1602CursorRightMove 0x10//自定义液晶显示器LCD1602光标右移
    #define LCD1602CursorLeftMove 0x14//自定义液晶显示器LCD1602光标左移
    #define LCD1602DisplayRightMove 0x18//自定义液晶显示器LCD1602显示右移
    #define LCD1602DisplayLeftMove 0x1c//自定义液晶显示器LCD1602显示左移
    #define LCD1602DisplayData P2//自定义液晶显示器LCD1602显示数据为单片机P2组引脚
    sbit LCD1602RS P2^5;//位定义液晶显示器LCD1602数据指令变量为单片机P2.5引脚
    sbit LCD1602RW P2^6;//位定义液晶显示器LCD1602读写变量为单片机P2.6引脚 
    sbit LCD1602EN P2^6;//位定义液晶显示器LCD1602使能变量为单片机P2.7引脚 
     void LCD1602Init()//液晶显示器初始化函数
    {
      LCD1602WriteCommand(LCD1602PinMode1);//液晶显示器LCD1602八位数据接口的两行5*8点阵 
      LCD1602WriteCommand(LCD1602DisplayNoCursorNoGlint);//液晶显示器LCD1602开显示不开光标不开光标闪烁
      LCD1602WriteCommand(LCD1602CursorRightMove);//液晶显示器LCD1602光标右移
      LCD1602WriteCommand(LCD1602CleanScreen);//液晶显示器LCD1602清屏
     }
     void LCD1602ReadBusy()//液晶显示器读忙函数
    {
      uchar i;//声明一个计数变量
      uchar State;//声明状态变量
      LCD1602DisplayData = 0xff;//液晶显示器LCD1602显示数据变量拉高
      LCD1602RS = 0;//液晶显示器LCD1602写入指令
      LCD1602RW = 1;//读取液晶显示器LCD1602
      do
     {
       LCD1602EN = 1;//液晶显示器LCD1602使能
       State = LCD1602DisplayData;//液晶显示器LCD1602显示数据赋给状态变量
       LCD1602EN = 0;//关液晶显示器LCD1602使能
       i++;
       if(i > 200)//防止液晶显示器LCD1602因损坏陷入do{}while循环中 导致无法执行其他程序
       break;
      }
      while(State & 0x80);//判断状态变量是否为1 为1表示液晶显示器LCD1602在忙 否则不忙
     }
     void LCD1602WriteCommand(uchar Command)//液晶显示器LCD1602写命令函数
    {
      LCD1602ReadBusy();//液晶显示器读忙函数
      LCD1602RS = 0;//液晶显示器LCD1602写入指令
      LCD1602RW = 0;//写入液晶显示器LCD1602
      LCD1602DisplayData = Command;//指令变量含有的数据赋给液晶显示器LCD1602显示数据变量
      LCD1602EN = 1;//液晶显示器LCD1602使能
      LCD1602EN = 0;//关液晶显示器LCD1602使能
     } 
     void LCD1602WriteData(uchar Data)//液晶显示器LCD1602写数据函数
    {
      LCD1602ReadBusy();//液晶显示器LCD1602读忙函数
      LCD1602RS = 1;//液晶显示器LCD1602写入数据
      LCD1602RW = 0;//写入液晶显示器LCD1602
      LCD1602DisplayData = Data;//数据变量含有的数据赋给液晶显示器LCD1602显示数据变量
      LCD1602EN = 1;//液晶显示器LCD1602使能
      LCD1602EN = 0;//关液晶显示器LCD1602使能
     } 
     void LCD1602ShowString(uchar x;uchar y;uchar *String)//液晶显示器LCD1602显示字符串函数 x变量为液晶显示器LCD1602横向显示 相当于列 y变量为液晶显示器LCD1602纵向显示 相当于行
    {
      if(0 == y)//液晶显示器LCD1602第一行显示
     {
       LCD1602WriteCommand(0x80 | x);//液晶显示器LCD1602第一行第一位显示
      }
      else
     {
       LCD1602WriteCommand(0x80 | (0x40 + x));//液晶显示器LCD1602第二行第一位显示
      }
      while(*String != ' \0 ')//判断字符串是否全部显示 
     {
       LCD1602WriteData(*String ++)//液晶显示器LCD1602写入字符串
      }
     }
     void main()//主函数
    {
      uchar String1[] = "Hello World";
      uchar String2[] = "Hello LCD1602";
      LCD1602Init();//液晶显示器初始化函数
      LCD1602ShowString1(0,0,String)//显示字符串
      LCD1602ShowString2(0,1,String)//显示字符串
      while(1);//主循环
     }    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
  • 相关阅读:
    微信小程序查询接口
    SpringBoot涉及的注解
    ADM 架构开发方法概述以及各个阶段的目的和交付物
    【每日一书】Python+selenium如何实现自动化测试?
    ctfshow MengXIn misc1
    毕业设计-深度学习机器视觉的交通标识符识别
    Android setTheme设置透明主题无效
    网易智企逆势进场,游戏工业化有了新可能
    百度飞浆EISeg高效交互式标注分割软件的使用教程
    【题解】Leetcode双周赛81 不同骰子序列的数目 困难
  • 原文地址:https://blog.csdn.net/CWQLTYH/article/details/134500431