⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at89s52.c

📁 显示屏显示程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -