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

📄 lcd.c

📁 在cygnal020开发板下的lcd(菜单)部分显示程序设计
💻 C
📖 第 1 页 / 共 3 页
字号:
// 输入参数: 无
// 输出参数: Push_L Push_R Push_E Push_C键标志位
// 返回值  : 无
void  Key_Interrupt (void) interrupt 1 using 1    //10ms扫描一次
 {	   
       EA=0;
       ET0=0;
	   TR0=0;
	   TL0 = 0xA0;
	   TH0 = 0xC1; 
       if(Button_P==0)	  
	         {	 DelayX10ms (12);  
		          if(Button_P==0)	{ Push_P=1;Push_H=0; Push_A=0; Push_S=0;Push_U=0; Push_D=0;Push_R=0;}
	          }
	    else if(Button_D==0)	  
	              {	  DelayX10ms(12);  
		              if(Button_D==0)	{ Push_D=1;Push_H=0; Push_A=0; Push_S=0;Push_U=0; Push_D=0;Push_R=0;}
	               }
		       else if(Button_U==0)	  
	              {	  DelayX10ms(12);  
		              if(Button_U==0)	{Push_U=1;Push_H=0; Push_A=0; Push_S=0;Push_U=0; Push_D=0;Push_R=0;}
	               }
				    else if(Button_U==0)	  
	                 {	  DelayX10ms(12);  
		              if(Button_D==0)	{Push_P=1;Push_H=0; Push_A=0; Push_S=0;Push_U=0; Push_D=0;Push_R=0;}
	                  }

					     else if(Button_U==0)	  
				               {	  DelayX10ms(12);  
					                  if(Button_E==0)	{Push_P=1;Push_H=0; Push_A=0; Push_S=0;Push_U=0; Push_D=0;Push_R=0;}
				                }
					         else	if(Button_R==0)	  
					                  {	  DelayX10ms(12);  
						                  if(Button_C==0)	{ Push_P=1;Push_H=0; Push_A=0; Push_S=0;Push_U=0; Push_D=0;Push_R=0;}
					                   }
       EA=1;
       ET0=1;
	   TR0=1;
 }
/***************************结束 键盘中断处理 ********************************/

 
  /*******************************开始 延时函数**********************************************************************/
// 函数介绍: 延时10ms
// 输入参数: Delay_Time10 *10ms(8位16进制数 延时时间)
// 输出参数: 无
// 返回值 :  无
void  DelayX10ms (UINT8 Delay_Time10) 
  { UINT8 t1,t2,t3;
     for(t1=0;t1<Delay_Time10;t1++)
	   for(t2=0;t2<100;t2++)
	     for(t3=0;t3<120;t3++)
			  ;
   }
// 函数介绍: 延时50us
// 输入参数: Delay_Time10 *50us(8位16进制数 延时时间)
// 输出参数: 无
// 返回值 :  无
void  DelayX50us (UINT8 Delay_Time50)
    {	UINT8 t1,t2;
       for(t1=0;t1<Delay_Time50;t1++)
      for(t2=0;t2<50;t2++)
			 ;
   }
/*******************************结束 延时函数**********************************************************************/
  
/***************************开始 初始化  LCD ********************************/
// 函数介+绍: 送lcd指令
// 输入参数: Lcd_Inst (8位16进制数送入控制指令)
// 输出参数: 无
// 返回值 :  无
void  Send_Instr (UINT8 Lcd_Inst)
    {  
	  Lcd_Port =0xFF;
      E  = 1 ;  
	  RW = 1;
	  RS = 0;
	  while(Busy_bit!=0)  ;	
	   E  = 0 ;
	   DelayX50us (5) ;
       RS=0;
       RW=0;
	   Lcd_Port=Lcd_Inst;
	   E=1;
	   DelayX50us (5) ;
	   E  = 0;
       Lcd_Port=0xff;
	 }
/////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 送lcd数据
// 输入参数: Lcd_Data (8位16进制数送入的显示数据)
// 输出参数: 无
// 返回值 :  无
void  Send_Data (UINT8 Lcd_Data)     
	 { 
	    Lcd_Port = 0xFF;
        RS = 0;
        RW = 1;
	    E  = 1 ;
	    while(Busy_bit!=0)  ; 
	    E  = 0 ;
        DelayX50us (5) ;	    
		RS = 1;
        RW = 0;
		Lcd_Port = Lcd_Data;
	    E  = 1;
        DelayX50us (5) ;
	    E  = 0;
        Lcd_Port=0xff;
	 }
/////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 送行lcd数据
// 输入参数: line (8位16进制数送入的显示行位置)
//            x	,y(8位16进制数送入的显示数组位置)
// 输出参数: 无
// 返回值 :  无
void   Send_Line_Data(UINT8 line,UINT8 x,UINT8 y)     
{   UINT8  i,j;
    Send_Instr (0x30);	//功能设定 :反显
   	DelayX50us (5);
	Send_Instr (line);	
    DelayX50us (2) ;
    for(i=0;i<Menu_Word_Num;i++)
	  {	   j=Menu_Data[x][y][i];
	       Send_Data (j);
		   DelayX50us (2);
	   }
 }
/////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 送34行lcd指定位置数据
// 输入参数: 指定列  y
//            指定行列数组b[][Menu_Row_Num+1][Menu_Word_Num]
// 输出参数: 无
// 返回值 :  无
void  Line34_Data(UINT8  Date_Post)
{  Send_Instr (0x30);	    
   DelayX50us (2); 
   Send_Instr(Date_Post);
   DelayX10ms (1);
   Send_Data (Conver_Fdata3); 
   DelayX50us (3);
   Send_Data (Conver_Fdata2); 
   DelayX50us (3);
   Send_Data (Conver_Fdata1); 
   DelayX50us (3);
}
/////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 清显示屏同时位指针归位
// 输入参数: 无
// 输出参数: 无
// 返回值 :  无
void  Clr_Disply(void)
{     Send_Instr (0x30);	//功能设定 :反显
   	  DelayX50us (5);
     Send_Instr(0x01);	//清除显示:AC=00H
     DelayX10ms (1) ;
	 Send_Instr(0x80);	//设定DDRAM位置:AC=80H
     DelayX50us (2) ;
 }
  */

/////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 指定行反显
// 输入参数: Revers_Line    (8位16进制数LCD反显行位置)
//			  Revers_Bit      (全局变量 1位 反显为1  无反显为0 )
// 返回值 :  无
void  Lcd_Revers(UINT8 Revers_Line)
  {	  if(Revers_Bit==1)
       { Send_Instr (0x34);		//功能设定 :扩充指令
         DelayX50us (2) ;
         Send_Instr (Revers_Address);	//功能设定 :清反显
   	     DelayX50us (2);
	     Revers_Address=Revers_Line;
         Send_Instr (0x30);	//功能设定 :反显
   	     DelayX50us (5);
		 Revers_Bit=0;
        }
	   else
        { Send_Instr (0x34);		//功能设定 :扩充指令
          DelayX50us (2) ;
		  Send_Instr (Revers_Line);	//功能设定 :反显
   	      DelayX50us (2);
	      Revers_Address=Revers_Line;
          Send_Instr(0x30);	//功能设定 :反显
   	      DelayX50us (5);
		  Revers_Bit=1	;
		 }

  }

 /////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 清绘图函数
// 输入参数: Y_Position    (8位16进制数LCD绘图y位置)
//			  X_Position    (8位16进制数LCD绘图x位置) 
//			  H_Data		(8位16进制数LCD绘图高八位数据)
//			  L_Data		(8位16进制数LCD绘图低八位数据)
// 返回值 :  无


void  Clear_Draw_Screen()
{   UINT8 i,j;	
    Send_Instr (0x30);	    //功能设定 :绘图开
    DelayX50us (2);  
   for(j=0x80;j<=0x9f;j++)
{	for (i=0x80;i<=0x8f;i++)
	{Send_Instr (0x34);	    //功能设定 :绘图开
    DelayX50us (3);
	Send_Instr (j);	    //功能设定 :设定垂直位图范围
    DelayX50us (3);
	Send_Instr (i);	    //功能设定 :设定水平位图范围
    DelayX50us (3);	
	Send_Instr (0x30);	    //功能设定 :绘图开
    DelayX50us (3);  
    Send_Data (0); 
    DelayX50us (3);
	Send_Data (0); 
    DelayX50us (3);
	}
	}
	Send_Instr (0x36);	    //功能设定 :绘图开
    DelayX50us (3);
}

/////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 绘图函数
// 输入参数: Y_Position    (8位16进制数LCD绘图y位置)
//			  X_Position    (8位16进制数LCD绘图x位置) 
//			  H_Data		(8位16进制数LCD绘图高八位数据)
//			  L_Data		(8位16进制数LCD绘图低八位数据)
// 返回值 :  无


void  Draw_Screen(UINT8 Y_Position,UINT8 X_Position,UINT8 H_Data,UINT8 L_Data)
{  	
    Send_Instr (0x30);	    //功能设定 :绘图开
     DelayX50us (2); 
	Send_Instr (0x34);	    //功能设定 :绘图开
    DelayX50us (3);
	Send_Instr (Y_Position);	    //功能设定 :设定垂直位图范围
    DelayX50us (3);
	Send_Instr (X_Position);	    //功能设定 :设定水平位图范围
    DelayX50us (3);	
	Send_Instr (0x30);	    //功能设定 :绘图开
    DelayX50us (3);  
    Send_Data (H_Data); 
    DelayX50us (3);
	Send_Data (L_Data); 
    DelayX50us (3);
	Send_Instr (0x36);	    //功能设定 :绘图开
    DelayX50us (3);
}

/////////////////////////////////////////////////////////////////////////////////////////////
// 函数介绍: 初始化LCD的显示、游标、指针
// 输入参数: 无
// 输出参数: 无
// 返回值  : 无
void  Init_Lcd (void) 
  {     
	   Revers_Bit=0;
       Send_Instr(0x30);	//功能设定 : 8BIT 基本指令
       DelayX50us (2) ;
	   Send_Instr(0x01);	//清除显示:AC=00H
       DelayX10ms (1) ;
       Send_Instr(0x10);	//位置归位:AC=00H
       DelayX50us (2) ;

⌨️ 快捷键说明

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