找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11942|回复: 7
打印 上一主题 下一主题
收起左侧

LCD1602+51单片机最小系统应用仿真及制作

  [复制链接]
跳转到指定楼层
楼主
本文将介绍LCD1602和51单片机最小系统结合在一起的简单实例,关于如何制作51单片机最小系统可以参见笔者之前写的一篇——51单片机最小系统的制作

先放两张实物图片:

            
            图片一(开机后)                                              图片二(按下按钮后)

好了,接下来正式进入制作环节:

第一步:仿真


绘制好原理图,仿真时单片机最小系统只放一个单片机就可以了,但实际电路中需要加上电源模块、复位模块。


                      原理图

原理图文件请在附件中找。

原理图绘制好后,编写代码并生成hex文件。代码内容为:

  1. /*************************功能************************/
  2. /*使用外部中断INTO改变LED状态,并且用1602显示出其状态*/
  3. #include<reg51.h>
  4. #include <intrins.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. uchar code table[]="   HELLO  1602  ";
  8. uchar code table0[]="1602   TEST      ";
  9. uchar code table1[]="RESULT:    "; //空格是写到LCD了,即空格也是内容
  10. uchar code table2[]="OK!";
  11. uchar code table3[]="liang";
  12. uchar code table4[]="mie";
  13. uchar num;
  14. sbit led=P1^7;
  15. sbit lcden=P2^0; //液晶使能端
  16. sbit lcdrs=P2^2; //液晶数据命令选择端选择写数据还是写命令
  17. void delay(uint z)        // 延时函数
  18. {
  19.    uint i,j;
  20.    for(i=z;i>0;i--)
  21.    for(j=110;j>0;j--);
  22. }
  23. void write_com(uchar com) //写入
  24. {
  25.   lcdrs=0; //LCD 选择输入命令
  26.   P0=com; //向P0 口输入命令          39-32端口
  27.   delay(5); //延时
  28.   lcden=1; //打开LCD 使能
  29.   delay(5); //一个高脉冲
  30.   lcden=0; //关闭LCD 使能
  31. }         
  32. void write_data(uchar date)
  33. {
  34.   lcdrs=1; //设置为输入数据
  35.   P0=date; //将数据赋给P0 口
  36.   delay(5); //延时
  37.   lcden=1; //置高
  38.   delay(5); //高脉冲
  39.   lcden=0; //置低完成高脉冲
  40. }
  41. void init()                //LED 初始化
  42. {
  43.   lcden=0;
  44.   write_com(0x38);//设置16x2 显示5x7 点阵,8 位数据接口         
  45.   write_com(0x0c); //设置开始显示不显示光标           (指令4)
  46.   write_com(0x06); //写一个字符后地址指针加1 (指令3)
  47.   write_com(0x01); //显示清零数据指针清零  (指令1)
  48. }
  49.         
  50. void display(unsigned char *p)//按指针  地址写入数据
  51. {
  52.    while(*p!='\0')
  53.      {
  54.        write_data(*p);                 //写数据
  55.        p++;
  56.        delay(1);
  57.      }
  58. }
  59.                                                          
  60. void main()
  61. {         
  62.    TCON=0x01;          //设置中断为INTO
  63.          IE=0x81;
  64.    led=0;
  65.          init();     
  66.     write_com(0x80); //将数据指针第一行第一个字处,
  67.           display(table);        //调用函数的方式写入数据
  68.           delay(800);
  69.           write_com(0x80); //将数据指针第一行第一个字处,
  70.           display(table0);        //调用函数的方式写入数据
  71.     write_com(0x80+0x40); //定义指针位置          将数据指针第二行第一个字处
  72.     for(num=0;num<7;num++)
  73.        {
  74.           write_data(table1[num]);
  75.           delay(5);
  76.        }
  77.           write_com(0x80+0x4c);         //按1602的地址单个写入数据
  78.           write_data(table2[0]);
  79.                 write_com(0x80+0x4d);          //按1602的地址单个写入数据
  80.           write_data(table2[1]);
  81.                 write_com(0x80+0x4e);                 //按1602的地址单个写入数据
  82.           write_data(table2[2]);               
  83.           while(1);                        
  84. }        
  85. void key_can() interrupt 0
  86. {
  87.    delay(20);        // 消除按键抖动
  88.    if(P3^3==0)
  89.      {
  90.            if(P3^3==0)
  91.            {
  92.              led=!led;
  93.                  
  94.            }
  95.            if(led==1)
  96.              {
  97.                write_com(0x80+0x4b);
  98.                      display(table3);
  99.                    }               
  100.           else if(led==0)
  101.             {
  102.               write_com(0x80+0x4b);            //按1602的地址单个写入数据
  103.                     display(table4);
  104.               write_com(0x80+0x4f);
  105.                     write_data(table1[8]);                 //按1602的地址单个写入数据
  106.                           write_com(0x80+0x4e);
  107.                     write_data(table1[8]);        
  108.                   }
  109.      }
  110.   }
复制代码

原理图和代码都有了,仿真的准备工作就完了,现在正式进入仿真。

将代码加载进单片机中,若不会加载者可以参见笔者之前写的一篇——51单片机最小系统的制作

点击仿真,查看结果。以下是一些结果图片:

            
          点击仿真时首先显示界面                                             点击仿真时第二显示界面并将一直停在此处

(由于开始时,主要有变化的就是LCD1602,故此处截图只截了一部分。)

           
        按下按钮后-灯亮,LCD1602显示有变化                      再次按下按钮后-灯亮,LCD1602显示有变化

第二步:准备元器件




第三步:绘制焊接图

此处默认手头已经有单片机最小系统了,没有的话可以参见笔者之前写的一篇——51单片机最小系统的制作

为了便于重复使用LCD1602,采用了排插;为了便于后续继续拓展LCD1602的实例,将此处的做成一个模块。

元器件布局图如下:




走线图(部分走线未画,具体请看图片中的文字)如下:






第四步:焊接
绘制好焊接图后,照着图一部分一部分焊接,就可以了。下图是我采用锡接走线法焊接好后的反面图:



切记不要焊短路了!!切记不要焊短路了!!切记不要焊短路了!!

第五步:实物测试

先将hex程序下载到单片机中,然后照着DSN原理图的连线用杜邦线将51单片机最小系统与LCD1062模块连接,接通电源,适当调节滑动变阻器来调整LCD1062的对比度,从而使字符显示清晰。LCD1062D的15脚接电源正极,16脚接电源负极,15和16位背光电源。

结语:遇到问题多查资料,多动手,做完之后写篇文章来温故一下,捋一下思路的同时也回馈大众~

部分参考资料来源:1.http://www.51hei.com/bbs/dpj-31284-1.html
2.http://www.51hei.com/bbs/dpj-57960-1.html
3.http://wenku.baidu.com/link?url= ... kXtUSQU-TBxEU46BWte


下载:
LCD1602 51单片机最小系统应用仿真及制作.zip (709.56 KB, 下载次数: 57)

评分

参与人数 2黑币 +110 收起 理由
zhaok2013 + 10 很给力!
admin + 100 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:285390 发表于 2018-2-25 14:31 | 只看该作者
我想问一下那个仿真文件可以用miltisim13.0打开吗
回复

使用道具 举报

板凳
ID:285390 发表于 2018-2-25 14:33 | 只看该作者
哇塞,这个文件特别给力
回复

使用道具 举报

地板
ID:167522 发表于 2018-5-7 18:01 | 只看该作者
好帖子,学习到了
回复

使用道具 举报

5#
ID:166089 发表于 2018-7-2 12:54 | 只看该作者
伊洁奥康 发表于 2018-2-25 14:31
我想问一下那个仿真文件可以用miltisim13.0打开吗

我是用Proteus仿真的,你可以试试
回复

使用道具 举报

6#
ID:685675 发表于 2020-3-8 16:41 | 只看该作者
你好,请问一下,我的89C52单片机引脚不够用了,想再加个LCD模块,自制这么一个洞洞板,连接单片机的哪里呢
回复

使用道具 举报

7#
ID:695749 发表于 2020-3-8 22:54 | 只看该作者
正好在学习1602,可以借鉴做个小系统。谢谢分享!
回复

使用道具 举报

8#
ID:166089 发表于 2020-3-9 09:16 | 只看该作者
tcsyz0071 发表于 2020-3-8 16:41
你好,请问一下,我的89C52单片机引脚不够用了,想再加个LCD模块,自制这么一个洞洞板,连接单片机的哪里呢

这个我不清楚,你可以自行百度一下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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