#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RST=P1^0;
sbit DI=P1^5;
sbit RW=P1^4;
sbit CS1=P1^2;
sbit CS2=P1^1;
sbit EN=P1^3;
sbit RDY=P0^7;
sfr LCD=0x80;
#define LCD_DISPON 0x3f
#define LCD_STARTROW 0xc0
#define LCD_ADDRSTRY 0xb8
#define LCD_ADDRSTRX 0x40
#define CS1 0
#define CS2 1
void LCD_WrCmd(bit port,uchar cmd)
{ EN=0;
if(port)
{ CS2=1;
CS1=0;
}
else
{CS2=0;
CS1=1;
}
DI=0;
RW=0;
EN=1;
LCD=cmd;
EN=0;
}
void LCD_WrDat(bit port,uchar wrdata)
{ EN=0;
if(port)
{ CS2=1;
CS1=0;
}
else
{CS2=0;
CS1=1;
}
DI=1;
RW=0;
EN=1;
LCD=wrdata;
EN=0;
}
uchar code ASCII_TAB[480] =
{ 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x9e, 0x00, 0x00,
0x00, 0x0e, 0x00, 0x0e, 0x00,
0x28, 0xfe, 0x28, 0xfe, 0x28,
0x48, 0x54, 0xfe, 0x54, 0x24,
0x46, 0x26, 0x10, 0xc8, 0xc4,
0x6c, 0x92, 0xaa, 0x44, 0xa0,
0x00, 0x0a, 0x06, 0x00, 0x00,
0x00, 0x38, 0x44, 0x82, 0x00,
0x00, 0x82, 0x44, 0x38, 0x00,
0x28, 0x10, 0x7c, 0x10, 0x28,
0x10, 0x10, 0x7c, 0x10, 0x10,
0x00, 0xa0, 0x60, 0x00, 0x00,
0x10, 0x10, 0x10, 0x10, 0x10,
0x00, 0xc0, 0xc0, 0x00, 0x00,
0x40, 0x20, 0x10, 0x08, 0x04,
0x7C, 0xA2, 0x92, 0x8A, 0x7C,
0x84, 0xC2, 0xA2, 0x92, 0x8C,
0x42, 0x82, 0x8A, 0x96, 0x62,
0x30, 0x28, 0x24, 0xFE, 0x20,
0x4E, 0x8A, 0x8A, 0x8A, 0x72,
0x78, 0x94, 0x92, 0x92, 0x60,
0x02, 0xE2, 0x12, 0x0A, 0x06,
0x6C, 0x92, 0x92, 0x92, 0x6C,
0x0C, 0x92, 0x92, 0x52, 0x3C,
0x00, 0x6C, 0x6C, 0x00, 0x00,
0x00, 0xAC, 0x6C, 0x00, 0x00,
0x10, 0x28, 0x44, 0x82, 0x00,
0x28, 0x28, 0x28, 0x28, 0x28,
0x00, 0x82, 0x44, 0x28, 0x10,
0x04, 0x02, 0xA2, 0x12, 0x0C,
0x64, 0x92, 0xF2, 0x82, 0x7C,
0xFC, 0x22, 0x22, 0x22, 0xFC,
0xFE, 0x92, 0x92, 0x92, 0x6C,
0x7C, 0x82, 0x82, 0x82, 0x44,
0xFE, 0x82, 0x82, 0x44, 0x38,
0xFE, 0x92, 0x92, 0x92, 0x82,
0xFE, 0x12, 0x12, 0x12, 0x02,
0x7C, 0x82, 0x92, 0x92, 0xF4,
0xFE, 0x10, 0x10, 0x10, 0xFE,
0x00, 0x82, 0xFE, 0x82, 0x00,
0x40, 0x80, 0x82, 0x7E, 0x02,
0xFE, 0x10, 0x28, 0x44, 0x82,
0xFE, 0x80, 0x80, 0x80, 0x80,
0xFE, 0x04, 0x18, 0x04, 0xFE,
0xFE, 0x08, 0x10, 0x20, 0xFE,
0x7C, 0x82, 0x82, 0x82, 0x7C,
0xFE, 0x12, 0x12, 0x12, 0x0C,
0x7C, 0x82, 0xA2, 0x42, 0xBC,
0xFE, 0x12, 0x32, 0x52, 0x8C,
0x8C, 0x92, 0x92, 0x92, 0x62,
0x02, 0x02, 0xFE, 0x02, 0x02,
0x7E, 0x80, 0x80, 0x80, 0x7E,
0x3E, 0x40, 0x80, 0x40, 0x3E,
0x7E, 0x80, 0x70, 0x80, 0x7E,
0xC6, 0x28, 0x10, 0x28, 0xC6,
0x0E, 0x10, 0xE0, 0x10, 0x0E,
0xC2, 0xA2, 0x92, 0x8A, 0x86,
0x00, 0xFE, 0x82, 0x82, 0x00,
0x04, 0x08, 0x10, 0x20, 0x40,
0x00, 0x82, 0x82, 0xFE, 0x00,
0x08, 0x04, 0x02, 0x04, 0x08,
0x80, 0x80, 0x80, 0x80, 0x80,
0x00, 0x02, 0x04, 0x08, 0x00,
0x40, 0xA8, 0xA8, 0xA8, 0xF0,
0xFE, 0x90, 0x88, 0x88, 0x70,
0x70, 0x88, 0x88, 0x88, 0x40,
0x70, 0x88, 0x88, 0x90, 0xFE,
0x70, 0xA8, 0xA8, 0xA8, 0x30,
0x10, 0xFC, 0x12, 0x02, 0x04,
0x18, 0xA4, 0xA4, 0xA4, 0x7C,
0xFE, 0x10, 0x08, 0x08, 0xF0,
0x00, 0x88, 0xFA, 0x80, 0x00,
0x40, 0x80, 0x88, 0x7A, 0x00,
0xFE, 0x20, 0x50, 0x88, 0x00,
0x00, 0x82, 0xFE, 0x80, 0x00,
0xF8, 0x08, 0x30, 0x08, 0xF8,
0xF8, 0x10, 0x08, 0x08, 0xF0,
0x70, 0x88, 0x88, 0x88, 0x70,
0xF8, 0x28, 0x28, 0x28, 0x10,
0x10, 0x28, 0x28, 0x30, 0xF8,
0xF8, 0x10, 0x08, 0x08, 0x10,
0x90, 0xA8, 0xA8, 0xA8, 0x40,
0x08, 0x7E, 0x88, 0x80, 0x40,
0x78, 0x80, 0x80, 0x40, 0xF8,
0x38, 0x40, 0x80, 0x40, 0x38,
0x78, 0x80, 0x60, 0x80, 0x78,
0x88, 0x50, 0x20, 0x50, 0x88,
0x18, 0xA0, 0xA0, 0xA0, 0x78,
0x88, 0xC8, 0xA8, 0x98, 0x88,
0x00, 0x10, 0x6C, 0x82, 0x00,
0x00, 0x00, 0xFE, 0x00, 0x00,
0x00, 0x82, 0x6C, 0x10, 0x00,
0x10, 0x10, 0x54, 0x38, 0x10,
0x10, 0x38, 0x54, 0x10, 0x10};
void LCD_DispFill(uchar filldata)
{ uchar x,y;
LCD_WrCmd(CS1,LCD_STARTROW);
LCD_WrCmd(CS2,LCD_STARTROW);
for(y=0;y<8;y++)
{ LCD_WrCmd(CS1,LCD_ADDRSTRY+y);
LCD_WrCmd(CS1,LCD_ADDRSTRX);
LCD_WrCmd(CS2,LCD_ADDRSTRY+y);
LCD_WrCmd(CS2,LCD_ADDRSTRX);
for(x=0;x<64;x++)
{ LCD_WrDat(CS1,filldata);
LCD_WrDat(CS2,filldata);
}
}
}
void LCD_DispIni(void)
{ uint i;
LCD_RST=0;
for(i=0;i<500;i++);
LCD_RST=1;
LCD_WrCmd(CS1,LCD_DISPON);
LCD_WrCmd(CS1,LCD_STARTROW);
LCD_WrCmd(CS2,LCD_DISPON);
LCD_WrCmd(CS2,LCD_STARTROW);
LCD_DispFill(00);
LCD_WrCmd(CS1,LCD_ADDRSTRY+0);
LCD_WrCmd(CS1,LCD_ADDRSTRX+0);
LCD_WrCmd(CS2,LCD_ADDRSTRY+0);
LCD_WrCmd(CS2,LCD_ADDRSTRX+0);
}
void LCD_DispChar(bit color,uchar cy,uchar cx,char dispdata)
{ uchar code *pch;
uchar i;
bit port;
cy=cy&0x07;
cx=cx&0x0f;
pch=&ASCII_TAB[(dispdata-0X20)*5];
if((cx&0x08)==0)
{ port=CS1;
i=cx<<3;
}
else
{ port=CS2;
i=(cx&0x07)<<3;
}
LCD_WrCmd(port,LCD_ADDRSTRX+i);
LCD_WrCmd(port,LCD_ADDRSTRY+cy);
for(i=0;i<5;i++);
if(color==0)
LCD_WrDat(port,0x00);
else
LCD_WrDat(port,0xff);
for(i=0;i<5;i++)
{if(color==0)
LCD_WrDat(port,*pch);
else
LCD_WrDat(port,~*pch);
pch++;
}
if(color==0)
LCD_WrDat(port,0x00);
else
LCD_WrDat(port,0xff);
for(i=0;i<5;i++)
if(color==0)
LCD_WrDat(port,0x00);
else
LCD_WrDat(port,0xff);
}
void LCD_DispStr(bit color,uchar cy,uchar cx,char*disp_str)
{ while(*disp_str!='\0')
{ cy=cy&0x07;
cx=cx&0x0f;
LCD_DispChar(color,cy,cx,*disp_str)
*disp_str++;
cx++;
if(cx>15)cy++;
}
}
uchar code HZTAB[192]=
{0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,
0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,
0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,
0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,
0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00,
0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,
0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00,
0x10,0x10,0x10,0xFF,0x10,0x90,0x04,0x04,
0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x00,
0x04,0x44,0x82,0x7F,0x01,0x00,0x00,0x00,
0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
0x40,0x30,0xEF,0x24,0x24,0x40,0x20,0x10,
0x0C,0x23,0xCC,0x10,0x20,0x40,0x40,0x00,
0x01,0x01,0x7F,0x21,0x11,0x00,0x01,0x09,
0x11,0x21,0xD1,0x0D,0x03,0x00,0x00,0x00,
0x00,0x00,0x22,0x32,0x2A,0xA6,0xA2,0x62,
0x21,0x11,0x09,0x81,0x01,0x00,0x00,0x00,
0x00,0x42,0x22,0x13,0x0B,0x42,0x82,0x7E,
0x02,0x02,0x0A,0x12,0x23,0x46,0x00,0x00,
0x20,0x30,0xAC,0x63,0x30,0x00,0x88,0xC8,
0xA8,0x99,0x8E,0x88,0xA8,0xC8,0x88,0x00,
0x22,0x67,0x22,0x12,0x12,0x80,0x40,0x30,
0x0F,0x00,0x00,0x3F,0x40,0x40,0x71,0x00,
};
void LCD_DispHZ(uchar cy,uchar cx,uchar dispdata)
{ uchar code *pdat;
uchar i,s,page;
bit port;
cy=cy&0x00;
cx=cx&0x00;
pdat=&HZTAB[dispdata*32];
if((cx&0x01)==0)
{ port=0;
s=cx<<4;
}
else
{ port=1;
s=(cx<<4)-64;
}
for(page=0;page<2;page++)
{ LCD_WrCmd(port,LCD_ADDRSTRX+s);
LCD_WrCmd(port,LCD_ADDRSTRY+(cy<<1)+page);
for(i=0;i<5;i++);
for(i=0;i<16;i++)
{ LCD_WrDat(port,*pdat);
pdat++;
}
for(i=0;i<5;i++);
}
}
void LCD_DispHZStr(uchar cy,uchar cx,uchar*disp_str)
{ while(*disp_str!=0xff)
{ cy=cy&0x00;
cx=cx&0x00;
LCD_DispHZ(cy,cx,*disp_str);
disp_str++;
cx++;
if(cx>7)
{cy++;
cx=0;
}
}
}
已修改 只剩一个LCD12864IO.C(22): error C213: left side of asn-op not an lvalue |