lcd.c

来自「本人开发的测量水的浊度的仪器」· C语言 代码 · 共 691 行 · 第 1/3 页

C
691
字号
	{
		if(ch == font8[i].fontcode)
	 	{
			idx = i;
			break;
		}
	}

	if(idx == 0xff)
		return;

	setcursordirection(CURSORDOWN);
	setcursoraddr(addr);
	writecmd(0x42);
	for(j=0;j<8;j++)
	{
		writedat(font8[idx].fontdat[j]);
	}
}
*/
void printchar16(unsigned short addr,unsigned short ch)
{
	unsigned char i,j,idx,c1,c2;
	unsigned char lo,hi;

	idx = 0xff;
	lo = ch&0xff;
	hi = ch>>8;
	for(i=0;i<sizeof(font16)/sizeof(Font16);i++)
	{
		c1 = font16[i].fontcode[0];
		c2 = font16[i].fontcode[1];
		if(c2 == lo && c1 == hi)
	 	{
			idx = i;
			break;
		}
	}

	if(idx == 0xff)
		return;

	setcursordirection(CURSORDOWN);
	for(i=0;i<2;i++)
	{
		setcursoraddr(addr+i);
		writecmd(0x42);
		for(j=i;j<32;j+=2)
		{
			writedat(font16[idx].fontdat[j]);
		}
	}
}

void printchar16x(unsigned short addr,unsigned char ch)
{
	unsigned char i,j,idx;

	for(i=0;i<sizeof(font16x)/sizeof(Font16X);i++)
	{
		if(ch == font16x[i].fontcode)
	 	{
			idx = i;
			break;
		}
	}

	setcursordirection(CURSORDOWN);
	for(i=0;i<2;i++)
	{
		setcursoraddr(addr+i);
		writecmd(0x42);
		for(j=i;j<64;j+=2)
		{
			writedat(font16x[idx].fontdat[j]);
		}
	}
}

void printchar32(unsigned short addr,unsigned short ch)
{
	unsigned char i,j,idx,c1,c2;
	unsigned char lo,hi;

	idx = 0xff;
	lo = ch&0xff;
	hi = ch>>8;
	for(i=0;i<sizeof(font32)/sizeof(Font32);i++)
	{
		c1 = font32[i].fontcode[0];
		c2 = font32[i].fontcode[1];
		if(c2 == lo && c1 == hi)
	 	{
			idx = i;
			break;
		}
	}

	if(idx == 0xff)
		return;

	setcursordirection(CURSORDOWN);
	for(i=0;i<4;i++)
	{
		setcursoraddr(addr+i);
		writecmd(0x42);
		for(j=i;j<128;j+=4)
		{
			writedat(font32[idx].fontdat[j]);
		}
	}
}
/*
void printstring8(unsigned char area,unsigned char x,unsigned char y,unsigned char *pstr)
{
	unsigned char c;
	unsigned short addr;

	if(pstr == 0 || area > 3)
		return;

	addr = x+y*320+area*0x4000;

	while(c = *pstr++)
	{
		printchar8(addr++,c);
	}
}
*/
void printstring16(unsigned char area,unsigned char x,unsigned char y,unsigned char *pstr)
{
	unsigned char c;
	unsigned short tmp;
	unsigned short addr;

	if(pstr == 0 || area > 3)
		return;

	addr = x+y*320+area*0x4000;

	while(c = *pstr++)
	{
		tmp = c<<8;
		if(c&0x80)
		{
			tmp |= *pstr++;
		}
		printchar16(addr,tmp);
		addr += 2;
	}
}

void printstring16x(unsigned char area,unsigned char x,unsigned char y,unsigned char *pstr)
{
	unsigned char c;
	unsigned short addr;

	if(pstr == 0 || area > 3)
		return;

	addr = x+y*320+area*0x4000;

	while(c = *pstr++)
	{
		printchar16x(addr,c);
		addr += 3;
	}
}

void printstring32(unsigned char area,unsigned char x,unsigned char y,unsigned char *pstr)
{
	unsigned char c;
	unsigned short tmp;
	unsigned short addr;

	if(pstr == 0 || area > 3)
		return;

	addr = x+y*320+area*0x4000;

	while(c = *pstr++)
	{
		tmp = c<<8;
		if(c&0x80)
		{
			tmp |= *pstr++;
		}
		printchar32(addr,tmp);
		addr += 4;
	}
}
/*
static uchar cursorx,cursory;
void clearcursor()
{
	unsigned short addr,i;
	setcursordirection(CURSORDOWN);
	addr = 0x4000+cursorx+cursory*320;
	setcursoraddr(addr);
	writecmd(0x42);
	for(i=0;i<8;i++)
		writedat(0x00);
	setcursoraddr(addr+1);
	writecmd(0x42);
	for(i=0;i<8;i++)
		writedat(0x00);
}

void setcursorpos(uchar x,uchar y)
{
	unsigned short addr,i;

	clearcursor();
	cursorx = x;
	cursory = y;

	setcursordirection(CURSORDOWN);
	addr = 0x4000+x+y*320;
	setcursoraddr(addr);
	writecmd(0x42);
	for(i=0;i<8;i++)
		writedat(0x1f);
	setcursoraddr(addr+1);
	writecmd(0x42);
	for(i=0;i<8;i++)
		writedat(0xf8);
}
*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?