**************************************************** 读状态字 cd_flag = 1 读命令通到 = 0 读数据通到 w = 0 指令读写状态 返回1 准备好 返回0 忙 w = 1 数据读写状态 返回1 准备好 返回0 忙 w = 2 数据自动读状态 返回1 准备好 返回0 忙 w = 3 数据自动写状态 返回1 准备好 返回0 忙 w = 5 控制运行检测可能性返回1 准备好 返回0 忙 w = 6 屏读/栲贝出错状态 返回1 正确 返回0 出错 w = 7 闪烁状态检测 返回1 正常显示 返回0 关显示 ******************************************************/ void r_st (uchar w)//判忙 { uchar data i = 0; uchar data c; cd = 1; lcdbus = 0xff; ce = 0; while (--i) { rd = 0; c = lcdbus; rd = 1; ce = 1; if ((w == 1) && ((c & 3) == 3)) return; if ((w == 3) && (c & 8)) return; } } void wdata(bit cd_flag,uchar d) /*数据写操作*/ { cd = cd_flag; lcdbus = d; ce = 0; wr = 0; wr = 1; ce = 1; cd = 0; } /*双参数指令*/ void dmod(uchar x0,uchar x1,uchar c) { r_st(1); wdata(0,x0); r_st(1); wdata(0,x1); r_st(1); wdata(1,c); } /*单参数指令*/ void smod(uchar x1,uchar c) { r_st(1); wdata(0,x1); r_st(1); wdata(1,c); } /*无参数指令*/ void nmod(uchar c) { r_st(1); wdata(1,c); }
绘点函数: void wri_d(uchar o_y,uchar o_x) { uint c; c = o_y * 0x1e; dmod(c + (o_x / 8),(c + (o_x / 8) + 0x0800) >> 8,0x24);//双参数指令
nmod((~(o_x % 8)) | 0xf8);//无参数指令 }
请问:如上函数,“nmod((~(o_x % 8)) | 0xf8);//无参数指令”,这行应该是写指令,它是怎么实现绘点的?为什么要先按8取余,再取反,然后位或0xf8?
|