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

📄 lcm12864.h

📁 无线解码,用12864显示解码结果,00表示0,11表示1,01表示悬空
💻 H
字号:
//*************************************************************
sbit DIPIN       = P1^0;                //用户自定义DI对应引脚
sbit CLKPIN      = P1^1;                //用户自定义CLK对应引脚
void WriteCom_Dat(unsigned char cmd_dat, unsigned char cd);         // 第一行AC 0x80~0x87
void Transmit4Byte(unsigned char ucBuffer);                         // 第2行AC  0x90-0x97
void DdramClear(void);                   //  WriteCom_Dat(0x88,0);  // 第三行AC 0x88-0x8F
void InitLcm(void);                                                 // 第四行AC 0x98-0x9F
void DisplayInt(unsigned int CounterLeft);
void Display1Decimal(unsigned int CounterLeft);
void DisplayChar(unsigned char CounterLeft);
unsigned char StringDigit[11]="0123456789 ";
//*********************** Gdram **********************************
void Draw_Rectangle();
void Draw_Half_Rectangle();
void 	Setup_Expand_Mode();
void Gdram_Write_Word(unsigned char Gdram_Cur_X,unsigned char Gdram_Cur_Y,unsigned char High8,unsigned char Low8);
void Clear_Gdram();
//*********************************************************************************
void Delay(unsigned int a);

//*********************************************************************************
//--------------------------------------------------------------------------------------------
void Delay(unsigned int a)
{
  unsigned int i;
  while(--a!= 0)
  {
    for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
  } //i 从0加到125,CPU大概就耗时1 毫秒
}
void Setup_Basic_Mode()
{
	WriteCom_Dat(0x30,0);  // 8-bit控制界面,基本指令集动作	
}	
void InitLcm(void)
{
  Delay(4);
  Setup_Basic_Mode(); // 功能设定 0 0 1 DL X  0  X X ; DL=1 8-bit控制界面 DL=0 4-bit控制界面
//  WriteCom_Dat(0x30,0);  //                   RE        RE=1 扩充指令集动作 RE=0 基本指令集动作
//	WriteCom_Dat(0x36,0);  // 8-bit控制界面,扩充指令集动作, 绘图显示ON  										
	WriteCom_Dat(0x0c,0); //显示状态 00001DCB ; D=1:整体显示ON C=1游标ON B=1游标位僮显示反白ON--将光标所在处的资料反白显示
  WriteCom_Dat(0x01,0);  //清除显示,4.6ms
  WriteCom_Dat(0x06,0);              //进入点设定 00000 1 I/D S   I/D=1:光标右移,DDRAM位址计数器+1; I/D=0:光标左移DDRAM位址计数器-1; S=1 画面整体反向移动
}
void WriteCom_Dat(unsigned char cmd_dat, unsigned char cd)
{              // cd=0:写指令;cd=1:写数据;
  unsigned int iTemp;
  unsigned char ucDB;
  /*写入5个连续 "1" */
  DIPIN = 1;  // SID=1 
  for(iTemp=0;iTemp<5;iTemp++)
  {
    CLKPIN = 0;    
    CLKPIN = 1;
  }     
  /* WRite "RW" */
  CLKPIN = 0;  // SCLK=0
  DIPIN = 0;    // SID=0  ; 
  CLKPIN = 1;     // SCLK=1  
  /* WRite "RS" */
  CLKPIN = 0;   // SCLK=0
  if(cd==1)DIPIN = 1;   // SID=1 写数据 else SID=0写命令
  CLKPIN = 1;    //  SCLK=1
  /* 第八位写入0 */
  CLKPIN = 0;     // SCLK=0
  DIPIN = 0;    // SID=0  ; 
  CLKPIN = 1;        // SCLK=1
      /*接收到起始位元组后,每个指令/数据将分为二组接收到:较高4位元(DB7~DB4)的指令资料将会
      被放在第一组的LSB部分,而较低4位元(DB3~DB0)的指令资料则会被放在第二组的LSB部分,
      至于相关的另4位则都为0 */
  /* 传送高4位及4个0 */
  ucDB=cmd_dat;
  Transmit4Byte(ucDB);
  /* 传送低4位及4个0 */
  ucDB=cmd_dat<<4;
  Transmit4Byte(ucDB);
//  Delay(10);
}
void Transmit4Byte(unsigned char ucBuffer)
{
  unsigned int iTemp;            //串行移位
  for(iTemp=0;iTemp<4;iTemp++)
  {
    CLKPIN = 0;  // SCLK=0
    if(ucBuffer&0x80)DIPIN = 1;  
    else DIPIN = 0; 
    CLKPIN = 1;        // SCLK=1
    ucBuffer=ucBuffer<<0x1;
  }
  /* 传送4个"0" */
  DIPIN = 0;    // SID=0
  for(iTemp=0;iTemp<4;iTemp++)
  {
    CLKPIN = 0;   // SCLK=0
    CLKPIN = 1;   // SCLK=1
  }
}
//-----------------------------------------------------
void DisplayInt(unsigned int CounterLeft)
{                  // CounterLeft 可做次数
  int iTemp;
  unsigned char ucLCDBuffer[4];
  ucLCDBuffer[3]=CounterLeft%10;  
  ucLCDBuffer[2]=(CounterLeft%100)/10;        
  ucLCDBuffer[1]=(CounterLeft/100)%10;
  ucLCDBuffer[0]=(CounterLeft/1000)%10;  
	if((ucLCDBuffer[2] == 0)&&(ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[2] = 10;
	if((ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[1] = 10;
	if(ucLCDBuffer[0] == 0) ucLCDBuffer[0] = 10;
//  WriteCom_Dat(0x95,0);  // 第2行AC
  for(iTemp=0;iTemp<4;iTemp++){WriteCom_Dat(StringDigit[ucLCDBuffer[iTemp]],1);} 
}
//-----------------------------------------------------
void Display1Decimal(unsigned int CounterLeft)
{                  // CounterLeft 可做次数
  int iTemp;
  unsigned char ucLCDBuffer[4];
  ucLCDBuffer[3]=CounterLeft%10;  
  ucLCDBuffer[2]=(CounterLeft%100)/10;        
  ucLCDBuffer[1]=(CounterLeft/100)%10;
  ucLCDBuffer[0]=(CounterLeft/1000)%10;  
//	if((ucLCDBuffer[2] == 0)&&(ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[2] = 10;
	if((ucLCDBuffer[1] == 0)&&(ucLCDBuffer[0] == 0)) ucLCDBuffer[1] = 10;
	if(ucLCDBuffer[0] == 0) ucLCDBuffer[0] = 10;
 	for(iTemp=0;iTemp<3;iTemp++){WriteCom_Dat(StringDigit[ucLCDBuffer[iTemp]],1);} 
	WriteCom_Dat('.',1); WriteCom_Dat(StringDigit[ucLCDBuffer[3]],1);
}
void DisplayChar(unsigned char CounterLeft)
{                  // CounterLeft 可做次数
  int iTemp;
  unsigned char ucLCDBuffer[2];
  unsigned char MaoHao[2]=":";
  ucLCDBuffer[1]=(CounterLeft)%10;
  ucLCDBuffer[0]=(CounterLeft)/10;  
//	if(ucLCDBuffer[0] == 0) ucLCDBuffer[0] = 10;
//  WriteCom_Dat(0x95,0);  // 第2行AC
  for(iTemp=0;iTemp<2;iTemp++){WriteCom_Dat(StringDigit[ucLCDBuffer[iTemp]],1);} 
//  for(iTemp=0;iTemp<2;iTemp++){WriteCom_Dat(MaoHao[iTemp],1);}    //":" 
}
//*********************************************************************************
void 	Setup_Expand_Mode()
{
	WriteCom_Dat(0x34,0);  // 8-bit控制界面,扩充指令集动作, 绘图显示OFF 		
}	
void Gdram_Write_Word(unsigned char Gdram_Cur_X,unsigned char Gdram_Cur_Y,unsigned char High8,unsigned char Low8)
{
	Setup_Expand_Mode();
	WriteCom_Dat(Gdram_Cur_Y|0x80,0);
	WriteCom_Dat(Gdram_Cur_X|0x80,0);
	WriteCom_Dat(High8,1);
	WriteCom_Dat(Low8,1);
	WriteCom_Dat(0x36,0);
}	
void Clear_Gdram()
{
	unsigned char i,j;
	WriteCom_Dat(0x08,0);// 整体显示OFF
	Setup_Expand_Mode();
 	for(j=0;j<32;j++){for(i=0;i<8;i++) Gdram_Write_Word(i,j,0x0,0x0);}  // 设定GDRAM位址  				
 	for(j=0;j<32;j++){for(i=8;i<16;i++) Gdram_Write_Word(i,j,0x0,0x0);}  // 设定GDRAM位址  				
	WriteCom_Dat(0x0C,0);// 整体显示ON
}
void Draw_Rectangle()
{
	unsigned char i;
	for(i=0;i<8;i++) Gdram_Write_Word(i,0,0xff,0xff);  // 设定GDRAM位址  				
	for(i=1;i<32;i++) Gdram_Write_Word(0,i,0x80,0x00);  // 设定GDRAM位址  				
	for(i=0;i<31;i++) Gdram_Write_Word(8,i,0x80,0x00);  // 设定GDRAM位址  				
	for(i=1;i<32;i++) Gdram_Write_Word(7,i,0x00,0x01);  // 设定GDRAM位址  				
	for(i=0;i<31;i++) Gdram_Write_Word(15,i,0x00,0x01);  // 设定GDRAM位址  				
	for(i=8;i<16;i++) Gdram_Write_Word(i,31,0xff,0xff);  // 设定GDRAM位址  				
}
void Draw_Half_Rectangle()
{
	unsigned char i;
	for(i=1;i<32;i++) Gdram_Write_Word(0,i,0x80,0x00);  // 设定GDRAM位址  				
	for(i=0;i<31;i++) Gdram_Write_Word(8,i,0x80,0x00);  // 设定GDRAM位址  				
	for(i=8;i<16;i++) Gdram_Write_Word(i,31,0xff,0xff);  // 设定GDRAM位址  				
}	
void Draw2(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x06,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x02,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x04,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x06,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x02,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x04,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw4(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x0f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x06,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x0f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x01,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x01,0x00);}
}
void Draw6(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x08,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x0f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x08,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x0f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw8(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x0f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x0f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw0(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x09,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x0f,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x09,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x0f,0x00);}
}
void Draw10(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0xaf,0x00);Gdram_Write_Word(cur_x,cur_y+1,0xa9,0x00);Gdram_Write_Word(cur_x,cur_y+2,0xa9,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0xa9,0x00);Gdram_Write_Word(cur_x,cur_y+4,0xaf,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0xa0|0x0f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0xa0|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+2,0xa0|0x09,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0xa0|0x09,0x00);Gdram_Write_Word(cur_x,cur_y+4,0xa0|0x0f,0x00);}
}
void Draw12(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x26,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x22,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x24,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x2f,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x26,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x22,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x24,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x2f,0x00);}
}
void Draw14(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x2f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x21,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x21,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x2f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x21,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x21,0x00);}
}
void Draw16(unsigned char cur_x,unsigned char cur_y,bit Flag)
{
	if(!Flag){Gdram_Write_Word(cur_x,cur_y+0,0x2f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x28,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x2f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x29,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x2f,0x00);}
	else {Gdram_Write_Word(cur_x,cur_y+0,0x80|0x2f,0x00);Gdram_Write_Word(cur_x,cur_y+1,0x80|0x28,0x00);Gdram_Write_Word(cur_x,cur_y+2,0x80|0x2f,0x00);
		Gdram_Write_Word(cur_x,cur_y+3,0x80|0x29,0x00);Gdram_Write_Word(cur_x,cur_y+4,0x80|0x2f,0x00);}
}
//*********************************************************************************

⌨️ 快捷键说明

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