📄 gxf.c
字号:
#include <includes.h>
#include <LCD.h>
unsigned char reg[]={
0x12,0x13,0x10,0x11,0x10,0x12,0x10,0x13,0x02,0x01,
0x08,0x03,0x0b,0x21,0x30,0x31,0x32,0x33,0x34,0x35,
0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,
0x07,0x07,0x07,0x07
};
unsigned int reg_data[]={
0x0009,0x133e,0x0604,0x0001,0x4634,0x0016,0x4730,0x313e,0x0700,0x011b,
0x0202,0x1030,0x0070,0x0000,0x0303,0x0303,0x0303,0x0303,0x0404,0x0404,
0x0404,0x0303,0x0000,0x0000,0x0000,0x0000,0xdb00,0x0000,0xaf00,0xdb00,
0x0005,0x0025,0x0027,0x0037
};
void LCD_Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=200;j>0;j--);
}
void wr_lcd(unsigned char comm,unsigned int dat)
{
PORTD&=~(1<<rs);
PORTD|=(comm<<rs);
PORTC=dat;
PORTA=dat>>8;
PORTD&=~(1<<wr);
PORTD|=(1<<wr);
}
void init_lcd()
{
unsigned char i;
PORTD&=~(1<<reset);
LCD_Delay(10);
PORTD|=(1<<reset);
for(i=0;i<34;i++)
{
wr_lcd(0,reg[i]);
wr_lcd(1,reg_data[i]);
if(i==5)LCD_Delay(25);
else if(i==29)LCD_Delay(220);
else if(i==31||i==33)LCD_Delay(45);
}
}
void show_lcd()
{
unsigned int i;
PORTC = 0x00;
DDRC = 0xFF;
PORTD = 0x00;
DDRD = 0xFF;
PORTA = 0x00;
DDRA = 0xFF;
PORTD|=(1<<rd);
init_lcd();
wr_lcd(0,0x07);
wr_lcd(1,0x0035);
for(i=0;i<12907;i++){wr_lcd(0,0x22);wr_lcd(1,0x001f);}
for(i=0;i<12907;i++){wr_lcd(0,0x22);wr_lcd(1,0x001f);}
for(i=0;i<12906;i++){wr_lcd(0,0x22);wr_lcd(1,0x001f);}
wr_lcd(0,0x07);
wr_lcd(1,0x0037);
}
void ZK_Enable(void)
{
SPCR=(1<<SPE)|(1<<MSTR);
SPSR|=(1<<SPI2X);
}
//***************************************************
//函数名称:SD_SPI_WriteByte(unsigned char val)
//函数功能:SPI发送或读取一个字节
//输入:val:将发送的字节
//输出:读取到的一字节
//***************************************************
unsigned char ZK_WriteByte(unsigned char val)
{
SPDR=val;
while(!(SPSR&(1<<SPIF)));
return SPDR;
}
void LCD_Show_Word(unsigned char X,unsigned char Y,unsigned int word,unsigned int Color,unsigned int Back)
{
unsigned char word_tab[32];
unsigned char i,j,temp;
unsigned long Address=0;
PORTD&=~(1<<3);
if((word>>8)>=0xA1 && (word>>8)<= 0xAB)
Address =(unsigned long)(((word>>8)-0xA1)*94+((word&0xff)-0xA1))*32+ 0x2C9D0;
else if((word>>8)>=0xB0 && (word>>8)<= 0xF7)
Address = (unsigned long)(((word>>8)-0xB0)*94+((word&0xff)-0xA1)+846)*32+ 0x2C9D0;
wr_lcd(0,0x21);
wr_lcd(1,Y*256+X);
ZK_WriteByte(0x0B);
ZK_WriteByte((Address>>16)&0xff);
ZK_WriteByte((Address>>8)&0xff);
ZK_WriteByte((Address)&0xff);
ZK_WriteByte(0xff);
for(i=0;i<32;i++)word_tab[i]=ZK_WriteByte(0xff);
PORTD|=(1<<3);
for(i=0;i<32;i++)
{
temp=word_tab[i];
for(j=0;j<8;j++)
{
if((temp&0x80)!=0){wr_lcd(0,0x22);wr_lcd(1,Color);}
else {wr_lcd(0,0x22);wr_lcd(1,Back);}
temp<<=1;
}
if(i%2)
{
Y++;
wr_lcd(0,0x21);
wr_lcd(1,Y*256+X);
}
}
}
void LCD_Show_Char(unsigned char X,unsigned char Y,unsigned char Char,unsigned int Color,unsigned int Back)
{
unsigned char word_tab[16];
unsigned char i,j,temp;
unsigned long Address=0;
PORTD&=~(1<<3);
if(Char>=0x20 && Char<=0x7E)Address=(Char-0x20)*16+0x1DD780;
wr_lcd(0,0x21);
wr_lcd(1,Y*256+X);
ZK_WriteByte(0x0B);
ZK_WriteByte((Address>>16)&0xff);
ZK_WriteByte((Address>>8)&0xff);
ZK_WriteByte((Address)&0xff);
ZK_WriteByte(0xff);
for(i=0;i<16;i++)word_tab[i]=ZK_WriteByte(0xff);
PORTD|=(1<<3);
for(i=0;i<16;i++)
{
temp=word_tab[i];
for(j=0;j<8;j++)
{
if((temp&0x80)!=0){wr_lcd(0,0x22);wr_lcd(1,Color);}
else {wr_lcd(0,0x22);wr_lcd(1,Back);}
temp<<=1;
}
Y++;
wr_lcd(0,0x21);
wr_lcd(1,Y*256+X);
}
}
void LCD_Show_String(unsigned char X,unsigned char Y, char str[],unsigned int Color,unsigned int Back)
{
unsigned int i;
for(i=0;str[i]!=0;i++)
{
if(str[i]>=0x20&&str[i]<=0x7e)
{
if((X+8)>176){Y+=16;X=0;}
LCD_Show_Char(X,Y,str[i],Color,Back);
X+=8;
}
else if(str[i+1]>=0xa1)
{
if((X+16)>176){Y+=16;X=0;}
LCD_Show_Word(X,Y,str[i]*256+str[i+1],Color,Back);
i++;
X+=16;
}
else
{
if((X+8)>175){Y+=16;X=0;}
LCD_Show_Char(X,Y,0x20,Color,Back);
X+=8;
}
if(Y>204)break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -