标题: 我看到网上用P0=0xff表示P0为与LCD D0~D7相连的I/O口,我想请教一下如果我LCD1602... [打印本页]

作者: 花园。    时间: 2020-1-5 15:35
标题: 我看到网上用P0=0xff表示P0为与LCD D0~D7相连的I/O口,我想请教一下如果我LCD1602...
我看到网上用P0=0xff表示P0为与LCD D0~D7相连的I/O口,我想请教一下如果我LCD1602的输入输出端口分别连接了P0^0,P2^7等多个端口的话,我要怎么定义它呢?谢谢啦!
作者: angmall    时间: 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. }


复制代码


作者: csmyldl    时间: 2020-1-5 16:42
LCD1602有数据线和控制线,P0=0xff只是数据输入,还有RS  RW  E控制线需要用另外的IO口,如P2口任意的IO口线均可使用

作者: 风起云涌的天    时间: 2020-1-5 17:01
你这样说比较笼统,首先要晒出你的硬件原理图,一般显示屏厂家都有示例程序,可以参考下。
作者: mffhxa    时间: 2020-1-5 17:22
P0=0xff只是p0口座位输入口的预备动作。P0口作为数据总线可以连接多个设备,如果要使用低位地址那就要用373了,然后区分每个设备就用P2,P0可以取0xff。
作者: my_qianhe    时间: 2020-1-5 20:45
如果一定要用8根线的话可以依次读取然后进行移位拼接,不过最好还是使用整PIN或者使用4PIN方案




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1