lcd1602的例程看不懂求助大神!

2019-07-15 20:23发布

io口定义
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;


/*******************************************************************************
* 函 数 名 : LcdWriteData
* 函数功能 : 向LCD写入一个字节的数据
* 输 入 : dat
* 输 出 : 无
*******************************************************************************/
#ifndef LCD1602_4PINS
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择输入数据
LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = dat; //写入数据
Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5); //保持时间
LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat) //写入数据
{
LCD1602_E = 0; //使能清零
LCD1602_RS = 1; //选择写入数据
LCD1602_RW = 0; //选择写入

LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;

LCD1602_DATAPINS = dat << 4; //写入低四位
Lcd1602_Delay1ms(1);

LCD1602_E = 1; //写入时序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif



不太明白为什么有个else
这是两种写法么?另外第二种写法我看不懂啊!
写入为什么要有低四位和高四位?而且为什么没有写写入的ddram位置什么的?比如在0x80位置写数据?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
愤怒的企鹅
1楼-- · 2019-07-16 00:36
把1602显示的原理搞懂了,你就看得到这程序了
伏尔加的鱼
2楼-- · 2019-07-16 05:55
你的C语言有待提高啊,虽然我也是菜鸟——#else是条件编译,LCD1602用4线和8线通信函数名相同,看宏定义是什么来决定使用几线的通信方式啊
化工自动化
3楼-- · 2019-07-16 06:01
伏尔加的鱼 发表于 2014-3-31 09:36
你的C语言有待提高啊,虽然我也是菜鸟——#else是条件编译,LCD1602用4线和8线通信函数名相同,看宏定义是 ...

我真心满菜鸟的,求指导
伏尔加的鱼
4楼-- · 2019-07-16 08:21
 精彩回答 2  元偷偷看……
bulukebo
5楼-- · 2019-07-16 13:36
支持一下,涨知识了

一周热门 更多>