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

📄 lcd12864.c

📁 ARM LCD12864带键盘 液晶驱动程序
💻 C
字号:
#include "config.h"
#include  "zimu.h"
/*******************************************************************************************/
#define Disp_On  0x3f      // 显示开指令 //
#define Disp_Off 0x3e      // 显示关指令 //
#define Col_Add  0x40      // 定位到第0列指令 //
#define Page_Add 0xb8      // 定位到第0页指令 //
#define Start_Line 0xc0     // 定位从DDROM中的第0行开始往屏幕上显示 //
//uchar chip_select=1;

/*******************************************************************************************/
#define E   1<<8     // 使能端 //
#define RW  1<<9     // 读写控制端 //
#define RS  1<<10     // 数据或指令寄存器选择端 //
#define CS2 1<<11     // 右屏使能 //
#define CS1 1<<12     // 左屏使能 /
#define RST 1<<13     // 复位端 //
#define PORT 0xff<<0
/*************************************************************************************************/
/*-------------------延时子程序-----------------------------*/
void delay( uint32 t)
 {
  uint32 i,j;
  for(i=0;i<t;i++)
  for(j=0;j<10;j++)
   ;
 }

/*-------------------------写命令到LCD------------------------------*/
void write_command(uint8 cmdcode)
 {
  IO0CLR=RS;
  IO0CLR=RW;
  IO0SET = (cmdcode)<<0;                                                              //////******//数据 P0
  delay(0);
  IO0SET=E;
  delay(0);
  IO0CLR=E;
 }

/*-------------------------写数据到LCD----------------------------*/

void write_data( uint8 Dispdata)
 {
  IO0SET=RS;
  IO0CLR=RW;
  IO0SET=(Dispdata)<<0;
  delay(0);
  IO0SET=E;
  delay(0);
  IO0CLR=E;
 }

/*-------------------------读LCD数据----------------------------*/
/*
UINT8 read_data()
 {
  UINT8 tmpin;
  IO0SET=PORT;
  IO0SET=RS;
  IO0SET=RW;
  delay(0);
  IO0SET=E;
  delay(0);
  IO0CLR=E;
  IO0SET=E;//???????
  tmpin = P0;//????????
  return tmpin;

}*/
/*------------------------清显示屏--------------------------------*/

void Clr_Scr(void)
 {
  uint8 j,k;
  IO0CLR=CS2;IO0SET=CS1;             // 清左半屏 //
   {
    write_command(Page_Add+0);
    write_command(Col_Add+0);
    for(k=0;k<8;k++)               // 清左上半屏 //
     {
	  write_command(Page_Add+k);
      for(j=0;j<64;j++)
	  {
	  write_command(Col_Add+j);
	  write_data(0x00);
	  }
     }
   }
  IO0SET=CS2; IO0CLR=CS1;                     // 清右半屏 //
   {
    write_command(Page_Add+0);
    write_command(Col_Add+0);
    for(k=0;k<8;k++)               // 清右上半屏 //
     {
	  write_command(Page_Add+k);
      for(j=0;j<64;j++)
	  {
	  write_command(Col_Add+j);
	  write_data(0x00);
	  }
     }
   }
 }
/*------------------初始化LCD屏--------------------------*/
void init_lcd(void)
 {
  IO0CLR=RST;
  delay(100);
  IO0SET=RST;
  delay(100);

  IOSET=CS2;
  IOSET=CS1;

  delay(100);
  write_command(Disp_Off);
  write_command(Page_Add+0);
  write_command(Start_Line+0);
  write_command(Col_Add+0);
  write_command(Disp_On);
 }
 
 /*********************************************************************/
 void sz_disp16(uint8 pag,uint8 col, uint8 const *szk)
 {
  uint8 j=0,i=0;
  for(j=0;j<2;j++)
   {
    write_command(Page_Add+pag+j);
    write_command(Col_Add+col);
    for(i=0;i<8;i++) 
	 write_data(szk[8*j+i]);
   }
 }
 
void sz_disp8(uint8 pag,uint8 col, uint8 const *szk)
 {
  uint8 j=0,i=0;
  for(j=0;j<1;j++)
   {
    write_command(Page_Add+pag+j);
    write_command(Col_Add+col);
    for(i=0;i<8;i++) 
	 write_data(szk[8*j+i]);
   }
 }

/*---------------------指定位置显示汉字16*16-----------------------*/

void hz_disp16(uint8 pag,uint8 col, uint8 const *hzk)
{
  uint8 j=0,i=0;
  for(j=0;j<2;j++)
   {
    write_command(Page_Add+pag+j);
    write_command(Col_Add+col);
    for(i=0;i<16;i++) 
	 write_data(hzk[16*j+i]);
   }
 }
/********************************************************************/
/*------------------显示12864图片---------------------------*/
void Disp_Img(uint8 const *img)
 {
  uint8 j,k;
  for(k=0;k<8;k++)
   {
    IO0SET=CS2;
	IO0CLR=CS1;
	delay(10);
    write_command(Page_Add+k);
    write_command(Col_Add+0);
    for(j=0;j<64;j++) 
	 write_data(img[k*128+j]);
    IO0CLR=CS2;
	IO0SET=CS1;
    delay(10);
    write_command(Page_Add+k);
    write_command(Col_Add+0);
    for(j=64;j<128;j++) 
	 write_data(img[k*128+j]);
   }
 }
 /**********************************************************************/
void show(void)
{
  Clr_Scr();
  IO0SET=CS2;IO0CLR=CS1;
  hz_disp16(0,32,gong);      	 
  delay(1000);
  hz_disp16(0,48,neng);      	 
  delay(1000);

  IO0CLR=CS2;IO0SET=CS1;
  hz_disp16(0,0,xuan);      	 
  delay(100);
  hz_disp16(0,16,ze);      	 
  delay(1000);

  IO0SET=CS2;IO0CLR=CS1;
  hz_disp16(2,0,yi1);      	 
  delay(1000);
  hz_disp16(2,32,shou);      	 
  delay(1000);
  hz_disp16(2,48,dong);      	 
  delay(1000);

  IO0CLR=CS2;IO0SET=CS1;
  hz_disp16(2,0,mo);      	 
  delay(2000);
  hz_disp16(2,16,shi1);      	 
  delay(1000);
  //hz_disp16(2,48,fbfan);      	 
 //	delay(100);

  IO0SET=CS2;IO0CLR=CS1;
  hz_disp16(4,0,er);      	 
  delay(1000);
  hz_disp16(4,32,zi);      	 
  delay(1000);
  hz_disp16(4,48,dong);      	 
  delay(1000);

  IO0CLR=CS2;IO0SET=CS1;
  hz_disp16(4,0,mo);      	 
  delay(1000);
  hz_disp16(4,16,shi1);      	 
  delay(1000);
  //hz_disp16(4,48,fbhui);      	 
 // delay(100);

  IO0SET=CS2;IO0CLR=CS1;
  hz_disp16(6,0,san);      	 
  delay(1000);
  hz_disp16(6,32,yu1);      	 
  delay(1000);
  hz_disp16(6,48,le);      	 
  delay(1000);

  IO0CLR=CS2;IO0SET=CS1;
  hz_disp16(6,0,mo);      	 
  delay(1000);
  hz_disp16(6,16,shi1);      	 
  delay(1000); 
}


void shuzishow(unsigned char arr)
{
   IO0CLR=CS2;IO0SET=CS1;
   write_command(Page_Add+0);  
   sz_disp16(0,0,shuzi[arr]);         
}

⌨️ 快捷键说明

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