?? 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 + -