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

📄 lcdprint.c

📁 采用pc机键盘作为单片机输入设备的例子
💻 C
字号:
#include <mega161.h>
#include <string.h>
#define KEY_BUFFER_SIZE		16
#define MLED	PORTB.0
#define KEY1	PORTB.1
#define SS		PORTB.4
#define WR1		PORTC.0
#define WR2		PORTC.1
#define WR3		PORTC.2
#define HCS1	PORTC.3
#define HCS2	PORTC.4
#define CS3		PORTC.5
#define CS		PORTC.6
#define RST		PORTC.7
#define RS 		PORTD.4
#define E 		PORTD.5
#define WR		PORTD.6
#define RD		PORTD.7
#define KEY2	PORTE.0
#define KEY3	PORTE.1
#define KEY4	PORTE.2
void writelcd(unsigned char a,unsigned char rs)
{
	RS=0;
	CS=0;
	DDRA=0;
	E=1;
	delay_us(1);
	while(PINA&0x80)
	{
		#asm("wdr")
	};
	E=0;
	RS=rs;
	DDRA=0xff;
	PORTA=a;
	WR=0;
	E=1;
	delay_us(1);
	E=0;
	WR=1;
	CS=1;
}
void initlcd(unsigned char a)
{
	DDRA=0xff;
	PORTA=a;
	WR1=0;
	WR2=1;
	WR3=0;
	delay_us(1);
	WR3=1;
	if (a==0x10) HCS1=1;
	else HCS2=1;
	writelcd(0x3f,0);
	writelcd(0xc0,0);
	if (a==0x10) HCS1=0;
	else HCS2=0;
}
void read(unsigned char *aptr,unsigned char lenth,unsigned char a,unsigned char b,unsigned char c)
{
	unsigned char i;
	DDRA=0xff;
	PORTA=c|0x30;
	WR1=0;
	WR2=1;
	WR3=0;
	#asm("nop")
	WR3=1;
	PORTA=b;
	WR1=1;
	WR2=0;
	WR3=0;
	#asm("nop")
	WR3=1;
	for (i=0;i<lenth;i++)
	{
		#asm("wdr")
		DDRA=0xff;
		PORTA=a;
		WR1=0;
		WR2=0;
		WR3=0;
		#asm("nop")
		WR3=1;
		DDRA=0;
		RD=0;
		CS=0;
		CS3=0;
		#asm("nop")
		*(aptr+i)=PINA;
		RD=1;
		CS=1;
		CS3=1;
		a++;
	}
}
void put_array (unsigned char x,unsigned char *aptr,unsigned char *buf)
{
	unsigned char i,j,l;
	for (i=0;i<8;i++)
	{
		for (j=0;j<8;j++)
		{
			#asm("wdr");
			switch (x)
			{
				case 0:
					l=j<<1;
					break;
				case 1:
					l=(j<<1)+1;
					break;
				case 2:
					l=(j<<1)+16;
					break;
				case 3:
					l=(j<<1)+17;
					break;
				case 4:
					l=j;
					break;
				case 5:
					l=j+8;
					break;
			}
			*(aptr+i)>>=1;
			if (buf[l]&0x80)
  				*(aptr+i)|=0x80;
   			buf[l]<<=1;
		}
	}
}
void get_array (unsigned char g,
				unsigned char *aptr,
				unsigned char lenth,
				unsigned char a,
				unsigned char b,
				unsigned char c)
{
	unsigned char buf[32],i,j,l,*ptr;
	ptr=aptr;
	read (buf,lenth,a,b,c);
	if (lenth==32)
	{
		put_array(0,aptr,buf);
		aptr+=8;
		put_array(1,aptr,buf);
		aptr+=8;
		put_array(2,aptr,buf);
		aptr+=8;
		put_array(3,aptr,buf);
	}
	else if (lenth==16)
	{
		put_array(4,aptr,buf);
		aptr+=8;
		put_array(5,aptr,buf);
	}
	aptr=ptr;
	if (g)
	{
		for (i=0;i<lenth;i++)
		{
			#asm("wdr");
			*(aptr+i)=~*(ptr+i);
		}
	}
}
void cchar (unsigned char x,unsigned char y,unsigned char *aptr)
{
	unsigned char i,j;
	if (x&0x08)
	{
		j=0x20;
		HCS2=1;
	}
	else
	{
		j=0x10;
		HCS1=1;
	}
	y<<=1;
	x<<=3;
	x&=0x3f;
	x|=0x40;
	y&=0x07;
	y|=0xb8;
	DDRA=0xff;
	PORTA=j;
	WR1=0;
	WR2=1;
	WR3=0;
	delay_us(1);
	WR3=1;
	writelcd(x,0);
	writelcd(y,0);
	for (i=0;i<16;i++)
	{
		#asm("wdr")
		writelcd(*aptr,1);
		aptr++;
	}
	y++;
	writelcd(y,0);
	writelcd(x,0);
	for (i=0;i<16;i++)
	{
		#asm("wdr");
		writelcd(*aptr,1);
		aptr++;
	}
	HCS1=0;
	HCS2=0;
}
void echar (unsigned char x,unsigned char y,unsigned char *aptr)
{
	unsigned char i,j;
	if (x&0x08)
	{
		j=0x20;
		HCS2=1;
	}
	else
	{
		j=0x10;
		HCS1=1;
	}
	y<<=1;
	x<<=3;
	x&=0x3f;
	x|=0x40;
	y&=0x07;
	y|=0xb8;
	DDRA=0xff;
	PORTA=j;
	WR1=0;
	WR2=1;
	WR3=0;
	delay_us(1);
	WR3=1;
	writelcd(x,0);
	writelcd(y,0);
	for (i=0;i<8;i++)
	{
		#asm("wdr")
		writelcd(*aptr,1);
		aptr++;
	}
	y++;
	writelcd(y,0);
	writelcd(x,0);
	for (i=0;i<8;i++)
	{
		#asm("wdr");
		writelcd(*aptr,1);
		aptr++;
	}
	HCS1=0;
	HCS2=0;
}
void echar8 (unsigned char x,unsigned char y,unsigned char *aptr)
{
	unsigned char i,j;
	if (x&0x08)
	{
		j=0x20;
		HCS2=1;
	}
	else
	{
		j=0x10;
		HCS1=1;
	}
	x&=0x07;
	x<<=3;
	x&=0x3f;
	x|=0x40;
	y&=0x07;
	y|=0xb8;
	DDRA=0xff;
	PORTA=j;
	WR1=0;
	WR2=1;
	WR3=0;
	delay_us(1);
	WR3=1;
	writelcd(x,0);
	writelcd(y,0);
	for (i=0;i<8;i++)
	{
		#asm("wdr")
		writelcd(*aptr,1);
		aptr++;
	}
	HCS1=0;
	HCS2=0;
}
void zmprintf(unsigned char g,unsigned char x,unsigned char y,unsigned char *aptr)
{
	unsigned char lenth,i,a,b,c,array[32];
	unsigned int k;
	lenth = strlen(aptr);
	for (i=0;i<lenth;i++)
	{
		#asm("wdr");
		a=*aptr;
		aptr++;
		b=*aptr;
		if (a<0xa0 || b<0xa0)
		{
			k=(unsigned int)a;
			k<<=4;
			a=(unsigned char)(k&0xf0);
			k>>=8;
			b=(unsigned char)(k&0x00ff);
			c=0;
			get_array(g,array,16,a,b,c);
			echar(x+i,y,array);
		}
		else
		{
			k=(unsigned int)(a-0xa1)*94+(b-0xa1)+0x80;
			a=(unsigned char)(k&0x0007);
			a<<=5;
			k>>=3;
			b=(unsigned char)(k&0x00ff);
			k>>=8;
			c=(unsigned char)(k&0x00ff);
			get_array(g,array,32,a,b,c);
			cchar(x+i,y,array);
			i++;
			aptr++;
		}
	}
}
void zmprintf8(unsigned char g,unsigned char x,unsigned char y,unsigned char *aptr)
{
	unsigned char lenth,i,j,l,m,a,b,c,array[32],*ptr;
	unsigned int k;
	ptr=&array[16];
	lenth = strlen(aptr);
	for (i=0;i<lenth;i++)
	{
		#asm("wdr");
		a=*aptr;
		aptr++;
		b=*aptr;
		k=(unsigned int)a;
		k<<=4;
		a=(unsigned char)(k&0xf0);
		k>>=8;
		b=(unsigned char)(k&0x00ff);
		c=0;
		read(array,16,a,b,c);
		array[0]=array[2];
		array[1]=array[3];
		array[2]=array[5];
		array[3]=array[6];
		array[4]=array[7];
		array[5]=array[8];
		array[6]=array[10];
		array[7]=array[11];
		for (l=0;l<8;l++)
		{
			for (j=0;j<8;j++)
			{
				#asm("wdr");
  				*(ptr+l)>>=1;
   				if (array[j]&0x80)
	  				*(ptr+l)|=0x80;
	   			array[j]<<=1;
			}
		}
		if (g)
		{
			for (m=0;m<8;m++)
			{
				#asm("wdr");
				ptr[m]=~ptr[m];
			}
		}
 		echar8(x+i,y,ptr);
	}
}

⌨️ 快捷键说明

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