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

📄 fun_16.c

📁 是用ARM7模拟RGB程序
💻 C
字号:
/******************************Copyright (c)*********************************
** 文件说明
**---------------------------------------------------------------------------
**文   件   名: fun_16.c
**创   建   人: 杨宏伟
**修   改   人: 杨宏伟
**创  建 日 期:2003年10月19日
**最后修改日期: 2004年10月22日
**描        述: FOR HD66773,FOR ARM LPC2100
**              软件模拟8080时序,并行,8位数据传输接口
****************************************************************************/
#include "config.h"

extern uint8  G_CurrContrastValue;  // 全局变量,设置对比度值
extern void delay(uint32  dly);


/****************************************************************************
** 函数实现
*****************************************************************************/


/*===========================================================================
** 函数名称: data_out()
** 功能描述: 输出数据,并行,软件模拟8080
============================================================================*/
void data_out(uint8 i)
{
    // interface  8080
    
	IO0CLR = 0x000000FF;
	IO1CLR = CS1;
	IO1SET = DC1;
	IO1SET = RD1;
	IO1CLR = WR1;
	IO0SET = i;
	IO1SET = WR1;
	IO1SET = CS1;
}

/*===========================================================================
** 函数名称: comm_out()
** 功能描述: 输出指令,并行,软件模拟8080
============================================================================*/
void comm_out(uint8 i)
{

    // interface  8080
    
	IO0CLR = 0x000000FF;
	IO1CLR = CS1;
	IO1CLR = DC1;
	IO1SET = RD1;
	IO1CLR = WR1;
    IO0SET = i;
	IO1SET = WR1;
	IO1CLR = WR1;
    IO0SET = i;
	IO1SET = WR1;
	IO1SET = CS1;
  
}


void InitialFunction1(void)
{    

    comm_out(0x00);   //R00H,Start Oscillation 
    data_out(0x00);
    data_out(0x01);

    comm_out(0x01);   //R01H,Driver Output Control
    data_out(0x01);
    data_out(0x15);
	
    comm_out(0x02);	  //R02H,LCD-Driving-Waveform Control 
    data_out(0x07);
    data_out(0x00);	        
	
    comm_out(0x05);	  //R05H,Entry Mode
    data_out(0x12);
    data_out(0x30);	        
	
    comm_out(0x06);	  //R06H,Compare Register
    data_out(0x00);
    data_out(0x00);   
	
    comm_out(0x0B);	  //R0BH,Frame Cycle Control
    data_out(0x00);
    data_out(0x08);
}

void InitialFunction2(void)
{
 
    //R30H ~ R37H,R3AH,R3BH
    comm_out(0x30);	//Gamma Control 
    data_out(0x07);
    data_out(0x00);	    

    comm_out(0x31);	
    data_out(0x00);
    data_out(0X07);		

    comm_out(0x32);	
    data_out(0x00);
    data_out(0x00);		

    comm_out(0x33);	
    data_out(0x01);
    data_out(0x00);	    	

    comm_out(0x34);	
    data_out(0x07);
    data_out(0x07);	    

    comm_out(0x35);	
    data_out(0x00);
    data_out(0x07);		

    comm_out(0x36);	
    data_out(0x07);
    data_out(0x07);		

    comm_out(0x37);	
    data_out(0x00);
    data_out(0x01);
    
    comm_out(0x3B);	
    data_out(0x18);
    data_out(0x00);

    comm_out(0x3A);	
    data_out(0x00);
    data_out(0x07); 


    comm_out(0x0F);	 //R0FH,Gate Scan Position
    data_out(0x00);
    data_out(0x00);	    	

    comm_out(0x11);	//R11H,Vertical Scroll Control 
    data_out(0x00);
    data_out(0xa0);	    	

    
    comm_out(0x14);	//R14H,First display drive position
    data_out(0x9F);
    data_out(0x00);//5c00    

    comm_out(0x15);	//R15H,Second display drive position
    data_out(0x9F);
    data_out(0x5d);//a05d

    comm_out(0x16);	//R16H,Horizontal RAM Address Position
    data_out(0x7F);
    data_out(0x00);//0x7F00		

    comm_out(0x17);	//R17H,Vertical RAM Address Position
    data_out(0x9F);
    data_out(0x00);//0xa000


   
}

void PowerSettingFunction1(void)
{
	comm_out(0x07);	//R07H,Display Control
   	data_out(0x00);
   	data_out(0x02);	    

	comm_out(0x0D);  //R0D,Power Control 4
    data_out(0x04);
    data_out(0x01);

	comm_out(0x0E);  //R0E,Power Control 5
    data_out(0x0d);//0x0d
    data_out(0x18);//0x18

}

void PowerSettingFunction2(void)
{
    comm_out(0x0c);	//R0CH,Power Control 3
    data_out(0x00); //0x00
    data_out(0x03);	//0x03

    comm_out(0x03);  //R03H,Power Control 1
    data_out(0x00);  //0x00	
    data_out(0x14); //0x14

    comm_out(0x04);	//R04H,Power Control 2
    data_out(0x80); //0x80	
    data_out(0x00);	//0x00
    delay(50);

    comm_out(0x0E);	//R0EH,Power Control 5
    data_out(0x29); //0x29
    data_out(0x10); //0x10
    delay(50);
	
    comm_out(0x0D);	//R0DH,Power Control 4
    data_out(0x09);//0x09
    data_out(0x18);//0x18
  
}

void DisplayOffFunction(void)
{
    comm_out(0x07);	//R07H,Display Control
    data_out(0x00);
    data_out(0x05);	
    delay(50);

    comm_out(0x07);	
    data_out(0x00);
    data_out(0x27);	
    delay(50);
 
        
    comm_out(0x07);	
    data_out(0x00);
    data_out(0x37);
    	   
    comm_out(0x03);	
    data_out(0x07);
    data_out(0xfc);	       
}

void DisplayOnFunction(void)
{
    comm_out(0x07);	//R07H,Display Control
    data_out(0x00);
    data_out(0x05);	
    delay(50);

    comm_out(0x07);	
    data_out(0x00);
    data_out(0x25);
    	    
    comm_out(0x07);	
    data_out(0x00);
    data_out(0x27);	
    delay(50);

    comm_out(0x07);	
    data_out(0x00);
    data_out(0x37);	
    

    comm_out(0x21); //R21H,RAM Address Set   
    data_out(0x00);
    data_out(0x00);//0x0000	
    	
    comm_out(0x22);  //R22H,Write Data to GRAM   

}


/*===========================================================================
** 函数名称: ini_lcd()
** 功能描述: 实现对LCD的初始化操作
============================================================================*/
void ini_lcd(void)
{
  

    PowerSettingFunction1();	
    delay(50);
    InitialFunction1();
    delay(50);
    PowerSettingFunction2();    
    delay(50);
    InitialFunction2();   
    delay(50);
    
    DisplayOnFunction(); 
    

}



/*===========================================================================
** 函数名称: selectSeries()
** 功能描述: 时序选择,0-8080,1-6800
============================================================================*/
void selectSeries(uint8 i)
{

   //SELECT SERIES 
   switch(i)
   {
      case 0:
           //SELECT  8080
            IO1SET = RD1;
            IO1SET = WR1;
            break;
      case 1:
           //SELECT  6800
            IO1CLR = RD1;
            IO1CLR = WR1;
            break;
      default:
            ;

   }
}

void dispColor(uint16 row,uint16 col,uint8 rgb1,uint8 rgb2,uint16 dly)
{
    uint16 i,j;
    
    comm_out(0x21);
    data_out(0x00);
    data_out(0x00);
    for(i=0;i<row;i++)
	{
          for(j=0;j<col;j++)
		  {
		  	 comm_out(0x22);
		  	 data_out(rgb1 );
		  	 data_out(rgb2);
			// delay(dly);
          }
    }


}


void dispPic(uint16 row,uint16 col,const uint8 *picture)
{						  
   uint16  i,j;
   //uint16  temp1,temp2;
   
   comm_out(0x21);
   data_out(0x00);
    data_out(0x00); 
   for(i=0;i<row;i++)
   {
      for(j=0;j<col;j++)
      {
      	 
         //temp1 = *picture;
         //temp2 = *(++picture);
         
         //data_out( ((temp1<<8)&(0xff00))|((temp2)&(0xff)) );  
         //picture ++;
         comm_out(0x22);
         data_out(*picture);
         data_out(*(picture+1));
         picture=picture+2;
      }
   }


}



/*===========================================================================
** 函数名称: dispColorY()
** 功能描述: 显示垂直色条(4种颜色)
============================================================================*/
void dispColorY(uint16 row,  uint16 col,
                uint16 rgbA1,uint16 rgbA2,
                uint16 rgbB1,uint16 rgbB2,
                uint16 rgbC1,uint16 rgbC2,
                uint16 rgbD1,uint16 rgbD2,
                uint16 rgbE1,uint16 rgbE2,
                uint16 rgbF1,uint16 rgbF2,
                uint16 rgbG1,uint16 rgbG2,
                uint16 rgbH1,uint16 rgbH2 
               )
{
	uint16 i,j,k;
	k=col/8;
	for(i=0;i<row;i++)
	{
		for(j=0;j<k;j++)
		{
		   data_out(rgbA1);
		    data_out(rgbA2);
		}


		for(j=0;j<k;j++)
		{
          data_out(rgbB1);
		    data_out(rgbB2);
		}

		for(j=0;j<k;j++)
		{
          data_out(rgbC1);
		    data_out(rgbC2);
		}

		for(j=0;j<k;j++)
		{
           data_out(rgbD1);
		    data_out(rgbD2);
		}
		for(j=0;j<k;j++)
		{
		  data_out(rgbE1);
		  data_out(rgbE2);
		}


		for(j=0;j<k;j++)
		{
           data_out(rgbF1);
		    data_out(rgbF2);
		}

		for(j=0;j<k;j++)
		{
           data_out(rgbG1);
		    data_out(rgbG2);
		}

		for(j=0;j<k;j++)
		{
           data_out(rgbH1);
		    data_out(rgbH2);
		}
		
		
	}
}


/*===========================================================================
** 函数名称: dispColorX()
** 功能描述: 显示水平色条(4种颜色)
============================================================================*/
void dispColorX(uint16 row,  uint16 col,
                uint16 rgbA1,uint16 rgbA2,
                uint16 rgbB1,uint16 rgbB2,
                uint16 rgbC1,uint16 rgbC2,
                uint16 rgbD1,uint16 rgbD2,
                uint16 rgbE1,uint16 rgbE2,
                uint16 rgbF1,uint16 rgbF2,
                uint16 rgbG1,uint16 rgbG2,
                uint16 rgbH1,uint16 rgbH2
               )
{

    uint16 i,j,k;

    
    k = row /8;

    for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
          data_out(rgbA1);
		    data_out(rgbA2);
       }
	}

	
	for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
          data_out(rgbB1);
		    data_out(rgbB2);
       }
	}

	
	for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
           data_out(rgbC1);
		    data_out(rgbC2);
       }
	}

	

	for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
           data_out(rgbD1);
		    data_out(rgbD2);
       }
	}
	
	
	    for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
          data_out(rgbE1);
		    data_out(rgbE2);
       }
	}

	
	for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
           data_out(rgbF1);
		    data_out(rgbF2);
       }
	}

	
	for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
           data_out(rgbG1);
		    data_out(rgbG2);
       }
	}

	

	for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
          data_out(rgbH1);
		    data_out(rgbH2);
       }
	}
	

}


/*===========================================================================
** 函数名称: dispColorW()
** 功能描述: 显示色块窗口(前景色和背景色)
============================================================================*/
void dispColorW(uint16 row,  uint16 col,
                uint16 Frgb1,uint16 Frgb2,
                uint16 Brgb1,uint16 Brgb2
               )
{

    uint16 i,j,k;

    k = row /4;

    for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
	        data_out( (Brgb1<<8)|(Brgb2) );
       }
	}
	for(i=0;i<k*2;i++)
	{
       for(j=0;j<col/4;j++)
	   {
	        data_out( (Brgb1<<8)|(Brgb2) );
       }

	   for(j=0;j<col/2;j++)
	   {
	        data_out( (Frgb1<<8)|(Frgb2) );
       }
	   for(j=0;j<col/4;j++)
	   {
	        data_out( (Brgb1<<8)|(Brgb2) );
       }
	}


	for(i=0;i<k;i++)
	{
       for(j=0;j<col;j++)
	   {
	        data_out( (Brgb1<<8)|(Brgb2) );
       }
	}

}



/*===========================================================================
** 函数名称: dispColorG()
** 功能描述: 显示绿色渐变(绿 ->白)
============================================================================*/
void dispColorG(uint16 row,uint16 col)
{
    //white 0xff,0xff   red   0xf8,0x00   green 0x07,0xe0   blue  0x00,0x1f
	uint16 i,j;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
		   data_out( ( (0x07+(j/4)*8)<<8)|((0xe0+j/4)) );
		}
	}
}



/*===========================================================================
** 函数名称: dispGraphic_8()
** 功能描述: 显示图形(8*8,区分前景色和背景色)
============================================================================*/
void dispGraphic_8(uint16 row,uint16 col,
                   uint8 *Graphic,
                   uint16 F_RGB1,uint16 F_RGB2,
                   uint16 B_RGB1,uint16 B_RGB2
                  )
{
   
    uint16 n, i,j,k;
    uint8 tempGraphic;

	//p64kd
    for(n=0;n<row/8;n++)
    {
        for(i=0;i<8;i++)
        {

          for(j=0;j<col/8;j++)
          {
             tempGraphic = Graphic[i];
             for(k=0;k<8;k++)
             {
  	             if(((tempGraphic)&(0x80))!= 0)
	             {
	             	data_out( (F_RGB1<<8)|(F_RGB2) );

                 }else
                 {
	             	data_out( (B_RGB1<<8)|(B_RGB2) );
	             }
	             tempGraphic = tempGraphic << 1;
              }
           }
         }
     }

}



/*===========================================================================
** 函数名称: dispGraphic_16()
** 功能描述: 显示图形(16*16,区分前景色和背景色)
============================================================================*/
void dispGraphic_16(uint16 row,uint16 col,
                    uint8  *Graphic,
                    uint16 F_RGB1,uint16 F_RGB2,
                    uint16 B_RGB1,uint16 B_RGB2
                   )
{
        uint16 n, i,j,k;
        uint8 tempGraphic;
    	//p64kd
	    for(n=0;n<row/16;n++)
        {
            for(i=0;i<16;i++)
            {

	          for(j=0;j<col/16;j++)
              {
                 tempGraphic = Graphic[i*2];
                 for(k=0;k<8;k++)
	             {
	  	             if(((tempGraphic)&(0x80))!= 0)
		             {
	             	     data_out( (F_RGB1<<8)|(F_RGB2) );

	                 }else
	                 {
	             	     data_out( (B_RGB1<<8)|(B_RGB2) );
		             }
		              tempGraphic = tempGraphic << 1;
	              }

				 tempGraphic = Graphic[i*2+1];
				 for(k=0;k<8;k++)
	             {
	  	             if(((tempGraphic)&(0x80))!= 0)
		             {
	             	     data_out( (F_RGB1<<8)|(F_RGB2) );

	                 }else
	                 {
	             	     data_out( (B_RGB1<<8)|(B_RGB2) );
		             }
		             tempGraphic = tempGraphic << 1;
	              }
               }
             }
         }

}





/*********************************************************************************************************
**                            End Of File
**********************************************************************************************************/

⌨️ 快捷键说明

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