控制器7920,代碼沒啥好說,我盡量多寫了注釋,播放動畫也很流暢的。
亮點就是支持中英文混合輸出,其他沒啥。
lcd12864.h源碼如下:
#ifndef _LCD12864_H
#define _LCD12864_H
#include "my51.h"
#define LCD_dataBus P0 //總線
sbit LCD_EN = P3^4; //使能控制
sbit LCD_RS = P3^5; //數(shù)據(jù)_命令選擇端
sbit LCD_RW = P3^6; //讀寫控制
sbit LCD_PSB= P3^7; //串并選擇,H并行,L串行
extern bool bShowPicFlag; //繪圖時圖像顯示控制(僅控制GDRAM)
/*************************基本功能函數(shù)*********************************************/
extern void LCD12864_init(); //初始化,必須置頂調(diào)用
extern void LCD12864_setPos(u8 row, u8 cols); //設(shè)置光標位置
extern void LCD12864_writeByte(u8 dat); //寫一個字節(jié)
extern void LCD12864_writeCmd(u8 cmd); //寫指令
extern u8 LCD12864_readByte(); //讀一個字節(jié)ram
extern u8 LCD12864_readIR(); //讀暫存器
extern bool LCD12864_isBusy(); //判忙
/*************************調(diào)用基本字庫顯示文字**************************************/
//獨創(chuàng)支持全角半角字符及中英混合的字符串,或字符串的子串,起始行號row(0-3)和列坐標cols(0-15),寫滿屏幕為止
//行號4-7行是滾動區(qū)
extern void LCD12864_writeData(u8 row, u8 cols,u8* pBuf,u8 dataSize);//寫一堆數(shù)據(jù)
extern void LCD12864_earseSomeDDRam(u8 row,u8 cols,u8 dataSize); //擦除N字節(jié)DDRam
/*************************用戶自定義圖標字體****************************************/
extern void LCD12864_writeCGRAM(u8 userRamNum,u8* pCGRAM_userCode); //寫自定義圖標字體
extern void LCD12864_showCGRAM(u8 row,u8 cols,u8 num) ; //顯示自定義圖標字體,row(0-3),cols(0-15)
extern void LCD12864_clearCGRAM(u8 CGRAM_groupNum) ; //CGRAM清零(初始化也可清0)
/*************************圖像顯示功能函數(shù)**********************************************/
extern void LCD12864_showGDRAM(bool bShowImage); //GDRAM繪圖顯示開關(guān)
extern void LCD12864_clearGDRAM(); //液晶整個可視區(qū)的GDRAM快速清0
//前4參數(shù):起始點x(0-7)位址,y(0-63)坐標,要顯示的寬度(1-128)和高度(1-64)[可顯示從圖像左上角開始的部分區(qū)域]
//后4參數(shù):圖像代碼地址,圖像本身的寬度(1-128)和高度(1-64), 反白(true反白,false不反白)
//畫圖填充GDRAM ,注:顯示的區(qū)域或者圖像本身寬度必須是8的倍數(shù)
extern u8 LCD12864_drawGDRAM(u8 x,u8 y,u8 width,u8 height,u8 *pImageCode,u8 imageWidth,u8 imageHight,bool bReverse);
extern void LCD12864_drawDot(u8 x,u8 y,u8 flag); //打點,x(0-127),y(0-63),flag(0正常,1反白,2清0)
extern bool LCD12864_drawXYLine(u8 x1, u8 y1,u8 x2, u8 y2,u8 flag); //畫水平或垂直直線
extern void LCD12864_drawAnyLine(u8 x1, u8 y1,u8 x2, u8 y2,u8 flag) ; //畫任意直線
extern void LCD12864_drawRectangle(u8 x,u8 y ,u8 width,u8 height,u8 flag);//畫矩形
extern void LCD12864_drawFillRect(u8 x,u8 y, u8 width,u8 hight,u8 flag); //填充矩形,可對矩形區(qū)反白或清0
extern void LCD12864_drawVerticalSquare(u8 x,u8 y,u8 r,u8 flag) ; //畫站立的正方形
extern void LCD12864_drawCircle(u8 x0,u8 y0,u8 r,u8 flag); //畫圓
//打點法畫圖實在太慢了,就不寫了,打點法反白矩形區(qū)還可以,建議矩形范圍小一些,不然比較慢
//打點法效果最好,因為文字的矩形區(qū)比較小,速度很快
//不過繪圖法反白文字效率高,flash空間充裕的建議用繪圖法
/***************************全屏滾動*******************************************/
//需要滾動時,用LCD12864_writeScrollData()函數(shù),參數(shù)和LCD12864_writeData()一樣
extern void LCD12864_writeScrollData(u8 row,u8 cols,u8* pBuf,u8 dataSize);//寫數(shù)據(jù) (滾動模式)
extern void LCD12864_setScrollPos(u8 row, u8 cols); //設(shè)置滾動模式的坐標
extern void LCD12864_showScrollCGRAM(u8 row,u8 cols,u8 CGRAM_groupNum);//用于CGRAM滾動顯示前執(zhí)行
extern void LCD12864_startScroll(u8 scrollNum,u16 delay_ms); //滾動開始
#endif