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