📄 lcdprint.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 + -