12864液晶驅(qū)動(dòng)源碼,獨(dú)創(chuàng)中英文混合輸出
控制器7920
代碼沒啥好說,我盡量多寫了注釋,播放動(dòng)畫也很流暢的
亮點(diǎn)就是支持中英文混合輸出,其他沒啥
昨天發(fā)現(xiàn)座的公交車上用的也是這種12864 ,顯示溫度和時(shí)間...
C代碼
#ifndef_LCD12864_H
#define_LCD12864_H
#include"my51.h"
#defineLCD_dataBusP0//總線
sbitLCD_EN=P3^4;//使能控制
sbitLCD_RS=P3^5;//數(shù)據(jù)_命令選擇端
sbitLCD_RW=P3^6;//讀寫控制
sbitLCD_PSB=P3^7;//串并選擇,H并行,L串行
externboolbShowPicFlag;//繪圖時(shí)圖像顯示控制(僅控制GDRAM)
/*************************基本功能函數(shù)*********************************************/
externvoidLCD12864_init();//初始化,必須置頂調(diào)用
externvoidLCD12864_setPos(u8row,u8cols);//設(shè)置光標(biāo)位置
externvoidLCD12864_writeByte(u8dat);//寫一個(gè)字節(jié)
externvoidLCD12864_writeCmd(u8cmd);//寫指令
externu8LCD12864_readByte();//讀一個(gè)字節(jié)ram
externu8LCD12864_readIR();//讀暫存器
externboolLCD12864_isBusy();//判忙
/*************************調(diào)用基本字庫顯示文字**************************************/
//獨(dú)創(chuàng)支持全角半角字符及中英混合的字符串,或字符串的子串,起始行號(hào)row(0-3)和列坐標(biāo)cols(0-15),寫滿屏幕為止
//行號(hào)4-7行是滾動(dòng)區(qū)
externvoidLCD12864_writeData(u8row,u8cols,u8*pBuf,u8dataSize);//寫一堆數(shù)據(jù)
externvoidLCD12864_earseSomeDDRam(u8row,u8cols,u8dataSize);//擦除N字節(jié)DDRam
/*************************用戶自定義圖標(biāo)字體****************************************/
externvoidLCD12864_writeCGRAM(u8userRamNum,u8*pCGRAM_userCode);//寫自定義圖標(biāo)字體
externvoidLCD12864_showCGRAM(u8row,u8cols,u8num);//顯示自定義圖標(biāo)字體,row(0-3),cols(0-15)
externvoidLCD12864_clearCGRAM(u8CGRAM_groupNum);//CGRAM清零(初始化也可清0)
/*************************圖像顯示功能函數(shù)**********************************************/
externvoidLCD12864_showGDRAM(boolbShowImage);//GDRAM繪圖顯示開關(guān)
externvoidLCD12864_clearGDRAM();//液晶整個(gè)可視區(qū)的GDRAM快速清0
//前4參數(shù):起始點(diǎn)x(0-7)位址,y(0-63)坐標(biāo),要顯示的寬度(1-128)和高度(1-64)[可顯示從圖像左上角開始的部分區(qū)域]
//后4參數(shù):圖像代碼地址,圖像本身的寬度(1-128)和高度(1-64),反白(true反白,false不反白)
//畫圖填充GDRAM,注:顯示的區(qū)域或者圖像本身寬度必須是8的倍數(shù)
externu8LCD12864_drawGDRAM(u8x,u8y,u8width,u8height,u8*pImageCode,u8imageWidth,u8imageHight,boolbReverse);
externvoidLCD12864_drawDot(u8x,u8y,u8flag);//打點(diǎn),x(0-127),y(0-63),flag(0正常,1反白,2清0)
externboolLCD12864_drawXYLine(u8x1,u8y1,u8x2,u8y2,u8flag);//畫水平或垂直直線
externvoidLCD12864_drawAnyLine(u8x1,u8y1,u8x2,u8y2,u8flag);//畫任意直線
externvoidLCD12864_drawRectangle(u8x,u8y,u8width,u8height,u8flag);//畫矩形
externvoidLCD12864_drawFillRect(u8x,u8y,u8width,u8hight,u8flag);//填充矩形,可對(duì)矩形區(qū)反白或清0
externvoidLCD12864_drawVerticalSquare(u8x,u8y,u8r,u8flag);//畫站立的正方形
externvoidLCD12864_drawCircle(u8x0,u8y0,u8r,u8flag);//畫圓
//打點(diǎn)法全屏畫圖有點(diǎn)慢了,打點(diǎn)法反白矩形區(qū)還可以,建議矩形范圍小一些,不然比較慢
//打點(diǎn)法效果最好,因?yàn)槲淖值木匦螀^(qū)比較小,速度很快
//不過繪圖法反白文字效率高,flash空間充裕的建議用繪圖法
/***************************全屏滾動(dòng)*******************************************/
//需要滾動(dòng)時(shí),用LCD12864_writeScrollData()函數(shù),參數(shù)和LCD12864_writeData()一樣
externvoidLCD12864_writeScrollData(u8row,u8cols,u8*pBuf,u8dataSize);//寫數(shù)據(jù)(滾動(dòng)模式)
externvoidLCD12864_setScrollPos(u8row,u8cols);//設(shè)置滾動(dòng)模式的坐標(biāo)
externvoidLCD12864_showScrollCGRAM(u8row,u8cols,u8CGRAM_groupNum);//用于CGRAM滾動(dòng)顯示前執(zhí)行
externvoidLCD12864_startScroll(u8scrollNum,u16delay_ms);//滾動(dòng)開始
#endif
C代碼
#include"lcd12864.h"
//圖像與文字,圖像與用戶圖標(biāo),像素重合時(shí)是異或關(guān)系
//文字與用戶圖標(biāo)是覆蓋關(guān)系
boolbShowPicFlag=false;//繪圖時(shí)圖像顯示控制
/*
u8LCD12864_table[]={"123456789"};
*/
voidLCD12864_drawFillRect(u8x,u8y,u8width,u8hight,u8flag)//填充任意位置的整個(gè)矩形
{//矩形起始坐標(biāo)x(0-127),y(0-63),寬(1-128)高(1-64),flag有3種值,0正常填充,1反色,2清0
u8i=0;
u8j=0;
if(0==width||0==hight)//矩形寬度或高度為0時(shí)返回
{
return;
}
if((x+width>128||(y+hight)>64))
{
led2=0;
return;
}
for(j=0;j { for(i=0;i { LCD12864_drawDot(x+i,y+j,flag); } } } voidLCD12864_drawRectangle(u8x,u8y,u8width,u8hight,u8flag)//畫矩形 {//矩形起始坐標(biāo)x(0-127),y(0-63),寬度(1-128)和高度(1-64)flag有3種值,0正常寫1,1反色,2清0 if(0==width||0==hight)//矩形寬度或高度為0時(shí)返回 { return; } width--;hight--; LCD12864_drawXYLine(x,y,x+width,y,flag); LCD12864_drawXYLine(x+width,y,x+width,y+hight,flag); LCD12864_drawXYLine