#include <REG51.H>
#include <intrins.H>
#include <ABSACC.H>
#define uchar unsigned char
#define uint unsigned int
#define SEL27C2001_0 0xFC
#define SEL27C2001_1 0xFD
#define SEL27C2001_2 0xFE
#define SEL27C2001_3 0xFF
#define SEL6264 0xEF
#define SPEED 2
#define reset() {WDT=0x1e;WDT=0xe1;}
sfr WDT=0xa6;
uint data nmpoint;
uchar data col,f,page;
bit loadX=1,loadY;
bit newdata;
uchar xdata XBUFF[160];uchar xdata YBUFF[160];
uchar xdata nm[3000];
sbit SDA=P1^6;
sbit SCL=P1^7;
bdata char com_data;
sbit mos_bit=com_data^7;
sbit low_bit=com_data^0;
/*********************************/
void delay_iic(int n);
uchar rd_24c01(char a);
void wr_24c01(char a,char b);
//********************************
uchar code ASC[];
uchar two_onebyte(uchar h1,uchar h2);
/*********************************/
void HZNM_32byte(uchar n,uchar m)
{
uint data x,y;uchar data z1,z2,i;
if((n>128)&&(m>128))
{
x=(n-0xa1)*94+(m-0xa1);
//======================================================
if(x<2048)
{y=x*32;
for(i=0;i<32;i=i+2)
{P1=SEL27C2001_0;z1=XBYTE[i+y];z2=XBYTE[i+y+1];
P1=SEL6264;
if(loadX)
{XBUFF[5*i+2*f]=z1;XBUFF[5*i+2*f+1]=z2;}
else {YBUFF[5*i+2*f]=z1;YBUFF[5*i+2*f+1]=z2;}}
}
//------------------------------------------------------
if((x>=2048)&&(x<4096))
{y=x-2048;y=y*32;
for(i=0;i<32;i=i+2)
{P1=SEL27C2001_1;z1=XBYTE[i+y];z2=XBYTE[i+y+1];
P1=SEL6264;
if(loadX)
{XBUFF[5*i+2*f]=z1;XBUFF[5*i+2*f+1]=z2;}
else {YBUFF[5*i+2*f]=z1;YBUFF[5*i+2*f+1]=z2;}}
}
//-----------------------------------------------------
if((x>=4096)&&(x<6144))
{y=x-4096;y=y*32;
for(i=0;i<32;i=i+2)
{P1=SEL27C2001_2;z1=XBYTE[i+y];z2=XBYTE[i+y+1];
P1=SEL6264;
if(loadX)
{XBUFF[5*i+2*f]=z1;XBUFF[5*i+2*f+1]=z2;}
else {YBUFF[5*i+2*f]=z1;YBUFF[5*i+2*f+1]=z2;}}
}
//-----------------------------------------------------
if(x>=6144)
{y=x-6144;y=y*32;
for(i=0;i<32;i=i+2)
{P1=SEL27C2001_3;z1=XBYTE[i+y];z2=XBYTE[i+y+1];
P1=SEL6264;
if(loadX)
{XBUFF[5*i+2*f]=z1;XBUFF[5*i+2*f+1]=z2;}
else {YBUFF[5*i+2*f]=z1;YBUFF[5*i+2*f+1]=z2;}}
}
nmpoint=nmpoint+2;
}
//===========================================================
if((n<0x80)&&(m<0x80))
{
x=(n-0x20)*16;y=(m-0x20)*16;P1=SEL6264;
for(i=0;i<16;i++)
{if(loadX)
{XBUFF[10*i+2*f]=ASC[i+x];XBUFF[10*i+2*f+1]=ASC[i+y];}
else {YBUFF[10*i+2*f]=ASC[i+x];YBUFF[10*i+2*f+1]=ASC[i+y];}
}
nmpoint=nmpoint+2;
}
//============================================================
if((n<0x80)&&(m>0x80))
{
x=(n-0x20)*16;P1=SEL6264;
for(i=0;i<16;i++)
{if(loadX)
{XBUFF[10*i+2*f]=ASC[i+x];XBUFF[10*i+2*f+1]=0;}
else {YBUFF[10*i+2*f]=ASC[i+x];YBUFF[10*i+2*f+1]=0;}
}
nmpoint++;
}
}
/*****************************************/
uchar two_onebyte(uchar h1,uchar h2)
{
uchar temp,tempcol;
if(col<8) tempcol=col;
else tempcol=col-8;
temp=(h1<<tempcol)|(h2>>(8-tempcol));
temp=255-temp;
return temp;
}
/******************************************/
void initload(void)
{uint j,iiccnt=0;bit flag=0;
P1=SEL6264;
for(j=0;j<8;j++)nm[j]=0x20;
for(j=8;j<3000;j++)
{
nm[j]=rd_24c01(iiccnt);delay_iic(150);iiccnt++;
if(nm[j]==0x0d||nm[j]==0x0a)j--;
if(iiccnt==256){iiccnt=0;page=page+2;}
if(nm[j]==255){flag=1;break;}
}
if(flag)
{for(iiccnt=j;iiccnt<16+j;iiccnt++)nm[iiccnt]=0x20;
flag=0;iiccnt=0;page=0;}
}
/*******************************************************/
void main(void)
{uint j,nmcnt=0;uchar cnt=0;
reset()
P1=SEL6264;
for(j=0;j<160;j++)XBUFF[j]=0;
for(j=0;j<160;j++)YBUFF[j]=0;
reset()
initload();
reset()
col=16;
TMOD=0x01;
IE=0x83;
IT0=1;
TH0=-(1400/256);
TL0=-(1400%256);
TR0=1;
SCON=0x00;
while(1)
{
if((loadX)||(loadY))
{
nmpoint=nmcnt;
for(f=0;f<5;f++){HZNM_32byte(nm[nmpoint],nm[nmpoint+1]);reset()}
if((nm[nmcnt]<0x80)&&(nm[nmcnt+1]>0x80))nmcnt++;
else
nmcnt=nmcnt+2;
if(nm[nmcnt]==0x20)cnt++;else cnt=0;
if(cnt>=5){nmcnt=0;cnt=0;}
loadX=0;loadY=0;
}
//--------------------------------------
if(newdata)
{
TR0=0;
XBYTE[0xFFFF]=0x10;
P1=SEL6264;
for(j=0;j<160;j++)XBUFF[j]=0;
for(j=0;j<160;j++)YBUFF[j]=0;
reset()
initload();
reset()
col=16;
newdata=0;
TR0=1;
}
}
}
/*******************************************************/
void int_zd0(void) interrupt 0 using 1
{
newdata=1;
}
/******************************************************/
void display()interrupt 1 using 2
{
int data s;
static bit disXY;
static uchar disrow,num;
uchar inc,sr;
sr=P1;
reset()
if(col<8)inc=0;else inc=1;
TH0=-(1400/256);
TL0=-(1400%256);
P1=SEL6264;
//================================================================================
if(!disXY)
{ switch(disrow)
{
case 0:for(s=7+inc;s>=0+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 1:for(s=17+inc;s>=10+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 2:for(s=27+inc;s>=20+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 3:for(s=37+inc;s>=30+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 4:for(s=47+inc;s>=40+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 5:for(s=57+inc;s>=50+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 6:for(s=67+inc;s>=60+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 7:for(s=77+inc;s>=70+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 8:for(s=87+inc;s>=80+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 9:for(s=97+inc;s>=90+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 10:for(s=107+inc;s>=100+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 11:for(s=117+inc;s>=110+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 12:for(s=127+inc;s>=120+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 13:for(s=137+inc;s>=130+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 14:for(s=147+inc;s>=140+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
case 15:for(s=157+inc;s>=150+inc;s--){SBUF=two_onebyte(XBUFF[s],XBUFF[s+1]);while(!TI);TI=0;}break;
default:break;
}
XBYTE[0xFFFF]=0x10+disrow;
XBYTE[0xFFFF]=0x20+disrow;
disrow++;
if(disrow>=16){disrow=0;num++;}
if(num>=SPEED){num=0;col++;}
if(col>=16){col=0;disXY=1;loadX=1;}
}
//==============================================================================
else
{ switch(disrow)
{
case 0:for(s=7+inc;s>=0+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 1:for(s=17+inc;s>=10+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 2:for(s=27+inc;s>=20+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 3:for(s=37+inc;s>=30+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 4:for(s=47+inc;s>=40+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 5:for(s=57+inc;s>=50+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 6:for(s=67+inc;s>=60+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 7:for(s=77+inc;s>=70+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 8:for(s=87+inc;s>=80+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 9:for(s=97+inc;s>=90+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 10:for(s=107+inc;s>=100+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 11:for(s=117+inc;s>=110+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 12:for(s=127+inc;s>=120+inc;s--){SBUF=two_onebyte(YBUFF[s],YBUFF[s+1]);while(!TI);TI=0;}break;
case 13:for
评论0