12864 液晶驱动程序Word文档格式.docx
《12864 液晶驱动程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《12864 液晶驱动程序Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
![12864 液晶驱动程序Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/30/92f89a96-273e-4cbd-9a87-708796ff4ed1/92f89a96-273e-4cbd-9a87-708796ff4ed11.gif)
sbitcs1=P3^4;
//片选1,低有效(前64列)
sbitcs2=P3^5;
//片选2,低有效(后64列)
sbitreset=P0^7;
//复位
/*-----------------------------------------------------------------------------------------
-----------*/
/*****函数列表****
//开关显示
voidSetOnOff(unsignedcharonoff)
//选择屏幕
//screen:
0-全屏,1-左屏,2-右
voidSelectScreen(unsignedcharscreen)
//清屏
voidClearScreen(unsignedcharscreen)
//显示8*8点阵
//旋转90度:
字模被竖着切分
//lin:
行(0-7),column:
列(0-15)
//address:
字模区首地址
voidShow88(unsignedcharlin,unsignedcharcolumn,unsignedintaddress)
//显示8*16字符
行(0-3),column:
//character:
字符代码(标准ASCII码)
voidShowChar(unsignedcharlin,unsignedcharcolumn,unsignedcharcharacter)
//显示8*16字符串
//!
!
只能显示在一行上即:
串长+column<
=15
voidShowString(unsignedcharlin,unsignedcharcolumn,unsignedchar*string)
//显示一个汉字
//hzcode:
汉字代码(自定义的)
voidShowHZ(unsignedcharlin,unsignedcharcolumn,unsignedinthzcode)
//显示图片
//旋转90度:
//startline:
开始行
//startcolumn:
开始列
//linechar:
图片行点除8(图片以8*8点阵为单位)
//columnchar:
图片列点除8(图片以8*8点阵为单位)
voidShowPicture(unsignedcharstartline,unsignedcharstartcolumn,unsignedchar
linechar,unsignedcharcolumnchar,unsignedintaddress)
问题大户
//显示一行汉字
行
//lineheadaddr:
此行汉字代码区首地址
voidShowLine(unsignedcharlin,unsignedintlineheadaddr)
//显示一屏汉字
//pageheadaddr:
此屏汉字代码地址区首地址
voidShowPage(unsignedintpageheadaddr)
//反显一个8*8字块
列(0-7)
voidReverseShow88(unsignedcharlin,unsignedcharcolumn)
//反显一个字符
行(0-4),column:
voidReverseShowChar(unsignedcharlin,unsignedcharcolumn)
//反显一个汉字
ReverseShowHZ(unsignedcharlin,unsignedcharcolumn)
//反显一行汉字
ReverseShow(unsignedcharlin)
//初始化LCD
voidInitLCD()
****函数列表结束*****/
/*--基本函数源程序-------------------------------------------------------------------------
//延时
Lcd12864delay()
{
unsignedinti=500;
while(i--){;
}
//状态检查
voidCheckState()
unsignedchardat;
di=0;
rw=1;
do{
LCD12864DataPort=0xff;
en=1;
dat=LCD12864DataPort;
en=0;
dat=0x90&
dat;
//仅当第4,7位为0时才可操作
}while(!
(dat==0x00));
//写显示数据
//dat:
显示数据
voidWriteByte(unsignedchardat)
CheckState();
di=1;
rw=0;
LCD12864DataPort=dat;
------------*/
//向LCD发送命令
//command:
命令
SendCommandToLCD(unsignedcharcommand)
rw=0;
LCD12864DataPort=command;
//设定行地址(页)--X0-7
voidSetLine(unsignedcharline)
line=line&
0x07;
//0<
=line<
=7
line=line|0xb8;
//10111xxx
SendCommandToLCD(line);
//设定列地址--Y0-63
voidSetColumn(unsignedcharcolumn)
column=column&
0x3f;
//0=<
COLUMN<
=63
column=column|0x40;
//01xxxxxx
SendCommandToLCD(column);
//设定显示开始行--XX
voidSetStartLine(unsignedcharstartline)//0--63
startline=startline&
startline=startline|0xc0;
//11000000
SendCommandToLCD(startline);
onoff=0x3e|onoff;
//0011111x
SendCommandToLCD(onoff);
----------*/
0-全屏,1-左屏,2-右屏
{//北京显示器:
负有效cs1:
0--右;
cs2:
0--左
switch(screen)
{case0:
cs1=0;
//全屏
_nop_();
_nop_();
cs2=0;
break;
case1:
cs1=1;
//左屏
case2:
//右屏
cs2=1;
{unsignedchari,j;
SelectScreen(screen);
for(i=0;
i<
8;
i++)
{SetLine(i);
for(j=0;
j<
64;
j++)
WriteByte(0x00);
---------*/
{unsignedchari;
if(column>
16){return;
if(column<
8)SelectScreen
(1);
//如果列数<
8(0,1,2,3,4,5,6,7)则写在第一屏上
else{
SelectScreen
(2);
//否则(8,9,10,11,12,13,14,15)写在第二屏上
//防止越界
SetLine(lin);
SetColumn(column<
<
3);
i++)WriteByte(CBYTE[address+i]);
-------*/
{lin=lin<
1;
Show88(lin,column,ASCII816[character-0x20]);
Show88(lin+1,column,ASCII816[character-0x20]+8);
------*/
/*
{unsignedcharch;
unsignedchari=0;
while(*string!
='
'
\0'
)
ch=*string;
if(i+column>
15)break;
//(只能显示在一行上即:
=15)
ShowChar(lin,i+column,ch);
string++;
i++;
*/
-----*/
//ucharcodeHZtable
lin=lin<
//lin*2
Show88(lin,column,HZTable[hzcode]);
Show88(lin,column+1,HZTable[hzcode]+8);
Show88(lin+1,column,HZTable[hzcode]+16);
Show88(lin+1,column+1,HZTable[hzcode]+24);
COLUMNCHAR;
I++)
LINECHAR;
J++)
Show88(startline+i,startcolumn+j,address+(i*linechar+j)*8);
//显示一行字符串(汉字,字母混排,一行16字节)
voidShowLine(unsignedcharlin,unsignedcharlinehead[])
unsignedcharbyte;
unsignedinthzcode;
for(i=0;
i<
16;
)
{byte=linehead;
if(byte<
0x80)//字母
if(i>
15)return;
//!
编译器有问题,须强制退出
ShowChar(lin,i,byte);
i=i+1;
else//byte>
=0x80(汉字)
byte=byte&
0x7f;
//最高位置0,即:
减去0x8000
hzcode=(unsignedint)byte<
//?
?
//高8位
hzcode=hzcode+linehead[i+1];
//加低8位,组合成整型数地址
ShowHZ(lin,i,hzcode);
i=i+2;
voidShowPage(unsignedcharpagehead[][16])
4;
i++)ShowLine(i,pagehead);
//1行8个汉字,16字节
//读显示数据
unsignedcharReadByte()
rw=1;
return(dat);
unsignedchartab[8];
4(0,1,2,3),则写在第一屏上
elseSelectScreen
(2);
//否则(4,5,6,7),写在第二屏上
//读上部8列
column=column<
3;
//每个方块8*8大小
SetColumn(column);
tab[0]=ReadByte();
//空读!
i++)tab=~ReadByte();
//写回
i++)WriteByte(tab);
/*----------------------------------------------------------------