/* 设置显示 RAM 起始地址,亦即光标位置, (x,y)-对应屏幕上的字符坐标 */
void LcdSetCursor(unsigned char x, unsigned char y)
{
unsigned char addr;
if (y == 0) //由输入的屏幕坐标计算显示 RAM 的地址
addr = 0x00 + x; //第一行字符地址从 0x00 起始
else
addr = 0x40 + x; //第二行字符地址从 0x40 起始
LcdWriteCmd(addr | 0x80); //设置 RAM 地址
}
/* 向 LCD1602 液晶写入一字节命令, cmd-待写入命令值 */
void LcdWriteCmd(unsigned char cmd)
{
LcdWaitReady();
LCD1602_RS = 0;
LCD1602_RW = 0;
LCD1602_DB = cmd;
LCD1602_E = 1;
LCD1602_E = 0;
}
谢谢您的回答!
但是我还是不太明白,0x80与addr的地址进行或运算,因为0x80二进制是1000 0000,那不就是相当于只把addr地址的高位置1,这一举动是为了什么呢?将这一运算后的结果传给写指令函数可以起到什么作用啊?
它们进行位运算出来后进入LCD某个pin脚,这叫信号输入(是条件需要),然后进过芯片处理后从另一个pin脚输出,高位一般表示高电压相反表示低电压(CPU只认识0和1),1表示灯会亮,0不会亮
addr是一个内存地址变量名,0x80是一个真正的内存地址(算是一个固定不变的常量值),addr|0x80就是对两个内存地址值进行位运算