#include "reg52.h"
#include "absacc.h"
#define XREG_O XBYTE[0x0000] //目标X地址低8位寄存器
#define YREG_O XBYTE[0x0100] //目标Y地址低8位寄存器
#define XREG_S XBYTE[0x0200] //源X地址低8位寄存器
#define YREG_S XBYTE[0x0300] //源Y地址低8位寄存器
#define XREG_L XBYTE[0x0400] //块拷贝填充X低8位寄存器
#define YREG_L XBYTE[0x0500] //块拷贝填充Y低8位寄存器
#define REGH_SO XBYTE[0x0600] //源目标XY高位寄存器
#define REGH_L XBYTE[0x0700] //块XY高位寄存器
#define FRONT_L XBYTE[0x0800] //前景色寄存器低8位
#define FRONT_H XBYTE[0x0900] //前景色寄存器高8位
#define BACK_L XBYTE[0x0a00] //背景色寄存器低8位
#define BACK_H XBYTE[0x0b00] //背景色寄存器高8位
#define DATA_L XBYTE[0x0c00] //写显示数据寄存器低8位
#define DATA_H XBYTE[0x0d00] //写显示数据寄存器高8位
#define PSW XBYTE[0x0e00] //状态控制寄存器
#define STARTK XBYTE[0x0f00] //启动块填充或块拷贝(D0=0块填充,D0=1块拷贝)
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sfr auxx = 0x8e;
sbit READY = P1^7;
sbit CSLCD=P3^4;
void block_t(uint orow,uint otier,uint width,uint high,uchar colorh,uchar colorl);//块填充
void block_k(uchar mod,uint orow,uint otier,uint srow,uint stier,uint width,uint high);//块拷贝
void mode(uchar mod,uint row,uint tier,uchar b_colorh,uchar b_colorl,uchar f_colorh,uchar f_colorl);//模式设定
void write_word(uint row, uint tier, uchar *datas);//单点模式写汉字
void write_word8(uint row, uint tier, uchar *datas);//八点模式写汉字
main()
{
CSLCD=0;
block_t(0,0,639,479,0x00,0x00);
write_word(100,200,toppro);
write_word8(200,200,toppro);
block_k(0xf1,300,200,100,200,100,200);
while(1)
{}
}
void block_t(uint orow,uint otier,uint width,uint high,uchar colorh,uchar colorl)
{
union
{
uchar otemp[2];
uint orow1;
} orow2;
union
{
uchar otemp1[2];
uint otier1;
} otier2;
union
{
uchar wtemp[2];
uint width1;
} width2;
union
{
uchar htemp[2];
uint high1;
} high2;
PSW = 0xf4;
orow2.orow1=orow;
otier2.otier1=otier;
width2.width1=width;
high2.high1=high;
XREG_O=otier2.otemp1[1];
YREG_O=orow2.otemp[1];
REGH_SO=(otier2.otemp1[0]<<2)+orow2.otemp[0];
XREG_L=width2.wtemp[1];
YREG_L=high2.htemp[1];
REGH_L=(width2.wtemp[0]<<2)+high2.htemp[0];
PSW = 0x74;
DATA_L=colorl;
DATA_H=colorh;
STARTK=0;
while(READY==0)
{}
}
void mode(uchar mod,uint row,uint tier,uchar b_colorh,uchar b_colorl,uchar f_colorh,uchar f_colorl)
{
union
{
uchar temp[2];
uint row1;
} row2;
union
{
uchar temp1[2];
uint tier1;
} tier2;
row2.row1=row;
tier2.tier1=tier;
PSW = mod;
XREG_O=tier2.temp1[1];
YREG_O=row2.temp[1];
REGH_SO=(tier2.temp1[0]<<2)+row2.temp[0];
BACK_L=b_colorl;
BACK_H=b_colorh;
FRONT_L=f_colorl;
FRONT_H=f_colorh;
PSW=mod&0x7f;
}
void write_word(uint row, uint tier, uchar *datas)
{
uint temp,temp1;
uchar width,high,len,l,dat;
uint i,j,k;
len=datas[0];
width=datas[1];
high=datas[2];
for(k=0;k<len;k++)
{
temp1=width*high*k+3;
for(i=0;i<high;i++)
{
mode(0x94,i+row,tier+k*width*8,0xf8,0x00,0x07,0xe0);
temp=i*width+temp1;
for(j=0;j<width;j++)
{
dat=datas[temp+j];
for(l=0;l<8;l++)
{
if((dat&0x80)==0x80)
{
DATA_L=0x1f; //黑底蓝字
DATA_H=0x00;
}
else
{
DATA_L=0x00;
DATA_H=0x00;
}
dat<<=1;
}
}
}
}
}
void write_word8(uint row, uint tier, uchar *datas)
{
uint temp,temp1;
uchar width,high,len;
uint i,j,k;
len=datas[0];
width=datas[1];
high=datas[2];
for(k=0;k<len;k++)
{
temp1=width*high*k+3;
for(i=0;i<high;i++)
{
mode(0x95,i+row,tier+k*width*8,0xf8,0x00,0x07,0xe0); //红底绿字
temp=i*width+temp1;
for(j=0;j<width;j++)
{
DATA_H=datas[temp+j];
}
}
}
}
void block_k(uchar mod,uint orow,uint otier,uint srow,uint stier,uint width,uint high)
{
union
{
uchar otemp[2];
uint orow1;
} orow2;
union
{
uchar otemp1[2];
uint otier1;
} otier2;
union
{
uchar stemp[2];
uint srow1;
}srow2;
union
{
uchar stemp1[2];
uint stier1;
} stier2;
union
{
uchar wtemp[2];
uint width1;
} width2;
union
{
uchar htemp[2];
uint high1;
} high2;
orow2.orow1=orow;
otier2.otier1=otier;
srow2.srow1=srow;
stier2.stier1=stier;
width2.width1=width;
high2.high1=high;
PSW = mod;
XREG_O=otier2.otemp1[1];
YREG_O=orow2.otemp[1];
XREG_S=stier2.stemp1[1];
YREG_S=srow2.stemp[1];
REGH_SO=(stier2.stemp1[0]<<6)+(srow2.stemp[0]<<4)+(otier2.otemp1[0]<<2)+orow2.otemp[0];
XREG_L=width2.wtemp[1];
YREG_L=high2.htemp[1];
REGH_L=(width2.wtemp[0]<<2)+high2.htemp[0];
PSW = mod&0x7f;
DATA_L=0x0;
DATA_H=0x0;
STARTK=1;
while(READY==0)
{}
}
所用汉字字模:
unsigned char code toppro[]=
{4,3,24,
/*-- 文字: 北 --*/
/*-- 楷体_GB231218; 此字体下对应的点阵为:宽x高=24x24 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0E,0x00,0x01,0x8E,0x00,0x01,
0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x60,0x00,0xCC,0x70,0x00,0xCC,0xF0,0x1F,0xCD,
0xC0,0x1F,0xCF,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x08,0x01,0xCC,0x08,
0x07,0xCC,0x0C,0x7E,0xCE,0x1C,0x78,0xC7,0xFC,0x30,0xC3,0xF8,0x00,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 京 --*/
/*-- 楷体_GB231218; 此字体下对应的点阵为:宽x高=24x24 --*/
0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x3C,0x00,0x00,0x1C,0x00,0x00,0x0C,0x78,0x00,
0x3F,0xFC,0x1F,0xFF,0xFC,0x7F,0xC0,0x00,0x00,0x02,0x00,0x03,0xFF,0x80,0x03,0xE3,
0x80,0x01,0x83,0x00,0x01,0x86,0x00,0x01,0xFF,0x00,0x00,0xF0,0x00,0x02,0x18,0x00,
0x02,0x19,0xC0,0x06,0x19,0xE0,0x0E,0x18,0xF0,0x0E,0x18,0x70,0x0C,0xF8,0x00,0x00,
0x78,0x00,0x00,0x30,0x00,0x00,0x30,0x00,
/*-- 文字: 拓 --*/
/*-- 楷体_GB231218; 此字体下对应的点阵为:宽x高=24x24 --*/
0x00,0x00,0x00,0x03,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x01,0x80,0x00,0x01,
0x00,0x18,0x01,0x00,0xFC,0x01,0xEF,0xF8,0x0F,0xEF,0x80,0x1F,0x01,0x80,0x01,0x03,
0x80,0x01,0x63,0x00,0x01,0xC6,0x00,0x07,0x0E,0x78,0x0F,0x0F,0xFE,0xFD,0x1E,0x1C,
0xF1,0x36,0x1C,0x61,0x66,0x18,0x01,0xC7,0xFC,0x0F,0x87,0xFC,0x0F,0x06,0x00,0x07,
0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 普 --*/
/*-- 楷体_GB231218; 此字体下对应的点阵为:宽x高=24x24 --*/
0x00,0x01,0x80,0x01,0x81,0xC0,0x01,0xC3,0x80,0x00,0xE7,0x00,0x00,0x4F,0xC0,0x00,
0xFF,0xC0,0x03,0xFC,0x00,0x00,0x6C,0xC0,0x06,0x6C,0xC0,0x07,0x6F,0x80,0x03,0x6E,
0x18,0x00,0x7F,0xFE,0x3F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x1F,0x00,0x03,0xFF,0x80,
0x01,0x83,0x00,0x01,0xFB,0x00,0x01,0xFB,0x00,0x01,0x83,0x00,0x01,0x83,0x00,0x01,
0xFF,0x00,0x01,0x87,0x00,0x00,0x03,0x00,
};