⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 单片机51环境下的字库代码122*32点阵的液晶显示
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -