📄 lcd12864.c
字号:
//*************************************************************************************************
//* *
//* ******************************LCD12864驱动程序************************** *
//* *
//*************************************************************************************************
#include "includes.h"
//*************************************************************************************************
//* *
//* ********************************读忙标志位********************************* *
//* *
//*************************************************************************************************
bit bCheckBusy()
{
LCDPORT=0xFF;
RW=1;
DI=0;
E=1;
E=0;
return BUSYSTATUS;
}
//*************************************************************************************************
//* *
//* ********************************写数据********************************* *
//* *
//*************************************************************************************************
void vWriteData(unsigned char ucData)
{
while(bCheckBusy());
LCDPORT=0xFF;
RW=0;
DI=1;
LCDPORT=ucData;
E=1;
E=0;
}
//*************************************************************************************************
//* *
//* ********************************写指令********************************* *
//* *
//*************************************************************************************************
void vWriteCMD(unsigned char ucCMD)
{
while(bCheckBusy());
LCDPORT=0xFF;
RW=0;
DI=0;
LCDPORT=ucCMD;
E=1;
E=0;
}
//*************************************************************************************************
//* *
//* ********************************LCD初始化函数******************************* *
//* *
//*************************************************************************************************
void vLCDInitialize()
{
CS1=1;
CS2=1;
vWriteCMD(0x38); //8位形式,两行字符。
vWriteCMD(0x0F); //开显示。
vWriteCMD(0x01); //清屏。
vWriteCMD(0x06); //画面不动,光标右移。
vWriteCMD(LCDSTARTROW); //设置起始行。
}
//*************************************************************************************************
//* *
//* ******************************设置显示位置********************************* *
//* *
//*************************************************************************************************
vSetPosition(unsigned char ucPage,unsigned char ucLine)
{
if(ucLine<64)
{
CS1=1;
CS2=0;
}
else
{
CS1=0;
CS2=1;
}
vWriteCMD(LCDPAGE+ucPage);
vWriteCMD(LCDLINE+ucLine%64);
}
//*************************************************************************************************
//* *
//* ******************************显示自定义行********************************* *
//* *
//*************************************************************************************************
//在8×128的格子里显示自定义长度的一行
void vShowCustomRow(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char *ucaRow)
{
unsigned char ucCount; //取值范围:ucPage:0~7;ucLine:0~127;
//ucWidth:0~127;ucLine+ucWidth<128。
for(ucCount=0;ucCount<ucWidth;ucCount++)
{
vSetPosition(ucPage,ucLine+ucCount);
vWriteData(*(ucaRow+ucCount));
}
}
//*************************************************************************************************
//* *
//* ******************************清除指定范围********************************* *
//* *
//*************************************************************************************************
void vCleanCustom(unsigned char ucRow,unsigned char ucLine,unsigned char ucWidth,unsigned char ucHigh)
{
unsigned char ucCountOne,ucCountTwo;
for(ucCountOne=0;ucCountOne<ucHigh;ucCountOne++)
for(ucCountTwo=0;ucCountTwo<ucWidth;ucCountTwo++)
{
vSetPosition(ucRow+ucCountOne,ucLine+ucCountTwo);
vWriteData(0x00);
}
}
//*************************************************************************************************
//* *
//* ************************************清屏*********************************** *
//* *
//*************************************************************************************************
void vCleanAll()
{
unsigned char ucRow,ucLine;
CS1=1;
CS2=1;
for(ucRow=0;ucRow<8;ucRow++)
{
vWriteCMD(LCDPAGE+ucRow);
vWriteCMD(LCDLINE);
for(ucLine=0;ucLine<64;ucLine++)
vWriteData(0x00);
}
}
//*************************************************************************************************
//* *
//* *****************************字符显示函数*********************************** *
//* *
//*************************************************************************************************
//此函数将8×16字符显示在8×128的格子里。
void vShowChar(unsigned char ucCaps,unsigned char ucPage,unsigned char ucLine,unsigned char *ucaCharMap)
{
unsigned char ucCount,ucaTemp[5];
switch(ucCaps)
{
case CAPS_COMMON:
vShowCustomRow(ucPage,ucLine,8,ucaCharMap);
vShowCustomRow(ucPage+1,ucLine,8,ucaCharMap+8);
break;
case CAPS_MARK:
for(ucCount=0;ucCount<5;ucCount++)
{
ucaTemp[ucCount]=uca_MARK[40+ucLine+ucCount]|(*(ucaCharMap+ucCount));
}
vShowCustomRow(MARKPOS_ROW+1,ucLine,5,ucaTemp);
vShowCustomRow(MARKPOS_ROW+2,ucLine,5,ucaCharMap+5);
break;
case CAPS_TIME:
for(ucCount=0;ucCount<5;ucCount++)
{
ucaTemp[ucCount]=uca_TIME[40+ucLine+ucCount]|(*(ucaCharMap+ucCount));
}
vShowCustomRow(4,ucLine,5,ucaTemp);
vShowCustomRow(5,ucLine,5,ucaCharMap+5);
break;
default:
vShowCustomRow(ucPage,ucLine,5,ucaCharMap);
vShowCustomRow(ucPage+1,ucLine,5,ucaCharMap+5);
break;
}
}
//*************************************************************************************************
//* *
//* *****************************图片显示函数*********************************** *
//* *
//*************************************************************************************************
void vShowGraph(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,
unsigned char ucHigh,unsigned char * ucaGraph)
{
unsigned char ucCount;
for(ucCount=0;ucCount<ucHigh;ucCount++)
vShowCustomRow(ucPage+ucCount,ucLine,ucWidth,ucaGraph+ucCount*ucWidth);
}
//*************************************************************************************************
//* *
//* **********************************显示数字*********************************** *
//* *
//*************************************************************************************************
void vShowNumber(unsigned char ucCaps,unsigned char ucRow,unsigned char ucLine,unsigned long ulNumber)
{
unsigned char ucCount,ucNumberFront;
unsigned long ulNumberTemp=1000000000;
for(ucNumberFront=0;ucNumberFront<9;ucNumberFront++)
{
if(ulNumber/ulNumberTemp)
break;
ulNumberTemp/=10;
}
for(ucCount=0;ucCount<10-ucNumberFront;ucCount++)
{
if(ucCaps==CAPS_COMMON)
vShowChar(ucCaps,ucRow,ucLine+ucCount*NUMBERWIDTH,uca_Number[ulNumber/ulNumberTemp]);
else
vShowChar(ucCaps,ucRow,ucLine+ucCount*NUMBERSWIDTH,uca_NumberS[ulNumber/ulNumberTemp]);
ulNumber-=(ulNumber/ulNumberTemp)*ulNumberTemp;
ulNumberTemp/=10;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -