关于51单片机的问题(C语言)

//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1?这个地方是怎么算的呀。说下呀
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; 还有这里!这里的“|”不是或的意思吗?
X |= 0x80; //算出指令码
WriteCommandLCM(X, 1); //发命令字
WriteDataLCM(DData); //发数据
}

//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength;

ListLength = 0;
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[ListLength]>0x19) //若到达字串尾则退出 还有这里为什么不能 〉0x19
{
if (X <= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
ListLength++;
X++;
}
}
}
最新回答
酷到炸的少女

2024-05-31 08:17:56

依程序来看,你的LCD应该是1602,所以Y不可大于1,除了0就是1,代表只有2行,15则代表16列(0-15)。

while (DData[ListLength]>0x19) //若到达字串尾则退出 还有这里为什么不能 〉0x19

这一句的意思是,你传入的字符串结尾以大于0x19来表示字符串的结束,是自定义的.

还有什么问题
良辰未赏透

2024-05-31 05:37:08

按位与运算,一般用于清零操作,Y按位与0x01就是和00000001b进行按位与运算,00000001是零的那些位,同样Y的那写位也变成零,只有最后一位不变。所以不管原来Y是什么Y &= 0x1;之后就只有最后一位不变,其它位都清零了。这样只是把X的第6位置位为1,并不影响其他位的状态,如果你用+法,有可能把第7位状态修改了。而且,或运算比算数运算速度快。
闲懒诗人

2024-05-31 00:18:55

“|”不是或的意思。

Y可以大于1,DisplayOneChar这个函数里面,Y取最低位,最低位为1(或者可以说Y为奇数)X的b6位置1.

为什么不能 >0x19,这个应该是跟硬件有关系的,是由于硬件的限制。