标题:
我看到网上用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最简洁的连接方法。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATAPINS P1
sbit lcdrs = P2^1; //LCD寄存器选择
sbit lcdrw = P2^2; //LCD读写控制
sbit lcden = P2^3; //LCD使能控制
void delay(uint m) //延时函数
{while(--m);}
//使用的是4位数据传输
void write(uchar com, uchar lcddata) //LCD1602写入8位命令/数据子函数
{
lcdrs=com; //写入命令 0 选择发送命令 1 选择发送数据
//LCD1602_DATAPINS=(lcddata); //由于4位的接线是接到P1口的高四位,所以传送高四位不用改
LCD1602_DATAPINS=(lcddata&0xf0)>>4; //由于4位的接线是接到P1口的低四位,接到LCD高四位
//delay(200);
lcden=1; //写入时序
delay(30); //保持时间
lcden=0; //使能清零
//LCD1602_DATAPINS=(lcddata & 0x0f)<< 4; //发送低四位
LCD1602_DATAPINS=(lcddata&0x0f); //发送高四位
//delay(200);
lcden=1; //写入时序
delay(30); //保持时间
lcden=0; //使能清零
//delay(20);
}
void init() //LCD初始化子函数
{
lcdrw=0; //选择写入
lcden=0; //使能
delay(5);
write(0,0x32); //将8位总线转为4位总线
write(0,0x28); //在四位线下的初始化
write(0,0x0c); //开显示 不显示光标
write(0,0x06); // 读入后AC(指针)加1,向右写
write(0,0x01); //清屏
write(0,0x80); //设置数据指针起点
delay(255);
}
void main()
{
init(); //LCD初始化
while(1)
{
write(1,'a');write(1,'b');delay(65255);delay(65255);
}
}
复制代码
作者:
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