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

📄 main.c

📁 arm7驱动液晶屏显示图片
💻 C
字号:
#include "config.h"  
#define LCD_DI      0x00000100 //指令选择线P0.8
#define LCD_RW      0x00000200 //读写选择线P0.9
#define LCD_E       0x00000400 //使能线P0.10
#define LCD_CS1     0x00000800 //左屏选择线P0.11
#define LCD_CS2     0x00001000 //左屏选择线P0.11
#define IO_USE      0x00001FFF //13个GPIO口传输方
#define LCD_RESET   0x00002000
#define LCD_DISP_ON            0x3f        
#define LCD_DISP_OFF           0x3e         
#define LCD_START_ROW          0xc0   //显示起始行0,可以用LCM12864_START_ROW+x设置起始行。(x<64)       
#define LCD_PAGE_START_ADDR    0xb8   // 页起始地址,可以用LCM12864_PAGE_START_ADDR+x设置当前页。(x<8)      
#define LCD_COL_START_ADDR     0x40   //列起始地址,可以用LCM12864_COL_START_ADDR+x设置当前列。(x<64)
      


uint8 huan1[]={ 
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
};
uint8  ying2[]=
{
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
};
uint8  shi3[]={
0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,
};

uint8  yong4[]={
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
};
/********************************************************************************************
* 函数名称:Delay()
* 功    能:软件延时
* 入口参数:count    延时参数,值越大,延时越长
* 出口参数:无
*********************************************************************************************/
void Delay(uint16 count)
{
  uint8 i;                

  while(--count != 0)        
    {
     for(i = 0;i < 125; i++);               //";" 表示空语句,CPU空转。
   }                               //i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/********************************************************************************************/
void SendData(uint8 data)
{
    IOSET=data;
    IOCLR=~data&0x000000FF;
}
/********************************************************************************************
写命令
*********************************************************************************************/
void wcodel(uint8 code)
{ 
   IO0CLR=LCD_RW; 
   IO0CLR=LCD_DI; 
   SendData(code); 
   IO0SET=LCD_E;
   IO0CLR=LCD_E;
}
/********************************************************************************************
写数据
*********************************************************************************************/
void wdata1(uint8 data)
{ 
   IO0CLR=LCD_RW; 
   IO0SET=LCD_DI; 
   SendData(data); 
   IO0SET=LCD_E;
   IO0CLR=LCD_E;
}
/********************************************************************************************
空读一次 从LCD读一字节数据
*********************************************************************************************/
uint8 Readwdata1(void)
 {    uint8 data;
     IO0SET=LCD_RW; 
     IO0SET=LCD_DI; 
     IO0SET=LCD_E;
     IO0PIN=IO0PIN&data;
     return data;
 }
/********************************************************************************************
向LCD指定点写一字节数据。
*********************************************************************************************/
void Write1_x_y(uint8 x,uint8 y,uint8 data)
{
     IO0CLR=LCD_CS1; 
     IO0CLR=LCD_CS2; 
     if(x<64)                                
      { 
         IO0SET=LCD_CS1;                          
      }
      else
      { 
         IO0SET=LCD_CS2;                         
         x = x-64;
      }
       wcodel(LCD_COL_START_ADDR+x);  // 设置当前列地址,即x坐标
       wcodel(LCD_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
       wdata1(data);             
} 
/********************************************************************************************
从LCD指定点上读取一字数据
*********************************************************************************************/
uint8 Read1_x_y(uint8 x,uint8 y)
 {     uint8 data;
       IO0CLR=LCD_CS1; 
       IO0CLR=LCD_CS2; 
       if(x<64)                                
          { 
             IO0SET=LCD_CS1;                        
          }
        else
          { 
             IO0SET=LCD_CS2;                       
               x = x-64;
          }
         wcodel(LCD_COL_START_ADDR+x);  // 设置当前列地址,即x坐标
         wcodel(LCD_PAGE_START_ADDR+y); // 设置当前页地址,即y坐标
         data=Readwdata1();
         IO0PIN=IO0PIN&data;
         return data;
                  
} 
/********************************************************************************************
LCD初始化
*********************************************************************************************/
void LCD_Init(void)
{
  IO0CLR=LCD_RESET;
  IO0SET=LCD_RESET;
  IO0SET=LCD_CS1; 
  IO0SET=LCD_CS2;
  wcodel(LCD_DISP_OFF);
  wcodel(LCD_PAGE_START_ADDR+0);
  wcodel(LCD_START_ROW+0);
  wcodel(LCD_COL_START_ADDR+0);
  wcodel(LCD_DISP_ON);
  //IO0SET=LCD_LEDK; 
  //IO0CLR=LCD_LEDK;
}
/********************************************************************************************
向LCD填充数据
*********************************************************************************************/
void LCD_Fill_Screen(uint8 LCD_FillData)
{
  uint8 x,y;
  IO0SET=LCD_CS1;
  IO0SET=LCD_CS2;                       
  wcodel(LCD_START_ROW+0);            
  for(x=0;x<8;x++)
 {
   wcodel(LCD_PAGE_START_ADDR+x);   
   wcodel(LCD_COL_START_ADDR);     
     for(y=0;y<64;y++) 
      wdata1(LCD_FillData);
  }

  IO0CLR=LCD_CS2;                                  
}
/********************************************************************************************
在LCD的指定点上显示16*16点阵汉字
*********************************************************************************************/
void LCD_Disp_Chinese_16_16(uint8 LCD_page,uint8 LCD_col, uint8 *Chinese_16_16)
{
  uint8 j=0,i=0;
  for(j=0;j<2;j++)
     {
   wcodel(LCD_PAGE_START_ADDR+LCD_page+j);
   wcodel(LCD_COL_START_ADDR+LCD_col);
   for(i=0;i<16;i++) 
     wdata1(Chinese_16_16[16*j+i]);
     }
}
void main(void)
{ PINSEL0=0x00000000;
  PINSEL1=0x00000FFF;
  while(1)
      {
       LCD_Init(); 

        IO0SET=LCD_CS1; 
        IO0CLR=LCD_CS2;
        LCD_Disp_Chinese_16_16(1,32,huan1); 
  Delay(300);
        LCD_Disp_Chinese_16_16(1,48,ying2); 
  Delay(300);
        IO0CLR=LCD_CS1; 
        IO0SET=LCD_CS2;
        LCD_Disp_Chinese_16_16(1,0,shi3);   
  Delay(300);
        LCD_Disp_Chinese_16_16(1,16,yong4); 
       }
}

⌨️ 快捷键说明

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