寫入一個點的單片機子程序。具體步驟是:計算出X軸、Y軸的地址、X軸中的第幾位,然后讀出該地址現(xiàn)在的值,因為一般寫入新的點的時候,會覆蓋掉16個點中其他點,當(dāng)你要同時顯示16個點中的兩個點的時候就會沖突,所以先將顯示中的點讀出來,然后在或上要點亮的點,這樣就可以同時點亮。注意讀取數(shù)據(jù)的時候讀取的第一個數(shù)據(jù)不要,從第二數(shù)據(jù)開始取,也就是說要讀取三次,只取后面兩次的值。還有就是讀取數(shù)據(jù)之前要先寫入你要讀取數(shù)據(jù)的地址,讀取數(shù)據(jù)之后的寫入數(shù)據(jù)還要從新寫入地址。最后就是輸入數(shù)據(jù)地址,先輸入Y軸,再輸入X軸,輸入數(shù)據(jù)。 */ 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軸的地址,應(yīng)為縱坐標有64個,所有對32求余,當(dāng)Y大于31時,Y的坐標是下半屏的。 if(y>31) //計算X軸的地址當(dāng)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); //讀取數(shù)據(jù)的時候要先寫入所取數(shù)據(jù)的地址 write_com(x_adr); read_data(); //讀取的第一個字節(jié)不要, read=read_data(); //從第二個字節(jié)開始接收。 read<<=8; read|=read_data(); bt=bt|read; h_bit=bt>>8; l_bit=bt; write_com(y_adr); //寫入點的時候,重新寫入地址,因為地址已經(jīng)改變。 write_com(x_adr); write_num(h_bit); write_num(l_bit); write_com(0x36); //開顯示 write_com(0x30); //轉(zhuǎn)回基本指令集 }
根據(jù)文字提示的內(nèi)容,為什么第一次讀取的數(shù)據(jù)不要? 為什么與運算之后就可以同時顯示了?
想請教下前輩指點下,哪怕是提示下都可以。小弟先謝謝了
|