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