首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

YL-236開發板:LCD12864顯示漢字C語言驅動程序

     編輯:關於C語言

YL-236實驗:ST7920控制器LCD12864顯示16×16漢字點陣

本驅動針對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個漢字
}

關鍵技術總結

  1. 雙控制器寻址:12864分左右兩個64×64區域,CS1/CS2互斥選中。
  2. 漢字拆分:16×16點陣 = 兩個8×16半字,佔用兩行連續地址。
  3. 字模來源:extern unsigned char code abc[] 燒錄在Code區或外部Flash。
  4. 時序:E下降沿鎖存,RW=0寫,DI區分指令/數據。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved