找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5475|回复: 1
收起左侧

lcd1602显示的单片机子程序 模块化可多次调用 分享给大家

[复制链接]
ID:311903 发表于 2018-4-19 19:10 | 显示全部楼层 |阅读模式
给大家分享一个lcd1602显示的子程序模块化可多次调用,非常方便移植,不改或改一点就可以用到自己的程序中

0.jpg

单片机源程序如下:
  1. #include "lcd1602.h"

  2. /*LCD1602忙碌等待*/
  3. void LCD1602Wait()
  4. {
  5.   unsigned char sta;//读取LCD1602状态字
  6.   
  7.        /*读取液晶状态字之前必须将P2口全部拉高*/
  8.   LCD1602_DB = 0xFF;
  9.   
  10.   LCD1602_RS = 0;
  11.   LCD1602_RW = 1;
  12.   LCD1602_EN = 0;
  13.   
  14.   do  
  15.   {
  16.     LCD1602_EN = 1;
  17.     sta = LCD1602_DB;//读状态字
  18.     LCD1602_EN = 0;
  19.   } while (sta & 0x80); //检测最高位是否为1,1忙碌,0空闲
  20. }
  21. /*LCD1602写命令*/
  22. void LCD1602WriteCmd(unsigned char cmd)
  23. {
  24.   //读写前要进行液晶的忙碌等待
  25.   LCD1602Wait();
  26.   
  27.   LCD1602_RS = 0;
  28.   LCD1602_RW = 0;
  29.   LCD1602_EN = 0;
  30.   LCD1602_DB = cmd;
  31.   LCD1602_EN = 1;//高脉冲
  32.   LCD1602_EN = 0;//关闭液晶输出
  33. }
  34. /*LCD1602写数据*/
  35. void LCD1602WriteData(unsigned char dat)
  36. {
  37.   LCD1602Wait();
  38.   
  39.   LCD1602_RS = 1;
  40.   LCD1602_RW = 0;
  41.   LCD1602_EN = 0;
  42.   LCD1602_DB = dat;//送入数据
  43.   LCD1602_EN = 1;//高脉冲
  44.   LCD1602_EN = 0;//关闭液晶输出
  45. }
  46. /*液晶初始化*/
  47. void InitLCD1602()
  48. {
  49.   LCD1602WriteCmd(0x38); //写指令38H
  50.   LCD1602WriteCmd(0x0C); //开显示不显示光标
  51.   LCD1602WriteCmd(0x06); //写入字符时字符指针++且光标++
  52.   LCD1602WriteCmd(0x01); //显示清屏
  53. }
  54. /*在LCD1602的坐标(x, y)位置显示一个字节*/
  55. void LcdShowData(unsigned char x, unsigned char y, unsigned char byte)
  56. {
  57.   unsigned char addr;
  58.   
  59.   if (y == 0)
  60.   {
  61.     addr = 0x00 + x; //第一行的x位置显示
  62.   }
  63.   else
  64.   {
  65.     addr = 0x40 + x; //第二行x的位置显示
  66.   }
  67.   LCD1602WriteCmd(addr + 0x80);
  68.   LCD1602WriteData(byte);
  69. }
  70. /*在LCD1602的坐标(x, y)位置显示str*/
  71. void LcdShowStr(unsigned char x, unsigned char y, unsigned char * str)
  72. {
  73.   unsigned char addr;
  74.   
  75.   if (y == 0)
  76.   {
  77.     addr = 0x00 + x; //第一行的x位置显示
  78.   }
  79.   else
  80.   {
  81.     addr = 0x40 + x; //第二行x的位置显示
  82.   }
  83.   LCD1602WriteCmd(addr + 0x80);
  84.   while (*str != '\0')
  85.   {
  86.     LCD1602WriteData(*str++);
  87.   }
  88. }
  89. //*设置光标的位置为(x, y)
  90. void LcdSetCoursor(unsigned char x, unsigned char y)
  91. {
  92.   unsigned char addr;
  93.   
  94.   if (y == 0)
  95.   {
  96.     addr = 0x00 + x;
  97.   }
  98.   else
  99.   {
  100.     addr = 0x40 + x;
  101.   }
  102. ……………………

  103. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
1602显示函数.zip (27.6 KB, 下载次数: 38)
回复

使用道具 举报

ID:88256 发表于 2019-11-14 23:40 | 显示全部楼层
下载一个参考一下,谢谢了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表