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

📄 lcd19264.c

📁 基于ucos的网络液晶开发程序
💻 C
📖 第 1 页 / 共 2 页
字号:
      for( PgIdx=0; PgIdx<8; PgIdx++ )
	 {
	 if( WaitUntilReady( k ) != 0 ) return -1;
	 outportb( CmdPort[k], 0xb8+PgIdx );
	 if( WaitUntilReady( k ) != 0 ) return -1;
	 outportb( CmdPort[k], 0x40 );
	 for( i=0; i<ColBankSize; i++ )
	    {
	    if( WaitUntilReady( k ) != 0 ) return -1;
	    outportb( DatPort[k], 0 );
	    }
	 }
      }

   // set start line as 0
   for( k=0; k<3; k++ )    //change 3
      {
      if( WaitUntilReady( k ) != 0 ) return -1;
      outportb( CmdPort[k], 0xc0 );
      }

   return 0;
}

// input: DotColor = 0:    write 0;
//                 = 1:    write 1;
//                 = 0x81: XOR write
// return =  0: ok
//        = -1: LCD fail
int WritePixel( int x, int y, int DotColor )
{
   unsigned int  Idx, PgNum, LineOffset, ColNum;
   unsigned char abyte, MaskBit;
   unsigned int  CmdPort[3], DatPort[3];

   CmdPort[0] = CmdPort0;
   DatPort[0] = DatPort0;
   CmdPort[1] = CmdPort1;
   DatPort[1] = DatPort1;
   DatPort[2] = DatPort2;
   CmdPort[2] = CmdPort2;

   Idx = x / ColBankSize;
   ColNum = x % ColBankSize;
   PgNum = y / 8;
   LineOffset = y % 8;
   MaskBit = 1<<LineOffset;

   // goto (x, y)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0xb8+PgNum );
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0x40+ColNum );

   // get data at (x, y)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   abyte = inportb( DatPort[Idx] );
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   abyte = inportb( DatPort[Idx] );

   // bit operation
   if( DotColor == 1 ) 		abyte |= MaskBit;
   else if( DotColor == 0 ) 	abyte &= ~MaskBit;
   else                         abyte ^= MaskBit;

   // write data back to (x,y)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0x40+ColNum );
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( DatPort[Idx], abyte );

   return 0;
}

// input x     = 0 -- 191
//       PgIdx = 0,1,...,7
// return =  0: ok
//        = -1: LCD fail
//        = -2: invalid parameter
int WriteByte( int x, int PgIdx, unsigned char aByte )
{
   unsigned int Idx, ColNum;
   unsigned int  CmdPort[2], DatPort[2];

   if( (x<0) || (x>191) )        return -2;        //change 191
   if( (PgIdx<0) || (PgIdx>7) )  return -2;

   CmdPort[0] = CmdPort0;
   DatPort[0] = DatPort0;
   CmdPort[1] = CmdPort1;
   DatPort[1] = DatPort1;
   CmdPort[2] = CmdPort2;
   DatPort[2] = DatPort2;

   Idx = x / ColBankSize;
   ColNum = x % ColBankSize;

   // goto (x, y)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0xb8+PgIdx );
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0x40+ColNum );

   // write data to (x, PgIdx)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( DatPort[Idx], aByte );

   return 0;
}

// input x     = 0 -- 191
//       PgIdx = 0,1,...,7
// return =  0: ok
//        = -1: LCD fail
int ReadByte( int x, int PgIdx )
{
   unsigned int  Idx, ColNum;
   unsigned int  CmdPort[3], DatPort[3];
   unsigned char abyte;

   CmdPort[0] = CmdPort0;
   DatPort[0] = DatPort0;
   CmdPort[1] = CmdPort1;
   DatPort[1] = DatPort1;
   CmdPort[2] = CmdPort2;
   DatPort[2] = DatPort2;

   Idx = x / ColBankSize;
   ColNum = x % ColBankSize;

   // goto (x, y)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0xb8+PgIdx );
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0x40+ColNum );

   // write data to (x, PgIdx)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   abyte = inportb( DatPort[Idx] );
   if( WaitUntilReady( Idx ) != 0 ) return -1;	//MUST BE twice to get
   abyte = inportb( DatPort[Idx] );		//correct data

   return abyte;
}

// function: scroll up 1 character row (8 pixel lines)
// return = new show start line
unsigned int ScrollUp( unsigned int OldStartLine )
{
   unsigned int  i, k, CmdPort[3], DatPort[3];

   CmdPort[0] = CmdPort0;
   DatPort[0] = DatPort0;
   CmdPort[1] = CmdPort1;
   DatPort[1] = DatPort1;
   CmdPort[2] = CmdPort2;
   DatPort[2] = DatPort2;

   // clear start row
   for( k=0; k<3; k++ ) //change 3
      {
      if( WaitUntilReady( k ) != 0 ) return -1;
      outportb( CmdPort[k], 0xb8+(OldStartLine/8) );
      if( WaitUntilReady( k ) != 0 ) return -1;
      outportb( CmdPort[k], 0x40 );
      for( i=0; i<ColBankSize; i++ )
	 {
	 if( WaitUntilReady( k ) != 0 ) return -1;
	 outportb( DatPort[k], 0 );
	 }
      }

   i = (OldStartLine+8)%64;
   // update start line
   for( k=0; k<3; k++ ) //change 3
      {
      if( WaitUntilReady( k ) != 0 ) return -1;
      outportb( CmdPort[k], 0xc0+i );
      }

   return i;
}

// function: scroll down 1 character line (8 pixel lines)

// function: scroll down 1 character line (8 pixel lines)
// return = new show start line
unsigned int ScrollDown( unsigned int OldStartLine )
{
   unsigned int  i, k, NewStartLine, CmdPort[3], DatPort[3];

   CmdPort[0] = CmdPort0;
   DatPort[0] = DatPort0;
   CmdPort[1] = CmdPort1;
   DatPort[1] = DatPort1;
   CmdPort[2] = CmdPort2;
   DatPort[2] = DatPort2;

   if( OldStartLine >= 8 ) NewStartLine = OldStartLine - 8;
   else                    NewStartLine = OldStartLine + 64 - 8;

   // update start line
   for( k=0; k<3; k++ ) //chang 3
      {
      if( WaitUntilReady( k ) != 0 ) return -1;
      outportb( CmdPort[k], 0xc0+NewStartLine );
      }

   // clear start row
   for( k=0; k<3; k++ ) //change 3
      {
      if( WaitUntilReady( k ) != 0 ) return -1;
      outportb( CmdPort[k], 0xb8+(NewStartLine/8) );
      if( WaitUntilReady( k ) != 0 ) return -1;
      outportb( CmdPort[k], 0x40 );
      for( i=0; i<ColBankSize; i++ )
	 {
	 if( WaitUntilReady( k ) != 0 ) return -1;
	 outportb( DatPort[k], 0 );
	 }
      }

   return NewStartLine;
}

// input x = 0 -- 192
//       PgIdx = 0,1,..7
int  WriteChar( int x, int PgIdx, char aChar, int TxtColor )
{
   unsigned int  i, Idx, ColNum;
   unsigned int  CmdPort[3], DatPort[3];
   unsigned char abyte;

   if( (x<0) || (x>=192) )        return -2;
   if( (PgIdx<0) || (PgIdx>=8) )  return -2;

   CmdPort[0] = CmdPort0;
   DatPort[0] = DatPort0;
   CmdPort[1] = CmdPort1;
   DatPort[1] = DatPort1;
   CmdPort[2] = CmdPort2;
   DatPort[2] = DatPort2;

   Idx = x / ColBankSize;
   ColNum = x % ColBankSize;

   // goto (x, y)
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0xb8+PgIdx );
   if( WaitUntilReady( Idx ) != 0 ) return -1;
   outportb( CmdPort[Idx], 0x40+ColNum );

   for( i=0; i<8; i++ )
      {
      abyte = VerticalFont[aChar][i];
      //abyte = abyte ^ XORByte;
      if( WaitUntilReady( Idx ) != 0 ) return -1;
      outportb( DatPort[Idx], abyte );
      /*
      ColNum++;
      if( ColNum >= 64 )
	 {
	 ColNum = 0;
	 Idx = (Idx+1)%3;
	 if( WaitUntilReady( Idx ) != 0 ) return -1;
	 outportb( CmdPort[Idx], 0xb8+PgIdx );
	 if( WaitUntilReady( Idx ) != 0 ) return -1;
	 outportb( CmdPort[Idx], 0x40+ColNum );
	 }
      */
      }

   return 0;
}

// input x = 0 -- 192
//       PgIdx = 0,1,..,7
int  WriteString( int x, int PgIdx, char* aStr, int TxtColor )
{
   int i, len, status;

   len = strlen( aStr );
   for( i=0; i<len; i++ )
      {
      status = WriteChar( x, PgIdx, aStr[i], TxtColor );
      if( status != 0 ) return status;
      x += 8;
      }

   return 0;
}

/* End of HD61202 */

⌨️ 快捷键说明

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