st7920控制的12864打點(diǎn)
可以在任意位置打點(diǎn)了,在這里謝謝那些好心的人,把易于出現(xiàn)問題的地方給大家說明下,一定要仔細(xì)閱讀DATESHEET,方便后人。 1、打點(diǎn)位置的定位 2、讀取當(dāng)前顯示的數(shù)據(jù) 3、或和移位,即重新寫人的新數(shù)據(jù) 程序如下: void GUI_Point(uchar x,uchar y,uchar flag) { uchar x_Dyte,x_byte; //定義列地址的字節(jié)位,及在字節(jié)中的哪1位 uchar y_Dyte,y_byte; //定義為上下兩個(gè)屏(取值為0,1),行地址(取值為0~31) Write_command(0x36); //繪圖模式命令 /***X,Y坐標(biāo)互換,即普通的X,Y坐標(biāo)***/ x_Dyte=y/16; //計(jì)算在16個(gè)字節(jié)中的哪一個(gè) x_byte=y&0x0f; //計(jì)算在該字節(jié)中的哪一位 y_Dyte=x/32; //0為上半屏,1為下半屏 y_byte=x&0x1f; //計(jì)算在0~31當(dāng)中的哪一行 Write_command(0x80+y_byte); //設(shè)定行地址(y坐標(biāo)) Write_command(0x80+x_Dyte+8*y_Dyte); //設(shè)定列地址(x坐標(biāo)),并通過8*y_Dyte選定上下屏 Read_data(); GDRAM_hbit=Read_data(); //讀取當(dāng)前顯示高8位數(shù)據(jù) GDRAM_lbit=Read_data(); //讀取當(dāng)前顯示低8位數(shù)據(jù) delay_us(5); if(flag==1) { Write_command(0x80+y_byte); //設(shè)定行地址(y坐標(biāo)) Write_command(0x80+x_Dyte+8*y_Dyte); //設(shè)定列地址(x坐標(biāo)),并通過8*y_Dyte選定上下屏 delay_us(5); if(x_byte<8) //判斷其在高8位,還是在低8位 { Write_data(GDRAM_hbit|(0X01<<(7-x_byte))); //顯示GDRAM區(qū)高8位數(shù)據(jù) Write_data(GDRAM_lbit); //顯示GDRAM區(qū)低8位數(shù)據(jù) } else { Write_data(GDRAM_hbit); Write_data(GDRAM_lbit|(0x01<<(15-x_byte))); } } else { Write_data(0x00)); //清除GDRAM區(qū)高8位數(shù)據(jù) Write_data(0x00)); //清除GDRAM區(qū)低8位數(shù)據(jù) } } /**********讀取當(dāng)前地址的LCD顯示數(shù)據(jù)**********/ uchar Read_data() { uchar shuju; LCD_DATA_set_in; //端口PB設(shè)置為輸入 LCD_DATA_PORT=0xff; SET_DI; // D/I=1,代表數(shù)據(jù) SET_RW; // R/W=1.讀取 delay_us(10); SET_E; delay_us(100); shuju=PINB; //讀取當(dāng)前顯示的數(shù)據(jù) CLR_E; return(shuju); } |
評(píng)論