寫入一個點的單片機子程序。具體步驟是:計算出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); //轉回基本指令集 }
根據文字提示的內容,為什么第一次讀取的數據不要? 為什么與運算之后就可以同時顯示了?
想請教下前輩指點下,哪怕是提示下都可以。小弟先謝謝了
|