//按指定位置显示一个字符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++; } }}
依程序来看,你的LCD应该是1602,所以Y不可大于1,除了0就是1,代表只有2行,15则代表16列(0-15)。while (DData[ListLength]>0x19) //若到达字串尾则退出 还有这里为什么不能 〉0x19这一句的意思是,你传入的字符串结尾以大于0x19来表示字符串的结束,是自定义的. 还有什么问题
按位与运算,一般用于清零操作,Y按位与0x01就是和00000001b进行按位与运算,00000001是零的那些位,同样Y的那写位也变成零,只有最后一位不变。所以不管原来Y是什么Y &= 0x1;之后就只有最后一位不变,其它位都清零了。这样只是把X的第6位置位为1,并不影响其他位的状态,如果你用+法,有可能把第7位状态修改了。而且,或运算比算数运算速度快。
“|”不是或的意思。Y可以大于1,DisplayOneChar这个函数里面,Y取最低位,最低位为1(或者可以说Y为奇数)X的b6位置1.为什么不能 >0x19,这个应该是跟硬件有关系的,是由于硬件的限制。