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

📄 lcd12864应用.c

📁 LCD12864.rar
💻 C
字号:
#include <reg51.h>
#include <string.h>
#include <math.h>
 
#define Disp_On 0x3f    //显示开
#define Disp_Off 0x3e  //显示关
#define Col_Add 0x40   //第一列
#define Page_Add 0xb8  //第一页
#define Start_Line 0xc0  //从第0行开始显示
#define Lcd_Bus P0 //  MCU P0<------> LCM
 
sbit Mcs=P2^0; //Master chip enable   CS1  左边控制器
sbit Scs=P2^1; //Slave chip enable     CS2 右边控制器
sbit Enable=P2^4; //6800 mode Enable single  E
sbit Di=P2^2; //Data or Instrument Select  RS
sbit RW=P2^3; //Write or Read        R/W
sbit Lcd_Rst=P2^5; //Lcm reset        RST
 
char code ce[]={
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00
};	//“测”
char code shi[]={
0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00
};	//“试”
char code kai[]={
0x40,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00
};	//“开”
char code shi3[]={
0x10,0x90,0x70,0x1F,0x12,0xF0,0x00,0x20,0x70,0x28,0x27,0x22,0x28,0x70,0x20,0x00,
0x40,0x21,0x12,0x0C,0x06,0x09,0x30,0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00
}; //“始”
char code wan[]={
0x00,0x90,0x8C,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x94,0x8C,0x04,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,0x00
};  //“完”
char code bi[]={
0x00,0x00,0xFF,0x88,0x48,0x28,0x08,0x80,0x7F,0x88,0x88,0x88,0x84,0x84,0xE0,0x00,
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00
};  //“毕”
unsigned char code FirstPage[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0xFF,0x00,0x00,0x00,0x00,0xFF,0x41,0x41,0x41,0x41,0x41,0x41,0x00,0x00,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x38,
0x30,0x30,0x20,0x30,0x30,0x3C,0x1F,0x00,0x00,0x00,0x1F,0x38,0x30,0x30,0x20,0x30,
0x30,0x3C,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xE0,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0xE0,0x20,
0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xB0,0xE0,0x80,0x80,0xC0,0xC0,0xC0,0x80,0x80,
0xC0,0x60,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xB0,0xE0,0xE0,
0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xC0,
0x00,0x00,0x00,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,
0x80,0x80,0x80,0xA0,0xE0,0xC0,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x30,0x18,0x0E,0xFF,0x13,0x98,0xD9,0xFB,0x87,0x87,0xFF,0x02,0x00,0x00,0xFF,0x00,
0x00,0x00,0x00,0x00,0x58,0xD9,0xDA,0xDE,0xF8,0xEF,0xEF,0x6C,0xEC,0xFF,0x08,0x0C,
0xFC,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,0x8F,0x87,0x81,0xB5,0xE5,0xED,0x81,0xF1,
0xBF,0xC1,0xC1,0xC6,0xC3,0xC0,0x80,0x00,0x00,0x00,0x00,0x79,0x5F,0x41,0x7F,0xE3,
0x30,0xDC,0x17,0xF9,0x99,0x9B,0xEE,0x18,0x10,0x10,0x00,0x00,0x00,0x00,0x03,0x27,
0x36,0x3E,0x3E,0x76,0xF2,0x52,0x9A,0x9A,0xB3,0x33,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0F,0x0C,0x09,0x0B,0x0C,0x0F,0x00,0x01,0x08,0x18,0x30,0x7F,0x00,
0x00,0x00,0x00,0x00,0x08,0x06,0x0B,0x19,0x3F,0x00,0x31,0x1F,0x07,0x01,0x00,0x10,
0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x21,0x31,0x11,0x19,0x0D,0x06,0x03,0x03,
0x06,0x0C,0x0C,0x18,0x38,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x19,0x31,0x3F,0x07,
0x10,0x13,0x13,0x11,0x19,0x1F,0x19,0x18,0x18,0x00,0x00,0x00,0x00,0x10,0x10,0x1B,
0x1B,0x1B,0x19,0x19,0x1F,0x19,0x19,0x09,0x09,0x08,0x08,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};	//显示位图的点阵
 
void delay(unsigned int t)   //延时100us
{
   unsigned int i,j;
   for(i=0;i<t;i++)
   for(j=0;j<10;j++);
}

void write_com(unsigned char cmdcode)	//写命令
{
   Di=0;
   RW=0;
   Lcd_Bus=cmdcode;
   delay(0);	  //延时20us
   Enable=1;
   delay(0);
   Enable=0;
}

void write_data(unsigned char Dispdata)	  //写数据
{
   Di=1;
   RW=0;
   Lcd_Bus=Dispdata;
   delay(0);
   Enable=1;
   delay(0);
   Enable=0;
}
 
void frame()					 //画一个方框
{
   unsigned char i;
   Mcs=0;Scs=0;delay(10);	//有疑问 ???解答:因为Protues仿真模型的CS1和CS2都是低电平有效
   write_com(Page_Add+0);
   write_com(Col_Add+0);
   for(i=0;i<64;i++) write_data(0x01);//画一条水平线
   write_com(Page_Add+7);
   write_com(Col_Add+0);
   for(i=0;i<64;i++) write_data(0x80);//画一条水平线
   for(i=0;i<8;i++)
   {
      Mcs=0;Scs=1;delay(10);
      write_com(Page_Add+i);	 
      write_com(Col_Add+63);
      write_data(0xff);			  //画一条垂直线
      Mcs=1;Scs=0;delay(10);
      write_com(Page_Add+i);
      write_com(Col_Add+0);
      write_data(0xff);			 //画一条垂直线
   }
}

void Clr_Scr()					 //清屏
{
   unsigned char j,k;
   Mcs=0;Scs=0;delay(10);		//屏幕分成左右两部分,分别由Mcs和Scs控制,列值都是从0-63
   write_com(Page_Add+0);//有疑问 ???解答:因为Protues仿真模型的CS1和CS2都是低电平有效
   write_com(Col_Add+0);
   for(k=0;k<8;k++)
   {
      write_com(Page_Add+k);
      for(j=0;j<64;j++)
	  {	  
	     write_com(Col_Add+j);
         write_data(0x00);	
	  }
   }
}

void Disp_Img(unsigned char code *img)   //显示图片
{
   unsigned char j,k;
   for(k=0;k<8;k++)     //分成8页进行显示,每页有8行
   {
      Mcs=1;Scs=0;delay(10);	  //先进行左半屏显示
      write_com(Page_Add+k);
      write_com(Col_Add+0);
      for(j=0;j<64;j++) 
	     write_data(img[k*128+j]);//按列扫描显示,一个字节就是一列,因为每页有8行
      Mcs=0;Scs=1; delay(10);     //再进行右半屏显示
      write_com(Page_Add+k);
      write_com(Col_Add+0);
      for(j=64;j<128;j++) 
	     write_data(img[k*128+j]);//按列扫描显示,一个字节就是一列,因为每页有8行
   }
}

void Disp_H_Line()    //显示水平线
{
   unsigned char i,j;
   Mcs=0;Scs=0;delay(10);	//有疑问 ???解答:因为Protues仿真模型的CS1和CS2都是低电平有效
   write_com(Disp_On);
   write_com(Page_Add);
   write_com(Start_Line);
   write_com(Col_Add);
   for(j=0;j<8;j++)
   {
      write_com(Page_Add+j);
      write_com(Col_Add+0);
      // write_com(Start_Line+0);
      for(i=0;i<64;i++)
	     write_data(0x55);
   }
}
 
void Disp_V_Line()   //显示垂直线
{
   unsigned char i,j;
   Mcs=0;Scs=0;delay(10);//有疑问 ???解答:因为Protues仿真模型的CS1和CS2都是低电平有效
   write_com(Disp_On);
   write_com(Page_Add);
   write_com(Start_Line);
   write_com(Col_Add);
   for(j=0;j<8;j++)
   {
      write_com(Page_Add+j);
      write_com(Col_Add+0);
      write_com(Start_Line+0);
      for(i=0;i<32;i++)
      {
          write_data(0x00);
          write_data(0xff);
      }
   }
}

/*写16*16中文字符,分两行显示,先扫描16列,再扫描行*/
void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)     
{
   unsigned char j=0,i=0;
   //Mcs=1;Scs=1;delay(10);
   for(j=0;j<2;j++)
   {
   write_com(Page_Add+pag+j);
   write_com(Col_Add+col);
   for(i=0;i<16;i++) 
      write_data(hzk[16*j+i]);
   }
}
 
void init_lcd()	//初始化LCD12864
{
   Lcd_Rst=0;
   delay(100);
   Lcd_Rst=1;
   delay(100);
   Mcs=1;
   Scs=1;
   delay(100);
   write_com(Disp_Off);
   write_com(Page_Add+0);
   write_com(Start_Line+0);
   write_com(Col_Add+0);
   write_com(Disp_On);
}
 
void Msg(int flg)  //显示相应的信息
{
   Clr_Scr();
   frame();
   if(flg==0)	 //显示"测试开始"
   { 
      Mcs=1;Scs=0;
      hz_disp16(3,32,ce);
      delay(2000);
      hz_disp16(3,48,shi);
      delay(2000);
      Mcs=0;Scs=1;
      hz_disp16(3,0,kai);
      delay(2000);
      hz_disp16(3,16,shi3);
      delay(2000);
   }
   else if(flg==1)	 //显示"测试完毕"
   { 
      Mcs=1;Scs=0;
      hz_disp16(3,32,ce);
      hz_disp16(3,48,shi);
      Mcs=0;Scs=1;
      hz_disp16(3,0,wan);
      hz_disp16(3,16,bi);
   }
}

main()
{
   unsigned char i=0;
   while(1)
   {
      init_lcd();
	  //Clr_Scr();
      Disp_Img(FirstPage);
      delay(30000);
	  Clr_Scr();
	  //delay(30000);
      Msg(0);
      delay(10000);
	  Clr_Scr();
      Disp_H_Line();
      delay(10000);
	  Clr_Scr();
      Disp_V_Line();
      delay(10000);
	  Clr_Scr();
      Msg(1);
      delay(10000);
	  Clr_Scr();
   }
}

⌨️ 快捷键说明

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