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

📄 rt12864j.c

📁 用ARM 开发板写的程序 12864的显示程序 请声明版权 不负责后果
💻 C
📖 第 1 页 / 共 2 页
字号:
      IOCLR = LCD_RW;
    
      SendData(code); //依次将指令代码传到数据线上
     
      IOSET = LCD_E;
      IOCLR = LCD_E;
      IOSET = LCD_RW;
     }*/
/****************************************************************************
* 名称:Write_data_CS2()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/    
/*    void Write_data_CS2(uint32 code)
{  
    uint32 Busy;
    Busy = IOPIN & 0x00000400; 
   do LCD_Check();
    	while(Busy != 0x00000400);
 
   IOCLR = LCD_CS2;
   IOSET = LCD_CS2;
   
   IOSET = LCD_DI;
   IOCLR = LCD_RW; //写选择
   
   SendData(code);//
   
    IOSET = LCD_E;
   // DelayNS(10);
    IOCLR = LCD_E;
    IOSET = LCD_RW;
    }*/
/****************************************************************************
* 名称:LCD_CLR()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
 /*   void LCD_CLR(void)
{
    uint32 i,j;
    IOSET = LCD_CS1;
    IOSET = LCD_CS2;                      //用2个全局BIT变量传递左右屏幕,因为check_busy()函数里面有可能
  for(i=0;i<8;i++)
 {
    Write_command_CS1(j|0xb8);   // set page address
    Write_command_CS2(j|0xb8);               
  
    Write_command_CS1(0x40);
    Write_command_CS2(0x40);
  
  for(j=0;j<64;j++)
  {
    Write_data_CS1(0x00);        //  set row address
    Write_data_CS2(0x00);                       //对8个页面的DRAM全部送0
   }
  }
 }*/
/****************************************************************************
* 名称:LCD_FULL()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
/*  void LCD_FULL(void)
{
   uint8 i,j;
   IOSET = LCD_CS1;
   IOSET = LCD_CS2;                      //用2个全局BIT变量传递左右屏幕,因为check_busy()函数里面有可能
                  
  for(i=0;i<8;i++)
 {
    Write_command_CS1(j|0xb8);   // set page address
    Write_command_CS2(j|0xb8);               
  
    Write_command_CS1(0x40);
    Write_command_CS2(0x40);
  for(j=0;j<64;j++)
  {
    Write_data_CS1(0xff);        //  set row address
    Write_data_CS2(0xff);                       //对8个页面的DRAM全部送1
   }
  }
 }*/
/****************************************************************************
* 名称:LCD_RESET()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/ 
/*  void LCD_RESET(void)
 {
     IODIR = LCD_RET;
     IOCLR = LCD_E;
     IOSET = LCD_E;
    }*/
/****************************************************************************
* 名称: LCD_Init()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
 void LCD_Int(void)
{
	IODIR |= 0x00003807;  //   0011  1000  0000  0111  设置为输出
	IOCLR = LCD_E;
	IOCLR = LCD_DI;
	IOCLR = LCD_CS1;
	IOCLR = LCD_CS2;
	
	IOCLR = LCD_RET;
	IOSET = LCD_RET;
	
	IOSET = LCD_CS1;
	IOSET = LCD_CS2;
	Write_command(0x3F);  // 开显示
	Write_command(0xC0);  // 显示起始行为0
	Write_command(0xB8);  // 显示页地址为0
    Write_command(0x40);  // 设置y=0
    IODIR = 0x00003807;
	IOCLR = LCD_CS1;
    IOCLR = LCD_CS2;
}
/********************************************************************
* 名  称:
* 功  能:
* 入口参数:
* 出口参数:
*********************************************************************/
  void LCD_Clr(void)
 {
   uint32 i,j;
    IODIR = 0x00003807;
    IOSET = LCD_CS1;
    IOSET = LCD_CS2;
    Write_command(0xc0);
   for(j=8;j>0;j--)
   {
     Write_command(0xb8|j);
     Write_command(0x40);
	for(i=64;i>0;i--)
	 {
	   Write_data(0x00);
	   }
	   }
	 Write_command(0x3f);
	}
/********************************************************************
* 名  称:
* 功  能:
* 入口参数:
* 出口参数:
*********************************************************************/
 void Display8x8(uint32 x,uint32 y,uint8 *p)
 {         //x表示屏幕的 x行(0-7),y表示屏幕的y列(0-15)
  uint32 i;                                                                   
   y<<=3;                    //用左移3位的方法来代替乘以8,非常省空间的技巧
   IODIR = 0x00003807;
   IOSET = LCD_CS1;
   IOCLR = LCD_CS2;
 if(y&0x40)
 {  
  //IODIR = 0x00003807;
   IOCLR = LCD_CS1;
   IOSET = LCD_CS2;                                                     //判断y,来选择左右屏幕
  }
   y&=0x3f;
   Write_command(0xb8|x);  
   Write_command(0x40|y);
 for(i=8;i>0;i--)
 {
   Write_data(*p++);
  }
}
/********************************************************************
* 名  称:
* 功  能:
* 入口参数:
* 出口参数:
*********************************************************************/
 void Display16x16(uint32 x,uint32 y,uint8 *p)
{
   uint32 i;
   x<<=1;
   y<<=4;
    IODIR = 0x00003807;
   IOSET = LCD_CS1;
   IOCLR = LCD_CS2;
  if(y&0x40)
 { 
   IODIR = 0x00003807;
   IOCLR = LCD_CS1;
   IOSET = LCD_CS2;
  }
    y&=0x3f;         
    Write_command(0xb8|x);  
    Write_command(0x40|y); 
  for(i=16;i>0;i--)
 {
    Write_data(*p++);  
 }
    
    Write_command(0xb9|x);  
    Write_command(0x40|y);
 for(i=16;i>0;i--)
 {
    Write_data(*p++); 
  }
}
/****************************************************************************
* 名称: main(void)
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
   int main(void)
 {     
   
    System_Int();
	//BEEP();
	LCD_Int();
	LCD_Clr(); //在屏幕0行0列显示字符0
   // DelayNS(100);   // 一定要加。否则不能正常显示
   // Display8x8(1,2,a[4]);	              
  //  DelayNS(100);
	
	}
//typedef unsigned char  uint8;                   /* 无符号8位整型变量                        */
//typedef signed   char  int8;                       /* 有符号8位整型变量                        */
//typedef unsigned short uint16;                  /* 无符号16位整型变量                       */
//typedef signed   short int16;                      /* 有符号16位整型变量                       */
//typedef unsigned int   uint32;                   /* 无符号32位整型变量                       */
//typedef signed   int   int32;                      /* 有符号32位整型变量                       */
//typedef float          fp32;                          /* 单精度浮点数(32位长度)                 */
//typedef double         fp64;                        /* 双精度浮点数(64位长度)                 */

// 今天,晚上在网上看到一条信息,ARM 的速度比液晶的速度快,所以要有适当的延时,我加了,果然
//  正常显示了,但还有一个问题,ARM 复位后就不能正常显示。

⌨️ 快捷键说明

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