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

📄 lcd12864.h

📁 51板的常用程序
💻 H
字号:
#ifndef __LCD_12864_H__
#define __LCD_12864_H__

/************常用操作命令和参数定义********/
#define DISPON    0x3f    //display on
#define DISPOFF   0x3e    //display off
#define DISPFIRST 0xc0    //define the first row
#define SETY      0xb8    //define page address
#define SETX      0x40    //define column address
//#define SIZE      0x500

/*以下定义与硬件电路设计有关,参考Mini51.H*/
#define LCD_LCW  M51_LCD12864_LCW
#define LCD_LDW  M51_LCD12864_LDW
#define LCD_LCR  M51_LCD12864_LCR
#define LCD_LDR  M51_LCD12864_LDR
#define LCD_RCW  M51_LCD12864_RCW
#define LCD_RDW  M51_LCD12864_RDW
#define LCD_RCR  M51_LCD12864_RCR
#define LCD_RDR  M51_LCD12864_RDR

void loop_lcd12864_is_busy(uchar right)
{
  uchar tmp,counter=0;
  do
  {
  	if(right) tmp = LCD_RCR;
  	else tmp = LCD_LCR;	
	if(counter++>50) break;//超时跳出
  }
  while ((tmp|0x7f)==0xff);	 
}

void lcd_cmd_wr(uchar cmdcode,uchar right)
{
  loop_lcd12864_is_busy(right);
  if(right) LCD_RCW = cmdcode;
  else LCD_LCW = cmdcode;  
}

void lcd_data_wr(uchar ldata,uchar right)
{
  loop_lcd12864_is_busy(right);
  if(right) LCD_RDW = ldata;
  else LCD_LDW = ldata;
}



void lcd12864_init(void)
{
  lcd_cmd_wr(DISPON,0);
  lcd_cmd_wr(DISPFIRST,0);
  lcd_cmd_wr(SETY,0);
  lcd_cmd_wr(SETX,0);
  lcd_cmd_wr(DISPON,1);
  lcd_cmd_wr(DISPFIRST,1);
  lcd_cmd_wr(SETY,1);
  lcd_cmd_wr(SETX,1);
}


void lcd12864_clr(void)
{
	uchar i,j;
	for(i=0;i<8;i++)
	{
		lcd_cmd_wr(SETY+i,0);
		lcd_cmd_wr(SETX,0);
		lcd_cmd_wr(SETY+i,1);
		lcd_cmd_wr(SETX,1);	

		for(j=0;j<64;j++)
		{
			lcd_data_wr(0,0);
			lcd_data_wr(0,1);
		}
	}
}

//16*16点阵汉字显示函数
//xyns:坐标x,y,字数n,字符串s,左上角坐标为(0,0)
void lcd12864_put_xyns(uchar x,uchar y,uchar n,uchar *str)
{
    uchar i,j;
    for(i=0;i<n;i++)
    {
        if(x>7)
        {
            y ++;
            x = 0;
        }
        
        if(x<4)
        {
            lcd_cmd_wr(SETY+2*y,0);
            lcd_cmd_wr(SETX+16*x,0);
            for(j=0;j<16;j++)
                lcd_data_wr(str[j+i*32],0);
            lcd_cmd_wr(SETY+2*y+1,0);
            lcd_cmd_wr(SETX+16*x,0);
            for(j=16;j<32;j++)
                lcd_data_wr(str[j+i*32],0);
        }
        else
        {
            lcd_cmd_wr(SETY+2*y,1);
            lcd_cmd_wr(SETX+16*(x-4),1);
            for(j=0;j<16;j++)
                lcd_data_wr(str[j+i*32],1);
            lcd_cmd_wr(SETY+2*y+1,1);
            lcd_cmd_wr(SETX+16*(x-4),1);
            for(j=16;j<32;j++)
                lcd_data_wr(str[j+i*32],1);
        }
        x ++;
    }
}

//在x,y处写1点
void lcd12864_set_xy(uchar x,uchar y)
{
	uchar dat;
	if(x>=128)x=127;
	if(y>=64)y=63;
	y = 63-y;
	dat=1<<(y%8);
	y=y/8;

	if(x>63)
	{
		x=x-64;
		lcd_cmd_wr(SETX+x,1);
		lcd_cmd_wr(SETY+y,1);
		loop_lcd12864_is_busy(1);
		LCD_RDW = dat;
	}
	else
	{		
		lcd_cmd_wr(SETX+x,0);
		lcd_cmd_wr(SETY+y,0);
		loop_lcd12864_is_busy(0);
		LCD_LDW = dat;	
	}

} 

/*图片写入函数*/
void lcd12864_put_xywhb(uchar x,uchar y,uchar w,uchar h,uchar *bmp)
{
  	uchar i,j;
  	h = h/8;
  	for(i=0;i<h;i++)
  	{
	   		lcd_cmd_wr(SETY+y+i,0);
		   	lcd_cmd_wr(SETX+x,0);
		   	for(j=0;j<w-64;j++)
		     	lcd_data_wr(bmp[128*i+j],0);

	   		lcd_cmd_wr(SETY+y+i,1);
		   	lcd_cmd_wr(SETX+x,1);
		   	for(j=64;j<w;j++)
		     	lcd_data_wr(bmp[128*i+j],1);
	  }
}
/*命令滚屏函数*/
/*
void lcd_rol()
{
  uchar i;
  for(i=0;i<64;i++)
  {
    lcd_cmd_wr(DISPFIRST+i,0);
 	lcd_cmd_wr(DISPFIRST+i,1);
 	delay(300);//延时实现滚屏效果
  }
}*/
#endif

⌨️ 快捷键说明

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