📄 lcd.c
字号:
#include "AT89X51.H"
#include "LCD.H"
#include <stdio.h>
#include <intrins.h>
#include <string.h>
/**************************************************
*最底层六个函数可驱动12032液晶
*12232
***************************************************/
char DrawType;
char code CharTable8[]; //8*8 ASCII码字型数据
char code CharTable10[];
#include "lcd12232.c"
void xchg(char *x,char*y) //交换值
{
char temp;
temp=*x;
*x=*y;
*y=temp;
}
void delay(long time)/////////int time////1000//////
{
long i=time,j;
while(i)
{
j=143;
while(j)j--;
i--;
}
}
/*
初始化LCD
*/
void LCDInit()
{
LCDWriteCom1(0xe2);
LCDWriteCom2(0xe2);
LCDWriteCom1(0xa4);
LCDWriteCom2(0xa4);
LCDWriteCom1(0xa9);
LCDWriteCom2(0xa9);
LCDWriteCom1(0xa0);
LCDWriteCom2(0xa0);
LCDWriteCom1(0xc0);
LCDWriteCom2(0xc0);
LCDWriteCom1(0xaf);
LCDWriteCom2(0xaf);
}
//清屏
void LCDClear()
{
unsigned char i,j;
for(i=0;i<4;i++)
{
LCDWriteCom1(0xb8|i);
LCDWriteCom2(0xb8|i);
LCDWriteCom1(0);
LCDWriteCom2(0);
for(j=0;j<80;j++)
{
LCDWriteDat1(0x0);
LCDWriteDat2(0x0);
}
}
}
/*
unsigned char LCDGetDat(char col,char page)
{
unsigned char dat;
if(col<MAXCOL)
{
LCDSetPage1(page);
LCDSetCol1(col);
dat=LCDReadDat1();
}
else
{
LCDSetPage2(page);
LCDSetCol2(col-MAXCOL);
dat=LCDReadDat2();
}
return dat;
}*/
/*
//在相应列和页显示数据图形
void LCDDrawDat(char col,char page,unsigned char dat)
{
if(col<MAXCOL)
{
LCDSetPage1(page);
LCDSetCol1(col);
LCDWriteDat1(dat);
}
else
{
LCDSetPage2(page);
LCDSetCol2(col-MAXCOL);
LCDWriteDat2(dat);
}
}*/
/*
//读入某页两列之间的数据存入数组
void LCDGetDatEx(char col1,char col2,char page,unsigned char *pdat)
{
char i;
if(col1>col2)xchg(&col1,&col2);
LCDSetPage2(page);
if(col1<MAXCOL&&col2<MAXCOL)
{
LCDSetPage1(page);
LCDSetCol1(col1);
for(i=col1;i<=col2;i++)
*(pdat++)=LCDReadDat1();
}
else if(col1>MAXCOL&&col2>MAXCOL)
{
LCDSetPage2(page);
LCDSetCol2(col1-MAXCOL);
for(i=col1-MAXCOL;i<=col2-MAXCOL;i++)
*(pdat++)=LCDReadDat2();
}
else
{
LCDSetPage1(page);
LCDSetCol1(col1);
for(i=col1;i<MAXCOL;i++)
*(pdat++)=LCDReadDat1();
LCDSetPage2(page);
LCDSetCol2(col1-MAXCOL);
for(i=MAXCOL;i<=col2-MAXCOL;i++)
*(pdat++)=LCDReadDat2();
}
}
*/
void LCDDrawRect(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,char color)
{
unsigned char i,j,page0,page1,width,temp,ym,dtemp,mask;
if(x0>x1)xchg(&x0,&x1);
if(y0>y1)xchg(&y0,&y1);
page0=y0>>3;
page1=y1>>3;
width=x1-x0+1;
ym=y0%8;
for(j=page0;j<=page1;j++)
{
if(j>3)break;
LCDSetPage1(j);
LCDSetPage2(j);
if(x0<MAXCOL&&x1<MAXCOL)
LCDWriteCom1(x0);
else if(x0<MAXCOL)
{
LCDWriteCom1(x0);
LCDWriteCom2(0);
}
else if(x0>=MAXCOL)
LCDWriteCom2(x0-MAXCOL);
LCDSetModifyWriteON1();
LCDSetModifyWriteON2();
for(i=x0;i<=x1;i++)
{
if(i>MAXCOL*2)break;
if(i<MAXCOL)dtemp=LCDReadDat1();
else dtemp=LCDReadDat2();
if(j==page0)
{
mask=0xff<<ym;
}
else if(j!=page0)
{
mask=0xff;
}
if(j==page1)
{
mask=mask&(0xff>>(7-y1%8));
}
temp=mask;
if(color==0)temp=dtemp&(~mask);
else temp=dtemp|mask;
if(i<MAXCOL)LCDWriteDat1(temp);
else if(i<2*MAXCOL) LCDWriteDat2(temp);
else break;
}
LCDSetModifyWriteOFF1();
LCDSetModifyWriteOFF2();
if(j>3)break;
}
}
void LCDDrawChar10(unsigned char x0,unsigned char y0,unsigned char *pic,char mode)
{
unsigned char i,j,page0,page1,temp,ym,dtemp,mask;
page0=y0>>3;
page1=y0+10>>3;
ym=y0%8;
for(j=page0;j<=page1;j++)
{
if(j>3)break;
LCDSetPage1(j);
LCDSetPage2(j);
if(x0<MAXCOL&&(x0+11)<MAXCOL)
LCDWriteCom1(x0);
else if(x0<MAXCOL)
{
LCDWriteCom1(x0);
LCDWriteCom2(0);
}
else if(x0>=MAXCOL)
LCDWriteCom2(x0-MAXCOL);
LCDSetModifyWriteON1();
LCDSetModifyWriteON2();
for(i=x0;i<=x0+10;i++)
{
unsigned char d0,d1;
if(i>MAXCOL*2)break;
if(i<MAXCOL)dtemp=LCDReadDat1();
else dtemp=LCDReadDat2();
if(i==x0+10)
{
d0=0;
d1=0;
}
else
{
d0=*(pic+i-x0);
if(i==x0)d1=pic[10]&0x3;
else if(i==x0+1)d1=(pic[10]>>2)&0x3;
else if(i==x0+2)d1=(pic[10]>>4)&0x3;
else if(i==x0+3)d1=(pic[10]>>6)&0x3;
else if(i==x0+4)d1=pic[11]&0x3;
else if(i==x0+5)d1=(pic[11]>>2)&0x3;
else if(i==x0+6)d1=(pic[11]>>4)&0x3;
else if(i==x0+7)d1=(pic[11]>>6)&0x3;
else if(i==x0+8)d1=pic[12]&0x3;
else if(i==x0+9)d1=(pic[12]>>2)&0x3;
}
if(j==page0)
{
temp=d0<<ym;
mask=0xff<<ym;
}
else if(j!=page0)
{
temp=(d0>>(8-ym))|(d1<<ym);
mask=0xff;
}
if(j==page1)
{
temp=temp&(0xff>>(7-(y0+10)%8));
mask=mask&(0xff>>(7-(y0+10)%8));
}
if(mode==DrawType_Normal)temp=(dtemp&(~mask))|(temp&mask);
else if(mode==DrawType_NotNormal)temp=(dtemp&(~mask))|((~temp)&mask);
else if(mode==DrawType_Mask)temp=(dtemp&(~mask))|((dtemp|temp)&mask);
else if(mode==DrawType_NotMask)temp=(dtemp&(~mask))|((dtemp|(~temp))&mask);
else if(mode==DrawType_And)temp=(dtemp&(~mask))|((dtemp&temp)&mask);
else if(mode==DrawType_Or)temp=(dtemp&(~mask))|((temp|dtemp)&mask);
//else if(mode==DrawType_Not)temp=(dtemp&(~mask))&((~temp)&mask);
// else if(mode==DrawType_MaskNot)temp=(dtemp&(~mask))|((~temp)&mask);
if(i<MAXCOL)LCDWriteDat1(temp);
else if(i<2*MAXCOL) LCDWriteDat2(temp);
else break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -