www.pudn.com > rtu.rar > LCD.C


// 
// File name =DISPLAY.CPP  LCD显示器操作文件 
// 设计 何风涛 
//#include"class.h" 
 
#include"classext.h" 
unsigned char  LcdAready(void) /*  lcds2  */ 
{ 
  register unsigned char  value,image; 
  register unsigned long  eadr; 
 
 
  eadr=PSD_DIRECTION_B; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
 
  value=LCD_CMD_RD;//run; 
  eadr=PSD_DATAOUT_E; 
  asm  estb   value,  [eadr]; 
 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xEA;/* ready busw lcdon	lcde  lcds1   lcds2 tdq  lcd  */ 
	orb  value,  #0x08; 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  if(pVar->Lcd_BG_Flag==0) 
  { 
    value=value | 0x20; 
  }else 
  { 
    value=value & 0xdf; 
  } 
  asm	estb value,  [eadr]; 
  asm	orb  value,  #0x10; 
  asm	estb value,  [eadr]; 
  asm	andb value,  #0xEF;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
; asm	incb image; 
; asm	incb image; 
; asm	incb image; 
; asm	incb image; 
  asm	estb value,  [eadr]; 
  asm	orb  value,  #0x0D; 
  asm	estb value,  [eadr]; 
 
  eadr=PSD_DATAIN_B; 
  asm  eldb value,  [eadr]; 
 
  eadr=PSD_DIRECTION_B; 
  image=0xff; 
  asm	estb image,  [eadr]; 
  return  value; 
} 
 
unsigned char LcdBready(void)/*  lcds1	*/ 
{ 
  register unsigned char  value,image; 
  register unsigned long  eadr; 
 
  eadr=PSD_DIRECTION_B; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
 
  value=LCD_CMD_RD;// run; 
  eadr=PSD_DATAOUT_E; 
  asm  estb   value,  [eadr]; 
 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xE6;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
	orb  value,  #0x04; 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  if(pVar->Lcd_BG_Flag==0) 
  { 
    value=value | 0x20; 
  }else 
  { 
    value=value & 0xdf; 
  } 
  asm	estb value,  [eadr]; 
  asm	orb  value,  #0x10; 
  asm	estb value,  [eadr]; 
  asm	andb value,  #0xEF;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
; asm	incb image; 
; asm	incb image; 
; asm	incb image; 
; asm	incb image; 
  asm	estb value,  [eadr]; 
  asm	orb  value,  #0x0D; 
  asm	estb value,  [eadr]; 
 
  eadr=PSD_DATAIN_B; 
  asm  eldb value,  [eadr]; 
 
  eadr=PSD_DIRECTION_B; 
  image=0xff; 
  asm	estb image,  [eadr]; 
  return  value; 
} 
 
 
 
void LcdBcmd(register unsigned char  value) 
{ 
 
  register unsigned char  image; 
  register unsigned long  eadr; 
 
  eadr=PSD_DATAOUT_B; 
  asm  estb   value,  [eadr]; 
 
  value=LCD_CMD_WR;//run; 
  eadr=PSD_DATAOUT_E; 
  asm  estb   value,  [eadr]; 
 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xE6;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
	orb  value,  #0x04; 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  if(pVar->Lcd_BG_Flag==0) 
  { 
    value=value | 0x20; 
  }else 
  { 
    value=value & 0xdf; 
  } 
  asm	estb value,  [eadr]; 
 
  asm	orb  value,  #0x10; 
  asm	estb value,  [eadr]; 
  asm	andb value,  #0xEF;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
; asm	incb image; 
; asm	incb image; 
; asm	incb image; 
; asm	incb image; 
  asm	estb value,  [eadr]; 
  asm	orb  value,  #0x0D; 
  asm	estb value,  [eadr]; 
} 
 
void Lcdoff(void) 
{ 
  register unsigned char  value,image; 
  register unsigned long  eadr; 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xef;/*	ready busw lcdon lcde  lcds1   lcs2  tdq  lcd  */ 
	orb  value,  #0x0d; 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  asm	estb value,  [eadr]; 
} 
 
 
void LcdAcmd(register unsigned char  value) 
{ 
  register unsigned char  image; 
  register unsigned long  eadr; 
 
  eadr=PSD_DATAOUT_B; 
  asm  estb   value,  [eadr]; 
 
  value=LCD_CMD_WR;//run; 
  eadr=PSD_DATAOUT_E; 
  asm  estb   value,  [eadr]; 
 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xEA;/* ready busw lcdon	lcde  lcds1   lcds2 tdq  lcd  */ 
	orb  value,  #0x08; 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  if(pVar->Lcd_BG_Flag==0) 
  { 
    value=value | 0x20; 
  }else 
  { 
    value=value & 0xdf; 
  } 
  asm	estb value,  [eadr]; 
  asm	orb  value,  #0x10; 
  asm	estb value,  [eadr]; 
  asm	andb value,  #0xEF;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
  asm	orb  value,  #0x0D; 
  asm	estb value,  [eadr]; 
} 
 
 
void LcdBdat(register unsigned char  value) 
{ 
 
  register unsigned char  image; 
  register unsigned long  eadr; 
 
  eadr=PSD_DATAOUT_B; 
  asm  estb   value,  [eadr]; 
 
  value=LCD_DAT_WR;// run; 
  eadr=PSD_DATAOUT_E; 
  asm  estb   value,  [eadr]; 
 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xE6;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
	orb  value,  #0x04; 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  if(pVar->Lcd_BG_Flag==0) 
  { 
    value=value | 0x20; 
  }else 
  { 
    value=value & 0xdf; 
  } 
  asm	estb value,  [eadr]; 
 
  asm	orb  value,  #0x10; 
  asm	estb value,  [eadr]; 
  asm	andb value,  #0xEF;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
  asm	orb  value,  #0x0D; 
  asm	estb value,  [eadr]; 
} 
 
 
void LcdAdat(register unsigned char  value) 
{ 
  register unsigned char  image; 
  register unsigned long  eadr; 
 
  eadr=PSD_DATAOUT_B; 
  asm  estb   value,  [eadr]; 
 
  value=LCD_DAT_WR;//run; 
  eadr=PSD_DATAOUT_E; 
  asm  estb   value,  [eadr]; 
 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xEA;/* ready busw lcdon	lcde  lcds1   lcds2 tdq  lcd  */ 
	orb  value,  #0x08; 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  if(pVar->Lcd_BG_Flag==0) 
  { 
    value=value | 0x20; 
  }else 
  { 
    value=value & 0xdf; 
  } 
  asm	estb value,  [eadr]; 
  asm	orb  value,  #0x10; 
  asm	estb value,  [eadr]; 
  asm	andb value,  #0xEF;/* ready busw lcdon	lcde  lcds1   lcs2  tdq  lcd  */ 
  asm	orb  value,  #0x0D; 
  asm	estb value,  [eadr]; 
} 
 
 
void Lcdeon(void) 
{ 
  register unsigned char  value,image; 
  register unsigned long  eadr; 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	orb  value,  #0x10;/*	ready busw lcdon lcde  lcds1   lcs2  tdq  lcd  */ 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  asm	estb value,  [eadr]; 
} 
 
void Lcdeoff(void) 
{ 
  register unsigned char  value,image; 
  register unsigned long  eadr; 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	andb value,  #0xef;/*	ready busw lcdon lcde  lcds1   lcs2  tdq  lcd  */ 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  asm	estb value,  [eadr]; 
} 
 
 
void Lcd_off(void) 
{ 
  register unsigned char  value,image; 
  register unsigned long  eadr; 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
	eldb value,  [eadr]; 
	orb  value,  #0x20;/*	ready busw lcdon lcde  lcds1   lcs2  tdq  lcd  */ 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  asm	estb value,  [eadr]; 
  pVar->Lcd_BG_Flag=0x00; 
} 
 
void Lcd_on(void) 
{ 
  register unsigned char  value,image; 
  register unsigned long  eadr; 
  eadr=PSD_DIRECTION_A; 
  image=0x00; /* inport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAIN_A; 
  asm 
  { 
     eldb value,  [eadr]; 
     andb value,  #0xdf;/* ready busw lcdon lcde  lcds1   lcs2	tdq  lcd  */ 
  } 
  eadr=PSD_DIRECTION_A; 
  image=0xff; /* outport */ 
  asm	estb image,  [eadr]; 
  eadr=PSD_DATAOUT_A; 
  asm	estb value,  [eadr]; 
  pVar->Lcd_BG_Flag=0xff; 
  pVar->Lcd_BG_Count=0; 
} 
 
void delay(int t) 
{ 
    int i,j; 
    for(i=0;i X 
 delay(40); 
 LcdClr(); 
} 
*/ 
 
void OutString(unsigned int  *STRING, unsigned int tt,const unsigned char *Adr,unsigned int TYPE)/*字符串输出*/ 
{ 
  unsigned char XX,YY,Len,i; 
  Len=*Adr; Adr=Adr+1; 
  STRING=STRING+tt; 
  for(i=0;ib[0]=Q%16;Q=Q/16; 
   Temptr->b[1]=Q%16;Q=Q/16; 
   Temptr->b[2]=Q%16;Q=Q/16; 
   Temptr->b[3]=Q%16;Q=Q/16; 
} 
 
void atochex(unsigned char Q,struct  Asc_st FARDATA *Temptr) 
{ 
   Temptr->b[0]=Q%16;Q=Q/16; 
   Temptr->b[1]=Q%16;Q=Q/16; 
} 
*/ 
 
struct SYSTIME LoadTime(void) 
{ 
   struct  SYSTIME   Systime; 
   register unsigned long portid; 
   register unsigned char value; 
   unsigned int   ii[10],i; 
   unsigned int   ch[2]; 
 
   ii[0]=Sys_Second; 
   ii[1]=Sys_Minute; 
   ii[2]=Sys_Hour; 
   ii[3]=Sys_Day; 
   ii[4]=Sys_Month; 
   ii[5]=Sys_Year; 
   ii[6]=Sys_Century; 
 
   for(i=0;i<7;i++) 
   { 
       ch[0]=ii[i]%10;	ii[i]=ii[i]/10; 
       ch[1]=ii[i]%10; 
       switch(i) 
       { 
	 case  0x00:Systime.second=Sys_Second; 
		    Systime.TBUF[13]=ch[0]; 
		    Systime.TBUF[12]=ch[1]; 
		    break; 
	 case  0x01:Systime.minute=Sys_Minute; 
		    Systime.TBUF[11]=ch[0]; 
		    Systime.TBUF[10]=ch[1]; 
		    break; 
	 case  0x02:Systime.hour=Sys_Hour; 
		    Systime.TBUF[9]=ch[0]; 
		    Systime.TBUF[8]=ch[1]; 
		    break; 
	 case  0x03:Systime.date=Sys_Day; 
		    Systime.TBUF[7]=ch[0]; 
		    Systime.TBUF[6]=ch[1]; 
		    break; 
	 case  0x04:Systime.month=Sys_Month; 
		    Systime.TBUF[5]=ch[0]; 
		    Systime.TBUF[4]=ch[1]; 
		    break; 
	 case  0x05:Systime.year=Sys_Year; 
		    Systime.TBUF[3]=ch[0]; 
		    Systime.TBUF[2]=ch[1]; 
		    break; 
	 case  0x06:Systime.century=20; 
		    Systime.TBUF[1]=0; 
		    Systime.TBUF[0]=2; 
		    break; 
	 default:   break; 
       } 
   } 
 
   return  (Systime); 
} 
 
 
void CursorGotoXy(UINT *STRING, const unsigned char *Adr,UINT TYPE) 
{ 
  unsigned char XX,YY,Len,i; 
  unsigned char *addr; 
  unsigned int	*CharPtr; 
  CharPtr=(unsigned int  *)STRING; 
  Len=*Adr; Adr=Adr+1;addr=(unsigned char *)Adr; 
  if(pVar->OldCursorOffset>=Len) pVar->OldCursorOffset=0; 
  if(pVar->NewCursorOffset>=Len) pVar->NewCursorOffset=0; 
  addr=addr+(pVar->OldCursorOffset)*2; 
  XX=*(addr); 
  YY=*(addr+1); 
  CharPtr=CharPtr+pVar->OldCursorOffset; 
  LcdPutc(XX,YY,*CharPtr,TYPE); 
 
  addr=(unsigned char *)Adr;  CharPtr=(unsigned int  *)STRING; 
  addr=addr+pVar->NewCursorOffset*2; 
  XX=*(addr); 
  YY=*(addr+1); 
  CharPtr=CharPtr+pVar->NewCursorOffset; 
  TYPE=TYPE+128; 
  LcdPutc(XX,YY,*CharPtr,TYPE); 
  pVar->OldCursorOffset=pVar->NewCursorOffset; 
} 
 
void  SetSysTimer(struct SYSTIME * SysTimePtr) 
{ 
      disable(); 
      outportb(DS_REGA,        0x26);	 /*Clock initialize*/ 
      outportb(DS_REGB,        0x8E);	 /*Clock initialize*/ 
      outportb(DS_SECOND,      SysTimePtr->second); 
      outportb(DS_MINUTE,      SysTimePtr->minute); 
      outportb(DS_HOUR,        SysTimePtr->hour); 
      outportb(DS_DATE,        SysTimePtr->date); 
      outportb(DS_MONTH,       SysTimePtr->month); 
      outportb(DS_YEAR,        SysTimePtr->year); 
      outportb(DS_CENTURY,     SysTimePtr->century); 
      outportb(DS_REGB,        0x1E);	 /*Clock initialize*/ 
      inportb(DS_REGC); 
      inportb(DS_REGD); 
      enable(); 
} 
 
void Line(UINT x1,UINT y1,UINT x2,UINT y2,UINT color) 
{ 
 unsigned int  m,n,j,i,x,dx,dy,y,k; 
 unsigned char	ch; 
 
 if(x1>127)	x1=127; 
 if(x2>127)	x2=127; 
 if(y1>63)	y1=63; 
 if(y2>63)	y2=63; 
 if(color==1) 
 {//color==1 
	 if(x2