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

📄 display.c

📁 sed1335液晶驱动器源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*-----------------------------------------------------------------------/
函数名称:lcd_ascii_16x24()
功能:显示ascii,大小为16×24
参数:显示的起始位置、显示的数字、移动的位数、左半部字模存储区、
      右半部字模存储区
返回值:无
/-----------------------------------------------------------------------*/
void lcd_ascii_16x24(unsigned char x,unsigned char y,unsigned char num,
     const unsigned char *zimo,unsigned char bit_move,unsigned char *left_mode,
     unsigned char *right_mode,unsigned int page)
{
     unsigned int i;
     unsigned char m;
     unsigned char k;
     if(bit_move==0){
     	  for(m=0;m<2;m++){
     	  	  lcd_start(x+m+page,y,CSRDOWN);
     	  	  LCD_WRITE_COM(MWRITE);
     	  	  sei();
     	  	  for(i=24*m;i<24*(m+1);i++){
     	  	  	  while(LCD_READ_busy()==0x00);
		     	      while(LCD_READ_busy()==0x40);
     	  	  	  LCD_WRITE_DATA(~zimo[i+48*num]);
     	  	  	}
     	  	  cli();
     	  	}
     	}
     else{
       for(m=0;m<2;m++){
          k=0;
          for(i=m*24;i<24*(m+1);i++){
          	  left_mode[k++]=zimo[i+48*num];
          	}
          lcd_move_left_yin(left_mode,right_mode,24,bit_move);
	     	  lcd_start(x+page+m-1,y,CSRDOWN);
	     	  LCD_WRITE_COM(MWRITE);
	     	  for(k=0;k<24;k++){
	           while(LCD_READ_busy()==0x00);
		     	   while(LCD_READ_busy()==0x40);
	           LCD_WRITE_DATA(~left_mode[k]); 
	         }
	        lcd_start(x+page+m,y,CSRDOWN);
	     	  LCD_WRITE_COM(MWRITE);
	     	  for(k=0;k<24;k++){
	          while(LCD_READ_busy()==0x00);
		     	  while(LCD_READ_busy()==0x40);
	          LCD_WRITE_DATA(~right_mode[k]); 
	         }
	        if(page==first_page){
	           page=secon_page;
	         }
	        else if(page==secon_page){
	           page=first_page;
	         }
        }
     }
}
/*-----------------------------------------------------------------------/
函数名称:lcd_ascii_16x16()
功能:显示ascii,大小为16×16
参数:显示的起始位置、显示的数字、移动的位数、左半部字模存储区、
      右半部字模存储区
返回值:无
/-----------------------------------------------------------------------*/
void lcd_ascii_16x16(unsigned char x,unsigned char y,unsigned char num,
     const unsigned char *zimo,unsigned char bit_move,unsigned char *left_mode,
     unsigned char *right_mode,unsigned int page)
{
     unsigned int i;
     unsigned char m;
     unsigned char k;
     if(bit_move==0){
     	  for(m=0;m<2;m++){
     	  	  lcd_start(x+m+page,y,CSRDOWN);
     	  	  LCD_WRITE_COM(MWRITE);
     	  	  sei();
     	  	  for(i=16*m;i<16*(m+1);i++){
     	  	  	  while(LCD_READ_busy()==0x00);
		     	      while(LCD_READ_busy()==0x40);
     	  	  	  LCD_WRITE_DATA(~zimo[i+32*num]);
     	  	  	}
     	  	  cli();
     	  	}
     	}
     else{
       for(m=0;m<2;m++){
          k=0;
          for(i=m*16;i<16*(m+1);i++){
          	  left_mode[k++]=zimo[i+32*num];
          	}
          lcd_move_left_yin(left_mode,right_mode,16,bit_move);
	     	  lcd_start(x+page+m-1,y,CSRDOWN);
	     	  LCD_WRITE_COM(MWRITE);
	     	  for(k=0;k<16;k++){
	           while(LCD_READ_busy()==0x00);
		     	   while(LCD_READ_busy()==0x40);
	           LCD_WRITE_DATA(~left_mode[k]); 
	         }
	        lcd_start(x+page+m,y,CSRDOWN);
	     	  LCD_WRITE_COM(MWRITE);
	     	  for(k=0;k<16;k++){
	          while(LCD_READ_busy()==0x00);
		     	  while(LCD_READ_busy()==0x40);
	          LCD_WRITE_DATA(~right_mode[k]); 
	         }
	        if(page==first_page){
	           page=secon_page;
	         }
	        else if(page==secon_page){
	           page=first_page;
	         }
        }
     }
}
/*-----------------------------------------------------------------------/
函数名称:lcd_bmp()
功能:显示图形,大小为col×row
参数:显示的起始位置、图形所占列数、图形所占行数、显示的汉字个数、字模地址、
      移动的位数、左半部字模存储区、右半部字模存储区
返回值:无
/-----------------------------------------------------------------------*/
void lcd_bmp(unsigned char bmp_x,unsigned char bmp_y,unsigned char col,unsigned char row,
  unsigned char num,const unsigned char *zimo,unsigned char bit_move,
  unsigned char *left_mode,unsigned char *right_mode,unsigned int page)
{
     unsigned int bmp_i;
     unsigned int bmp_m;
     unsigned int bmp_k;
     unsigned int bmp_n;
     if(LCD_fault()==0)return;
     for(bmp_n=0;bmp_n<num;bmp_n++){
		     if(bit_move==0){
		     	  for(bmp_m=0;bmp_m<col;bmp_m++){
		     	  	  lcd_start(bmp_x+bmp_m+page+col*bmp_n,bmp_y,CSRDOWN);
		     	  	  LCD_WRITE_COM(MWRITE);
		     	  	  sei();
		     	  	  for(bmp_i=row*bmp_m;bmp_i<row*(bmp_m+1);bmp_i++){
		     	  	  	  while(LCD_READ_busy()==0x00);
		     	          while(LCD_READ_busy()==0x40);
		     	  	  	  LCD_WRITE_DATA(~zimo[bmp_i+col*row*bmp_n]);
		     	  	  	}
		     	  	  cli();
		     	  	}
		     	 }
		      else{
		       for(bmp_m=0;bmp_m<col;bmp_m++){
		          bmp_k=0;
		          for(bmp_i=bmp_m*row;bmp_i<row*(bmp_m+1);bmp_i++){
		          	  left_mode[bmp_k++]=zimo[bmp_i+col*row*bmp_n];
		          	}
		          lcd_move_left_yin(left_mode,right_mode,row,bit_move);
			     	  lcd_start(bmp_x+page+col*bmp_n+bmp_m-1,bmp_y,CSRDOWN);
			     	  LCD_WRITE_COM(MWRITE);
			     	  sei();
			     	  for(bmp_k=0;bmp_k<row;bmp_k++){
			     	  	 while(LCD_READ_busy()==0x00);
		     	       while(LCD_READ_busy()==0x40);
			           LCD_WRITE_DATA(~left_mode[bmp_k]); 
			         }
			        cli();
			        lcd_start(bmp_x+page+bmp_m+col*bmp_n,bmp_y,CSRDOWN);
			     	  LCD_WRITE_COM(MWRITE);
			     	  sei();
			     	  for(bmp_k=0;bmp_k<row;bmp_k++){
			     	  	LCD_READ_idel_timeout();
		     	  	  LCD_READ_busy_timeout();
			          LCD_WRITE_DATA(~right_mode[bmp_k]); 
			         }
			        cli();
			        if(page==first_page){
			           page=secon_page;
			         }
			        else if(page==secon_page){
			           page=first_page;
			         }
		        }
		      }
     }
}
/*-----------------------------------------------------------------------/
函数名称:lcd_ascii_string()
功能:显示ascii字符串,大小为8×16或16x32
参数:显示的起始位置、显示的字符串、移动的位数、字符类型、显示的层数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_ascii_string(unsigned char string_x,unsigned char string_y,const unsigned char *string,
     unsigned char bit_move,unsigned char ch_size,unsigned int page)
{
     unsigned char lcd_i;
     unsigned char ascii_mode;
     if(LCD_fault()==0)return;     
 	   for(lcd_i=0;;lcd_i++){
 	  	  if(string[lcd_i]==0x00){
 	  	  	  return;
 	  	  	}
 	  	  else if((string[lcd_i]==0x2e)||(string[lcd_i]==0x3a)){
 	  	  	  ascii_mode=10;     	  	  	  
 	  	  	}
 	  	  else if(string[lcd_i]==0x2d){
 	  	  	  ascii_mode=11;
 	  	  	}
 	  	  else if((string[lcd_i]==0x20)&&(ch_size==0)){
 	  	  	  ascii_mode=11;
 	  	  	}
 	  	  else if((string[lcd_i]==0x20)&&(ch_size==1)){
 	  	  	  ascii_mode=11;
 	  	  	}
 	  	  else if((string[lcd_i]==0x20)&&(ch_size==2)){
 	  	  	  ascii_mode=10;
 	  	  	}
 	  	  else{
 	  	      ascii_mode=string[lcd_i]-0x30;
 	  	    } 	  	    
 	  	  if(ch_size==0){
 	  	  	  lcd_ascii_16x24(string_x,string_y,ascii_mode,ascii_1624,
 	  	  	          bit_move,zimode_left,zimode_right,page);
 	  	    }
 	  	 if(ch_size==2){
 	  	  	  //lcd_ascii_16x16(string_x,string_y,ascii_mode,ascii_1616_2,
 	  	  	          //bit_move,zimode_left,zimode_right,page);
 	  	    }   
 	  	if((ch_size==0)||(ch_size==2))string_x+=2;
 	  	else if(ch_size==1)string_x+=4;
 	  }
}
/*-----------------------------------------------------------------------/
函数名称:lcd_line()
功能:显示一条直线
参数:显示的起始位置、结束位置
返回值:无
/-----------------------------------------------------------------------*/
void lcd_line(unsigned char start_x,unsigned char start_y,
              unsigned char end_x,unsigned int page)
{
  unsigned char i;
  unsigned int temp;
	unsigned char hi,lo;
	temp=start_y*AP+start_x+page;
	hi=(unsigned char)(temp>>8);
	lo=(unsigned char)temp;
	LCD_WRITE_COM(CSRRGT);
	LCD_WRITE_COM(CSRW);
	LCD_WRITE_DATA(lo);
	LCD_WRITE_DATA(hi);
	LCD_WRITE_COM(MWRITE);
	for(i=0;i<end_x;i++){
		 LCD_WRITE_DATA(0xff);
	 }
}
/*-----------------------------------------------------------------------/
函数名称:lcd_back()
功能:显示背景
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_back(void)
{
	if(LCD_fault()==0)return;
  lcd_bmp(9,5,24,28,1,zgzq_w,0,zimode_left,zimode_right,secon_page);//显示中国重汽
  lcd_bmp(0,28,6,118,1,volt,0,zimode_left,zimode_right,first_page);//显示电压
  lcd_bmp(34,24,6,121,1,oil,0,zimode_left,zimode_right,secon_page);//显示油压
  lcd_bmp(35,159,5,24,1,km,4,zimode_left,zimode_right,secon_page);//km
  lcd_line(0,146,40,secon_page);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_vol_indi()
功能:显示油压、电压指示
参数:起始位置,起始刻度、结束刻度、显示的层数
返回值:
/-----------------------------------------------------------------------*/
void lcd_vol_indi(unsigned char x,unsigned char y,unsigned char
          start_num, unsigned char end_num,unsigned int page)
             
{
   unsigned int temp;
	 unsigned char hi,lo;
	 char indi_m;
	 char indi_i;
	 if(LCD_fault()==0)return;
	 if(start_num<end_num){
	   for(indi_m=start_num;indi_m<end_num;indi_m++){
					temp=(y-indi_m)*AP+x+page;				
					hi=(unsigned char)(temp>>8);
					lo=(unsigned char)temp;
					LCD_WRITE_COM(CSRRGT);
					LCD_WRITE_COM(CSRW);
					LCD_WRITE_DATA(lo);
					LCD_WRITE_DATA(hi);
					LCD_WRITE_COM(MWRITE);
					sei();
					for(indi_i=0;indi_i<5;indi_i++){
						 while(LCD_READ_busy()==0x00);
		     	   while(LCD_READ_busy()==0x40);
						 LCD_WRITE_DATA(~vo_indi_fill[(98-indi_m)*5+indi_i]);
					 }
					cli();
	    }
    }
   else if(start_num>end_num){
	   for(indi_m=end_num;indi_m<start_num;indi_m++){
				temp=(y-indi_m)*AP+x+page;				
				hi=(unsigned char)(temp>>8);
				lo=(unsigned char)temp;
				LCD_WRITE_COM(CSRRGT);
				LCD_WRITE_COM(CSRW);
				LCD_WRITE_DATA(lo);
				LCD_WRITE_DATA(hi);
				LCD_WRITE_COM(MWRITE);
				sei();
				for(indi_i=0;indi_i<5;indi_i++){
					 while(LCD_READ_busy()==0x00);
		     	 while(LCD_READ_busy()==0x40);
					 LCD_WRITE_DATA(~vo_indi_clr[(98-indi_m)*5+indi_i]);
				 }
				cli();
	   	 }
   }
}
/*-----------------------------------------------------------------------/
函数名称:lcd_oil_indi()
功能:显示油压、电压指示
参数:起始位置,起始刻度、结束刻度、显示的层数
返回值:
/-----------------------------------------------------------------------*/
void lcd_oil_indi(unsigned char oil_x,unsigned char oil_y,unsigned 
     char start_num,unsigned char end_num,unsigned int page)
             
{
   unsigned int temp;
	 unsigned char hi,lo;
	 char indi_m;
	 char indi_i;
	 if(LCD_fault()==0)return;
	 if(start_num<end_num){
	   for(indi_m=start_num;indi_m<end_num;indi_m++){
			  temp=(oil_y-indi_m)*AP+oil_x+page;				
				hi=(unsigned char)(temp>>8);
				lo=(unsigned char)temp;
				LCD_WRITE_COM(CSRRGT);
				LCD_WRITE_COM(CSRW);
				LCD_WRITE_DATA(lo);
				LCD_WRITE_DATA(hi);
				LCD_WRITE_COM(MWRITE);
				sei();
				for(indi_i=0;indi_i<4;indi_i++){
					 while(LCD_READ_busy()==0x00);
		     	 while(LCD_READ_busy()==0x40);
					 LCD_WRITE_DATA(~oil_indi_fill[(98-indi_m)*4+indi_i]);
				 }
				cli();				
	    }
    }
   else if(start_num>end_num){
	   for(indi_m=end_num;indi_m<start_num;indi_m++){
				temp=(oil_y-indi_m)*AP+oil_x+page;				
				hi=(unsigned char)(temp>>8);
				lo=(unsigned char)temp;
				LCD_WRITE_COM(CSRRGT);
				LCD_WRITE_COM(CSRW);
				LCD_WRITE_DATA(lo);
				LCD_WRITE_DATA(hi);
				LCD_WRITE_COM(MWRITE);
				sei();
				for(indi_i=0;indi_i<4;indi_i++){
					 while(LCD_READ_busy()==0x00);
		     	 while(LCD_READ_busy()==0x40);
					 LCD_WRITE_DATA(~oil_indi_clr[(98-indi_m)*4+indi_i]);
				 }
				cli();			
	    }
    }
}
/*-----------------------------------------------------------------------/
函数名称:lcd_failure_cyc()
功能:故障的循环显示
参数:起始故障值、故障缓存区
返回值:返回下一个故障值
/-----------------------------------------------------------------------*/
unsigned char lcd_failure_cyc(unsigned char failure_value,unsigned char *fail)
{
   unsigned char fa_i;
   for(fa_i=failure_value;fa_i<20;fa_i++){
  	   if(fail[fa_i]==1){
   	   	  return fa_i;
   	   	} 
   	}
   return 0; 
}

/*-----------------------------------------------------------------------/
函数名称:lcd_failure()
功能:显示故障
参数:起始位置 故障值 
返回值:
/-----------------------------------------------------------------------*/
void lcd_failure(unsigned char head_x,unsigned char head_y,int failure)
{  
   //lcd_display_OFF(0x56);
   switch  (failure) {
     case   0: //工作正常
         lcd_clr_row(9,38,25,108,first_page);
         //lcd_display_ON(0x56);

⌨️ 快捷键说明

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