找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我看到网上用P0=0xff表示P0为与LCD D0~D7相连的I/O口,我想请教一下如果我LCD1602...

[复制链接]
跳转到指定楼层
楼主
ID:678869 发表于 2020-1-5 15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我看到网上用P0=0xff表示P0为与LCD D0~D7相连的I/O口,我想请教一下如果我LCD1602的输入输出端口分别连接了P0^0,P2^7等多个端口的话,我要怎么定义它呢?谢谢啦!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2020-1-5 16:35 | 只看该作者
LCD1602还有一种使用高4位数据线的接法,可以减少单片机的负担。

另外,RW的控制也并非是必用的,如果仅仅是用于读取LCD1602“忙”的状态,就可以用稍事等待来代替。这样一来,RW就可以直接接地,使LCD1602永远处于写入的状态。

那么,LCD1602和单片机之间就仅仅需要6条线了,这就是LCD1602最简洁的连接方法。

  1. #include <reg51.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #define LCD1602_DATAPINS P1
  5. sbit lcdrs = P2^1;   //LCD寄存器选择
  6. sbit lcdrw = P2^2;   //LCD读写控制
  7. sbit lcden = P2^3;   //LCD使能控制

  8. void delay(uint m) //延时函数
  9. {while(--m);}
  10. //使用的是4位数据传输
  11. void write(uchar com, uchar lcddata) //LCD1602写入8位命令/数据子函数
  12. {

  13.         lcdrs=com;   //写入命令   0 选择发送命令    1 选择发送数据
  14.        
  15.         //LCD1602_DATAPINS=(lcddata);            //由于4位的接线是接到P1口的高四位,所以传送高四位不用改
  16.         LCD1602_DATAPINS=(lcddata&0xf0)>>4; //由于4位的接线是接到P1口的低四位,接到LCD高四位
  17.         //delay(200);
  18.         lcden=1;     //写入时序
  19.         delay(30);   //保持时间
  20.         lcden=0;     //使能清零

  21.         //LCD1602_DATAPINS=(lcddata & 0x0f)<< 4;   //发送低四位
  22.         LCD1602_DATAPINS=(lcddata&0x0f);           //发送高四位
  23.         //delay(200);
  24.         lcden=1;     //写入时序
  25.         delay(30);   //保持时间
  26.         lcden=0;     //使能清零
  27.         //delay(20);
  28. }

  29. void init()   //LCD初始化子函数
  30. {
  31.         lcdrw=0;   //选择写入
  32.         lcden=0;   //使能
  33.         delay(5);

  34.         write(0,0x32);   //将8位总线转为4位总线
  35.         write(0,0x28);   //在四位线下的初始化
  36.         write(0,0x0c);   //开显示 不显示光标
  37.         write(0,0x06);   // 读入后AC(指针)加1,向右写
  38.         write(0,0x01);   //清屏
  39.         write(0,0x80);   //设置数据指针起点
  40.         delay(255);

  41. }

  42. void main()
  43. {
  44.        
  45.         init(); //LCD初始化

  46.         while(1)
  47.         {
  48.                 write(1,'a');write(1,'b');delay(65255);delay(65255);
  49.         }
  50. }


复制代码

回复

使用道具 举报

板凳
ID:235200 发表于 2020-1-5 16:42 | 只看该作者
LCD1602有数据线和控制线,P0=0xff只是数据输入,还有RS  RW  E控制线需要用另外的IO口,如P2口任意的IO口线均可使用
回复

使用道具 举报

地板
ID:417295 发表于 2020-1-5 17:01 | 只看该作者
你这样说比较笼统,首先要晒出你的硬件原理图,一般显示屏厂家都有示例程序,可以参考下。
回复

使用道具 举报

5#
ID:195446 发表于 2020-1-5 17:22 | 只看该作者
P0=0xff只是p0口座位输入口的预备动作。P0口作为数据总线可以连接多个设备,如果要使用低位地址那就要用373了,然后区分每个设备就用P2,P0可以取0xff。
回复

使用道具 举报

6#
ID:398709 发表于 2020-1-5 20:45 | 只看该作者
如果一定要用8根线的话可以依次读取然后进行移位拼接,不过最好还是使用整PIN或者使用4PIN方案
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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