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

📄 12864lcd.h

📁 俄罗斯方块的MSP430F449系列的LCD以及点阵按键的代码.
💻 H
📖 第 1 页 / 共 2 页
字号:
                        Set_Y(tmpCol-64);
                        Clr_CS1;
                        Set_CS2;
			write_char(chr[i+16]);
		}
		tmpCol++;
	}
}
void display_char( BYTE *chr, BYTE nRow, BYTE nCol )
{
	BYTE i,tmpCol;
	
	Set_X(nRow);
	tmpCol=nCol;
	for(i=0;i<5;i++)
	{
		if(tmpCol<=63)
		{
                        Set_Y(tmpCol);
                        Set_CS1;
                        Clr_CS2;
			write_char(chr[i]);
		}
		else
		{
                        Set_Y(tmpCol-64);
                        Clr_CS1;
                        Set_CS2;
			write_char(chr[i]);
		}
		tmpCol++;
	}
}
//绘图函数
/*************************************/
/*             绘点函数              */
/*************************************/
/* XX--(0-128) YY--(0-63) FLAG=2反色   FLAG=1绘点   FLAG=0 清点 */
void Pixel(BYTE xx,BYTE yy,BYTE PixelModel)
{
	BYTE y,ch;
	ch=yy%8;  //余数

	y=1;
	for(;ch!=0;)
		{
			y=y*2;
			ch--;
		}
	if(xx<64)
		{
			
                        Set_X(yy/8);
			Set_Y(xx);
                        Set_CS1;
                        Clr_CS2;
                        ch=read_char();
                        Set_Y(xx);
                        Set_CS1;
                        Clr_CS2;	
			switch(PixelModel)
                        {
                          case PixelModel_Clear:
                          {
                                  y=~y;
                                  ch&=y;
                                  write_char(ch);
                                  break;
                          } 
                          case PixelModel_Draw:
                                  write_char(ch|y);
                                  break;
                          case PixelModel_Not:
                          { 
                                  ch^=y;
                                  write_char(ch);
                                  break;
                          }       
                        }
		}
	else
		{
			
                        Set_X(yy/8);
			Set_Y(xx-64);
                        Clr_CS1;
                        Set_CS2;	
			ch=read_char();
			Set_Y(xx-64);
                        Clr_CS1;
                        Set_CS2;		
			switch(PixelModel)
                        {
                          case PixelModel_Clear:
                          {
                                  y=~y;
                                  ch&=y;
                                  write_char(ch);
                                  break;
                          } 
                          case PixelModel_Draw:
                                  write_char(ch|y);
                                  break;
                          case PixelModel_Not:
                          { 
                                  ch^=y;
                                  write_char(ch);
                                  break;
                          }       
                        }
		}
}


//画线     LineMode 为直线的类型:水平,垂直,普通
void Line(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE LineModel )
{ 
       BYTE k,x,y;
       
       if (Xbegin == Xend)
       {    for( y = Ybegin ;y <= Yend; y++ ) //在x,Ybegin处画线
              Pixel(Xbegin,y,LineModel);           //垂直线
       }
       else if (Ybegin == Yend )
       {    for(  x = Xbegin ;x <= Xend ; x++ ) //在Xbegin,y处画线
              Pixel(x,Ybegin,LineModel);             //水平线
       }
       else 
       {
             k = (Yend - Ybegin)/(Xend - Xbegin) ;
             for( x = Xbegin ;x <= Xend ; x++ ) 
              { 
                 y = k*x; 
                 Pixel(x,y,LineModel);
                 //在x,y处画线 
              }         
       }
}

void Line1(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE LineModel)
{
       BYTE x,y;
       BYTE col=Xbegin;
       BYTE row=Ybegin;
       if (Xbegin == Xend)
       {    for( y = Ybegin ;y <= Yend; y++ ) //在x,Ybegin处画线
            {
                Pixel(Xbegin,y,LineModel);           //垂直线
            }
       }
       else if (Ybegin == Yend )
       {    for(  x = Xbegin ;x <= Xend ; x++ ) //在Xbegin,y处画线
              Pixel(x,Ybegin,LineModel);             //水平线
       }
       else 
       {
             register BYTE t;
             BYTE xerr=0,yerr=0,delta_x,delta_y,distance;
             signed char incx,incy;
            /*  compute the distance in both directions*/ 
             delta_x=Xend-col;
             delta_y=Yend-row;
            /* compute  the direction of the increment ,
             an increment of "0" means either a vertical or horizontal lines */
             if(delta_x>0) incx=1;
             else if( delta_x==0 ) incx=0;
              else incx=-1; 
             if(delta_y>0) incy=1;
             else if( delta_y==0 ) incy=0;
              else incy=-1;
            /*  determine which distance is greater */
            delta_x = abs( delta_x );
             delta_y = abs( delta_y );
             if( delta_x > delta_y ) distance=delta_x;
             else distance=delta_y;
            /* draw the line*/ 
             for( t=0;t <= distance+1; t++ ) 
             {
                 Pixel(col,row,LineModel);
                 xerr += delta_x ;
                 yerr += delta_y ;
                 if( xerr > distance )
                 {
                       xerr-=distance;
                       col+=incx;
                  }
                 if( yerr > distance )
                 {
                       yerr-=distance;
                       row+=incy;
                 }
             }
       }
}


void Box(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE BoxModel,BYTE FillType)
{
     BYTE x;
      switch(BoxModel)
      {
        case BoxModel_NoBox :
        {
                switch(FillType)
                {
                  case FillType_Clear:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
                       break;
                   }
                  case FillType_Fill:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
                       break;
                   }
                  case FillType_Not:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
                       break;
                   }
                  case FillType_NoFill: 
                       break;                    
                }
                break;
         
        }
        case BoxModel_Draw  :
        {
                switch(FillType)
                {
                  case FillType_Clear:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
                       break;
                   }
                  case FillType_Fill:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
                       break;
                   }
                  case FillType_Not:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
                       break;
                   }
                  case FillType_NoFill: 
                       break;                    
                }
                break;
         
        }
        case BoxModel_Not :
        {
                switch(FillType)
                {
                  case FillType_Clear:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
                       break;
                   }
                  case FillType_Fill:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
                       break;
                   }
                  case FillType_Not:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
                       break;
                   }
                  case FillType_NoFill: 
                       break;                    
                }
                break;
         
        }
        case BoxModel_Clear :
        {
                switch(FillType)
                {
                  case FillType_Clear:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Clear);
                       break;
                   }
                  case FillType_Fill:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Draw);
                       break;
                   }
                  case FillType_Not:
                   {
                       for(x=Xbegin+1 ; x<Xend ; x++)
                          Line1(x,Ybegin+1,x,Yend-1,LineModel_Not);
                       break;
                   }
                  case FillType_NoFill: 
                       break;                    
                }
                break;
         
        }     
      }
        Line1(Xbegin,Ybegin,Xend,Ybegin,BoxModel); 
        Line1(Xbegin,Ybegin,Xbegin,Yend,BoxModel); 
        Line1(Xbegin,Yend,Xend,Yend,BoxModel); 
        Line1(Xend,Ybegin,Xend,Yend,BoxModel); 
}
   void Window(char X,char Y,char Width,char Height) 
    { 
        Box(X+6,Y+6,X+Width+6,Y+Height+6,BoxModel_NoBox,FillType_Fill);  //黑色阴影 
        Box(X,Y,Width+X,Height+Y,BoxModel_Draw,FillType_Clear);         //画框框 
    } 

void ELS_dot(BYTE x, BYTE y, BYTE mode)/* 构造俄罗斯方块的画点函数 */
{
    BYTE dx, dy;

    	dx = x*4 + 4;						/* 抽象方块显示区域(6, 34, 57, 110) */
    	dy = y*4 + 32;

 	Box(dx, dy, dx+3, dy+3, mode,FillType_Fill);			/* 以 mode 方式画方块点 */
}

⌨️ 快捷键说明

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