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

📄 lcd.c

📁 240128液晶底层驱动以及键盘操作编写菜单
💻 C
📖 第 1 页 / 共 5 页
字号:
0xFE,0x0F,0xFF,0xE0,0x00,0x07,0x00,0x00,0x00,0x0E,0xE7,0x60,0x00,0x00,0x00,0x10,
0x0C,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0xE7,0xC0,0x00,0x00,0x00,0x07,0x1C,0x00,
0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0x00,0x00,0x00,0x01,0xE7,0x00,0x00,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,
0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
0x00,0x00,0x00,0x00,0xE7,0x00,0x00,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x0F,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
0x00,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x0F,0xBF,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x01,0xFF,
0xFF,0xFF,0xC0,0x00,0x07,0xFE,0x0F,0xFE,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x01,0xF0,0x00,0xFF,
0x80,0x00,0x07,0xF8,0x03,0xFC,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x01,0x00,0x00,0x0F,0x00,0x00,
0x01,0xC0,0x00,0xFC,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x10,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//////////////////延时函数1///////////////////////////////////////////////
void LCD_NOP(void)
{
  uchar i;
  for(i=0;i<5;i++); 
}
//////////////////延时函数2///////////////////////////////////////////////
void Delay(int x)
{
  int i,j;
  for(j=0;j<x;j++)
   {
    for(i=0;i<250;i++);
   }
}
//////////////////LCD写命令字函数 ///////////////////////////////////////
void LCD_Write_Com(uchar CMD)
{ 
 // Check_Busy();///检测忙信号////
  PORTB=CMD;      /// 将命令字符送往数据口 ///
  CS=0;
  RAD=1;
  RS=0; 
  WRT=0;
  LCD_NOP();
  WRT=1;
  RS=1;
  CS=1;
}
//////////////LCD写数据函数 /////////////////////////////////////////////////
void LCD_Write_Dat(uchar x_data)
{ 
 // Check_Busy();///检测忙信号////
  PORTB=x_data;      /// 将数据字符送往数据口 ///
  CS=0;
  RAD=1;
  RS=1; 
  WRT=0;
  LCD_NOP();
  WRT=1;
  RS=1;
  CS=1;
}
//////////////LCD读取数据函数 /////////////////////////////////////////////////
uchar LCD_Read_Dat(void)
{ 
  uchar x_data;
 // Check_Busy();///检测忙信号////
  PORTB=0xff;    /// 将数据0xff送往数据口 ///
  CS=0;  
  WRT=1;
  RS=0;
  RAD=0;
  LCD_NOP();
  x_data=PORTB; 
  RS=1;
  RAD=1;
  CS=1;
  return(x_data);
}
//////////////LCD设定功能函数 /////////////////////////////////////////////////
void LCD_Write_Funtion(uchar CMD,uchar x_data)
{ 
  LCD_Write_Com(CMD);
  LCD_Write_Com(x_data);
}

//////////////LCD读取缓冲器函数 /////////////////////////////////////////////////
uchar LCD_Read_Funtion(uchar CMD)
{ 
  LCD_Write_Com(CMD);
  return(LCD_Read_Dat());
}

//////////////LCD参数初始化函数 /////////////////////////////////////////////////
void LCD_Init(void)
{
 //初始化参数表:前面的是寄存器地址,后面的是参数
 //LCD_Write_Funtion(0x00,0xCD);//LCD基本显示功能设定 文本模式
 LCD_Write_Funtion(0x00,0xCC);//LCD基本显示功能设定 文本模式
 LCD_Write_Funtion(0x01,0xF0);//中断准位(高电平) / 设定系统频率8MHz
 LCD_Write_Funtion(0x02,0x10);//LCD内存读写速度与功能设定(读字形ROM)
 LCD_Write_Funtion(0x03,0x80);//LCD特殊显示功能
// LCD_Write_Funtion(0x10,0x6B);//LCD基本显示功能设定 2
 LCD_Write_Funtion(0x10,0x4B);//LCD基本显示功能设定 光标不自动移位
 LCD_Write_Funtion(0x11,0x20);//光标高度和行距设定
 LCD_Write_Funtion(0x12,0x91) ;//显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
 LCD_Write_Funtion(0x20,0x1E) ;//实际显示窗口垂直结束地址(LCD屏的分辨率30*8=240)
 LCD_Write_Funtion(0x30,0x7F) ;//实际显示窗口水平结束地址(128)
 LCD_Write_Funtion(0x40,0x00) ;//实际显示窗口垂直起始地址
 LCD_Write_Funtion(0x50,0x00) ;//实际显示窗口水平起始地址
 LCD_Write_Funtion(0x21,0x1E) ;//工作区窗口垂直结束地址(用户指定的显示窗口)
 LCD_Write_Funtion(0x31,0x7F) ;//工作区窗口水平结束地址
 LCD_Write_Funtion(0x41,0x00) ;//工作区窗口垂直起始地址
 LCD_Write_Funtion(0x51,0x00) ;//工作区窗口水平起始地址
 LCD_Write_Funtion(0x60,0x00) ;//地址定位
 LCD_Write_Funtion(0x61,0x00) ;//
 LCD_Write_Funtion(0x70,0x00) ;//
 LCD_Write_Funtion(0x71,0x00) ;//
 LCD_Write_Funtion(0x72,0x00) ;//
 LCD_Write_Funtion(0x80,0x35) ;//光标闪烁时间
 LCD_Write_Funtion(0x81,0x04) ;//保留
 LCD_Write_Funtion(0x91,0x00) ;//保留
 LCD_Write_Funtion(0x90,0x10) ;//值太大屏幕会闪烁
 LCD_Write_Funtion(0xA0,0x11) ;//键、触摸屏、光标行列状态
 LCD_Write_Funtion(0xA1,0x00) ;
 LCD_Write_Funtion(0xA2,0x00) ;
 LCD_Write_Funtion(0xA3,0x00) ;
 LCD_Write_Funtion(0xB0,0x27) ;
 LCD_Write_Funtion(0xB1,0xEF) ;
 LCD_Write_Funtion(0xC0,0x00) ;
 LCD_Write_Funtion(0xC1,0x0A) ;
 LCD_Write_Funtion(0xC8,0x80) ;
 LCD_Write_Funtion(0xC9,0x80) ;
 LCD_Write_Funtion(0xCA,0x00) ;
 LCD_Write_Funtion(0xD0,0x80) ;
 LCD_Write_Funtion(0xE0,0x00) ;//自动写此寄存器的数据到DDRAM(图形模式有效)
 LCD_Write_Funtion(0xF0,0xA0) ;//字符字体控制
 LCD_Write_Funtion(0xF1,0x0F) ;//字符点阵大小控制
///39//
}
//////////清除文本层显示数据函数 /////文本层清屏//////////////
void LCD_Clear_Text(void)
{
  uchar i,j;
  LCD_Write_Funtion(0x00,0xCD);//文本模式
  LCD_Write_Funtion(0x10,0x61);//写光标bu自动移位//光标不显示//光标不闪烁//自适应宽度//
  LCD_Write_Funtion(0xF0,0xA0);//ASII区块0//
  for(i=0;i<8;i++)/////共8行文本//////
   {
    for(j=0;j<30;j++)////水平30个字节宽//
 	{	 
	 LCD_Write_Funtion(0x60,j);//地址定位
     LCD_Write_Funtion(0x70,16*i);//地址定位
     LCD_Write_Dat(0x20);////连续写入8X30个空格的ASII码//	
	}       
   }
} 
//////////清除图形层显示数据函数 ///////图形层清屏////////////
void LCD_Clear_Graphics(void)
{
  uchar i,j;
  LCD_Write_Funtion(0x00,0xC5); //图形模式
  LCD_Write_Funtion(0x10,0x61);//写光标bu自动移位//光标不显示//光标不闪烁//自适应宽度//
  LCD_Write_Funtion(0x12,0x91);//显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
  for(i=0;i<128;i++)/////垂直共128行//////
   {
    for(j=0;j<30;j++)////水平30个字节宽//
 	{
     LCD_Write_Funtion(0x60,j);//地址定位
     LCD_Write_Funtion(0x70,i);//地址定位
	 LCD_Write_Dat(0x00); ////每页连续写入128X30个数据/////    	
	} 	    
   }  
}

//////////////////写汉字//字符串函数 /////////////////////////////////
void LCD_Write_word(uchar LCM_X,uchar LCM_Y,uchar *ptr,bit g)//LCM_X的范围是0-29//写汉字时应该为偶数,写字符串时无限制/////////////////
{                                                ////////LCM_Y的范围是0-127///////
  uchar i=0;
  LCD_Write_Funtion(0x00,0xCD);//文本模式
  if(g==0)  LCD_Write_Funtion(0x10,0x69);//写光标自动移位//光标不显示//光标不闪烁//自适应宽度//
   else     LCD_Write_Funtion(0x10,0x6f);//写光标自动移位//光标显示//光标闪烁//自适应宽度//
  LCD_Write_Funtion(0xF0,0xA0);//ASII区块0//
  LCD_Write_Funtion(0x60,LCM_X);//地址定位
  LCD_Write_Funtion(0x70,LCM_Y);//地址定位  
  while (*ptr != '%')////利用数组最后有空格作为信息结束的判断/////
   { 
     if((LCM_X+i)>=30)
	 {
	   LCM_X=0;
	   LCM_Y=LCM_Y+16;
	   i=0;
	   LCD_Write_Funtion(0x60,LCM_X) ;//地址定位
       LCD_Write_Funtion(0x70,LCM_Y) ;//地址定位  
	 }	
    LCD_Write_Dat(*ptr++);
	i++;    
   }
}
//////////////////横向写不规则字符串函数 /////////////////////////////////
void H_Write_abnormity_string(uchar LCM_X,uchar LCM_Y,uchar x_data,uchar number)//LCM_X的范围是0-29//写汉字时应该为偶数,写字符串时无限制/////////////////
{                     ////////LCM_Y的范围是0-127/////uchar x_data是不规则字符的ASCII码////uchar number是不规则字符的个数//
  uchar j;
  uchar i=0;
  LCD_Write_Funtion(0x00,0xCD);//文本模式
  LCD_Write_Funtion(0x10,0x69);//写光标自动移位//光标不显示//光标不闪烁//自适应宽度//
  LCD_Write_Funtion(0xF0,0xA4);//ASCII区块0////所有输入的数据都以ASCII解码////
  LCD_Write_Funtion(0x60,LCM_X);//地址定位
  LCD_Write_Funtion(0x70,LCM_Y);//地址定位  
 for(j=0;j<number;j++)////利用数组最后有空格作为信息结束的判断/////
   { 
     if((LCM_X+i)>=30)
	 {
	   LCM_X=0;

⌨️ 快捷键说明

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