写入一个点的单片机子程序。具体步骤是:计算出X轴、Y轴的地址、X轴中的第几位,然后读出该地址现在的值,因为一般写入新的点的时候,会覆盖掉16个点中其他点,当你要同时显示16个点中的两个点的时候就会冲突,所以先将显示中的点读出来,然后在或上要点亮的点,这样就可以同时点亮。注意读取数据的时候读取的第一个数据不要,从第二数据开始取,也就是说要读取三次,只取后面两次的值。还有就是读取数据之前要先写入你要读取数据的地址,读取数据之后的写入数据还要从新写入地址。最后就是输入数据地址,先输入Y轴,再输入X轴,输入数据。 */ voidput_point(uchar x,uchar y) { uint bt=0,read=0; uchar x_adr,y_adr,h_bit,l_bit; y_adr=0x80+y%32; //计算Y轴的地址,应为纵坐标有64个,所有对32求余,当Y大于31时,Y的坐标是下半屏的。 if(y>31) //计算X轴的地址当Y大于31时X的地址在下半屏,从0X88开始,小于31时X的地址是在上半屏,从0X80开始 x_adr=0x88+x/16; else x_adr=0x80+x/16; bt=0x8000>>(x%16); //求这个点到底是在哪个点 write_com(0x34); write_com(0x34); write_com(y_adr); //读取数据的时候要先写入所取数据的地址 write_com(x_adr); read_data(); //读取的第一个字节不要, read=read_data(); //从第二个字节开始接收。 read<<=8; read|=read_data(); bt=bt|read; h_bit=bt>>8; l_bit=bt; write_com(y_adr); //写入点的时候,重新写入地址,因为地址已经改变。 write_com(x_adr); write_num(h_bit); write_num(l_bit); write_com(0x36); //开显示 write_com(0x30); //转回基本指令集 }
根据文字提示的内容,为什么第一次读取的数据不要? 为什么与运算之后就可以同时显示了?
想请教下前辈指点下,哪怕是提示下都可以。小弟先谢谢了
|