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);
- }
- }
复制代码
|