找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11516|回复: 10
收起左侧

STC89C52RC单片机驱动LCD1602的学习过程

  [复制链接]
ID:302494 发表于 2018-8-7 16:47 | 显示全部楼层 |阅读模式
本人学习单片机有段时间了,前段时间在网上淘了一个最小系统板,和LCD1602A液晶显示屏。折腾了半天不知道什么原因始终无显示,检查连接线没问题, 最小系统板也没问题。后来我分析可能是液晶显示屏是坏的,于是又在网上淘了两片,6元钱一片。回来一测试依旧没有显示。问题在哪呢?把代码发给朋友看,朋友检查了也没有问题,始终就是第一排黑色方块。今天闲来没事又拿出来摆弄,结果打开电源居然有显示了,但是关闭电源后再开又没有了,我就反复开关电源了一百多次依旧没有反应,后来我想既然有一次有显示代码就应该没有问题。那就是硬件了。于是花了两个小时自己焊接了一个最小系统板,一次成功。由于没有画图直接焊接的,现在把代买与大家分享。大虾请绕行。

制作出来实物图如下:

再发一张

再发一张

有显示了

有显示了

焊接技术就这样,勿喷

焊接技术就这样,勿喷

代码一个文件

代码一个文件


单片机源程序如下:
  1. #include <STC89C5xRC.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define LCD1602_DB P0
  5. sbit LCD1602_RS = P2^0;                                        //数据/命令选择端
  6. sbit LCD1602_RW = P2^1;                                        //读写选择端
  7. sbit LCD1602_EN = P2^2;                                        //使能信号

  8. void InitLcd1602();                                                //初始化液晶函数
  9. void Lcd1602Show(uchar x,uchar y,uchar *str);                                                //显示数据函数
  10. /************************************这是主函数******************************************/
  11. void main()
  12. {
  13.         uchar str[] = "This is demo!";
  14.         InitLcd1602();                                        //初始化液晶
  15.         Lcd1602Show(2,0,str);                                //指定坐标显示字符串
  16.         Lcd1602Show(0,1,"WeChat:6731663");        //指定坐标显示字符串
  17.         while(1);
  18. }
  19. /***********************************LCD遇忙等待函数****************************************/
  20. void LcdWaitReady()
  21. {
  22.         uchar sta;
  23.         LCD1602_DB = 0xFF;
  24.         LCD1602_RS = 0;
  25.         LCD1602_RW = 1;
  26.         do{
  27.                 LCD1602_EN = 1;
  28.                 sta = LCD1602_DB;
  29.                 LCD1602_EN = 0;
  30.         }while(sta & 0x80);                                        //数据端口最高位一直为高电平时它会一直等待。
  31. }

  32. /***********************************液晶写指令函数*****************************************/
  33. void LCD1602WriteCMD(uchar cmd)
  34. {
  35.         LcdWaitReady();                                                //LCD遇忙等待
  36.         LCD1602_RS = 0;
  37.         LCD1602_RW = 0;
  38.         LCD1602_DB = cmd;
  39.         LCD1602_EN = 1;                                                //使能引脚高脉冲
  40.         LCD1602_EN = 0;
  41. }
  42. /***********************************初始化液晶函数*****************************************/
  43. void InitLcd1602()
  44. {
  45.         LCD1602WriteCMD(0x38);                                //显示模式设置:16*2显示,5*7点阵,8位数据接口
  46.         LCD1602WriteCMD(0x0C);                                //显示开关及光标设置:显示开,光标关。
  47.         LCD1602WriteCMD(0x06);                                //光标+1,并且整屏不动
  48.         LCD1602WriteCMD(0x01);                                //显示清零,所有数据清零。
  49. }
  50. /**********************************液晶当前坐标函数****************************************/
  51. void LcdSetCursor(uchar x,uchar y)
  52. {
  53.         uchar addr;
  54.         if(y==0)
  55.         {
  56.                 addr = 0x00 + x;
  57.         }
  58.         else
  59.         {
  60.                 addr = 0x40 + x;
  61.         }
  62.         LCD1602WriteCMD(addr | 0x80);                //LCD数据指针必须是0x80开头
  63. }
  64. /***********************************液晶写数据函数*****************************************/
  65. void LcdWriteDate(uchar dat)
  66. {
  67.         LcdWaitReady();                                        //遇忙等待
  68.         LCD1602_RS = 1;
  69.         LCD1602_RW = 0;
  70.         LCD1602_DB = dat;
  71.         LCD1602_EN = 1;                                                //使能引脚高脉冲
  72.         LCD1602_EN = 0;
  73. }
  74. /***********************************液晶显示函数*******************************************/
  75. void Lcd1602Show(uchar x,uchar y,uchar *str)
  76. {
  77.         LcdSetCursor(x,y);                                        //LCD当前坐标函数
  78.         while(*str != '\0')                                        //字符串没有结束时执行
  79.         {
  80.                 LcdWriteDate(*str++);                        //传递完STR数据在对地址加加
  81.                
  82.         }
  83. }
复制代码

所有资料51hei提供下载:
LCD1602-1.rar (25.52 KB, 下载次数: 150)

评分

参与人数 2黑币 +51 收起 理由
紫色月夜 + 1 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:302494 发表于 2018-8-7 16:47 | 显示全部楼层
自己抢个沙发。
回复

使用道具 举报

ID:97554 发表于 2018-8-7 18:08 | 显示全部楼层
焊的不错,整整齐齐啊
回复

使用道具 举报

ID:378745 发表于 2018-8-7 22:11 | 显示全部楼层
焊接整齐,赞。
回复

使用道具 举报

ID:384398 发表于 2018-8-8 23:08 | 显示全部楼层
感谢分享!!!
回复

使用道具 举报

ID:390236 发表于 2018-8-31 11:07 | 显示全部楼层
焊接整齐
回复

使用道具 举报

ID:386381 发表于 2018-8-31 12:31 来自手机 | 显示全部楼层
这焊工简直是艺术品呀
回复

使用道具 举报

ID:414818 发表于 2019-1-12 21:53 | 显示全部楼层
焊的挺漂亮的。
回复

使用道具 举报

ID:535558 发表于 2020-10-21 13:29 来自手机 | 显示全部楼层
牛啊,这焊接可以的。
回复

使用道具 举报

ID:390236 发表于 2021-6-10 08:45 | 显示全部楼层
这焊接可以的 就是用焊锡多了一点
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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