本驅動針對YL-236開發板上的LCD12864(ST7920兼容),實現圖形模式下的漢字顯示,支援雙控制器(左/右半屏CS1/CS2)寻址。
sbit CS1 = P2^0; sbit CS2 = P2^1; // 片選:左/右半屏 sbit E = P2^2; // 使能 sbit RW = P2^3; // 讀/寫 (可接地常寫) sbit DI = P2^4; // 數據/指令 sbit RST = P2^5; // 復位 (可接高電平)
void write(bit is_data, unsigned char dat) {
RW = 0; DI = is_data; P0 = dat;
E = 1; E = 0; // 下降沿觸發
RW = 1;
}
// x:0~31(行), y:0~127(列) -> 物理地址計算
void write_xy(unsigned char x, unsigned char y, unsigned char dat) {
CS1 = (y >= 64); CS2 = (y < 64); // 選半屏
write(0, 0x3F); // 顯示開
write(0, 0xC0); // 起始行
write(0, 0xB8+x); // X地址
write(0, 0x40+(y%64)); // Y地址
write(1, dat); // 寫數據 (高位在上)
}
// 顯示一個16x16漢字 (字模外部數組 abc[])
void hzk16(unsigned char x, unsigned int y, unsigned int idx) {
for (int k=0; k<16; k++) {
write_xy(x*2, y*16+k, abc[idx*32 + k]); // 上半字
write_xy(x*2+1, y*16+k, abc[idx*32 + k+16]); // 下半字
}
}
void main() {
unsigned int k, d;
while (1)
for (k=0; k<4; k++) // 4行
for (d=0; d<8; d++) // 8列
hzk16(k, d, d); // 顯示32個漢字
}
CS1/CS2互斥選中。extern unsigned char code abc[] 燒錄在Code區或外部Flash。E下降沿鎖存,RW=0寫,DI區分指令/數據。