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

📄 lcd.c

📁 电能表源码
💻 C
📖 第 1 页 / 共 2 页
字号:
//
//================================================
void dispoint_font(void)
{ uint8 i;
  for(i=0;i<13;i++)
    { if(curent_dispoint>0)
	    curent_dispoint--;
	  else
	    curent_dispoint=81;
	  if(dis_table[curent_dispoint].typedisp!=0)
	     break;
	} 
}

*/


//================================================
//函数功能:根据指针读出要显示的数据
//
//==============================================
void refreshdisp_formtable(void)
{ uint8 i;
  uint8 xdata *point;
  uint8 temp_type,num_data;
  unsigned char xdata disp_buffer[15];

	CfgLCD(0x84);   				// 开LCD,扫描频率512Hz,分压电阻 70K  
  for(i=0;i<12;i++)
    disp_buffer[i]=0;		// 清显示缓存
  data_addr.word[1]=dis_table[curent_dispoint].data_ID;         //获取数据ID号
  if(addr_from_coreID(0,data_addr.word[1])!=0);
     { data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
       temp_type=(*ID_coretalbpoint[0]).stortype;
     }
  data_addr.word[1]=data_addr.word[1]+dis_table[curent_dispoint].offset;   // 计算偏移量,存放首地址+偏移量
  num_data=dis_table[curent_dispoint].datalong;							   // 取数据的个数
  Read_data(temp_type,num_data);                                           // 获取显示数据
  if(temp_type==FLASH)
    { for(i=0;i<num_data;i++)
	     { if(wr_buff[i]==0xff)
		      wr_buff[i]=0;
		 } 
	}     
  swap_higtlow(wr_buff,num_data);                                           //高低位互换
  for(i=0;i<num_data;i++)  								
     { disp_buffer[2*i+1]=LCD_NNumber[wr_buff[i]&0x0f];						// 放入显示缓存中
	   disp_buffer[2*i+2]=LCD_NNumber[(wr_buff[i]>>4)&0x0f];
	 }
//====================================================================
	 disp_buffer[0]=(disp_buffer[1]>>4)&0x0f;              
	 disp_buffer[1]=((disp_buffer[1]<<4)&0xf0)|((disp_buffer[2]>>4)&0x0f);	 
	 disp_buffer[2]=(disp_buffer[2]<<4)&0xf0;

  for (i=12;i>4;i--)  
	 {disp_buffer[i+1]=disp_buffer[i];}
  for (i=5;i<10;i++)
     {
	  disp_buffer[i]=((disp_buffer[i+1]>>4)&0x0f)|((disp_buffer[i]<<4)&0xf0);
	 }
//	 disp_buffer[11]=0xff;
	 disp_buffer[9]=0x00;
	 disp_buffer[10]=0x0;
	 disp_buffer[8]=disp_buffer[8]&0xf0;
//	 disp_buffer[7]=disp_buffer[7]&0xf0;
	 disp_buffer[5]=disp_buffer[5]&0x0f;

//   for (i=(num_data*2+3);i<13;i++)
//	 disp_buffer[i]=0;
     
  temp_type=dis_table[curent_dispoint].dotflag;     // 小数点
  if((temp_type&0x01)==1)
    { disp_buffer[6]|=BIT4;}		// Y1
  if((temp_type&0x02)==0X02)
    { disp_buffer[4]|=BIT0;}		// Y2
  if((temp_type&0x04)==0X04)
    {disp_buffer[5]|=BIT4;}			// Y3
  if((temp_type&0x08)==0X08)
    {disp_buffer[3]|=BIT0;}			// Y4
  if((temp_type&0x10)==0X10)
    {disp_buffer[2]|=BIT4;}			// Y5
  if((temp_type&0x20)==0X20)
    {disp_buffer[2]|=BIT0;}			// Y6
  if((temp_type&0x40)==0X40)
    { disp_buffer[1]|=BIT4;}		// Y7

/*	
  if(flag_lunxian==0)                                          //无轮显项设置
     num_data=dis_table[curent_dispoint].discode;              //序号
  else
     num_data=point_dipnum;
  disp_buffer[8]=LCD_NNumber[num_data&0x0f];                   
  disp_buffer[9]=LCD_NNumber[(num_data>>4)&0x0f]; 
  disp_buffer[10]=LCD_NNumber[0];
*/
   temp_type=dis_table[curent_dispoint].chaflag_1;     // 特殊标志位1
  if((temp_type&0x01)==1)
    { disp_buffer[11]|=BIT0;}		// x1
  if((temp_type&0x02)==0X02)
    { disp_buffer[10]|=BIT0;}		// x2
  if((temp_type&0x04)==0X04)
    {disp_buffer[9]|=BIT4;}			// x3
  if((temp_type&0x08)==0X08)
    {disp_buffer[9]|=BIT1;}			// x4
  if((temp_type&0x10)==0X10)
    {disp_buffer[9]|=BIT2;}			// x5
  if((temp_type&0x20)==0X20)
    {disp_buffer[9]|=BIT3;}			// x6
  if((temp_type&0x40)==0X40)
    { disp_buffer[9]|=BIT0;}		// x7
  if((temp_type&0x80)==0X80)
    { disp_buffer[8]|=BIT4;}		// x8

   temp_type=dis_table[curent_dispoint].chaflag_2;     // 特殊标志位2
  if((temp_type&0x01)==1)
    { disp_buffer[7]|=BIT4;}		// x9
  if((temp_type&0x02)==0X02)
    { disp_buffer[5]|=BIT6;}		// x10
  if((temp_type&0x10)==0X10)
    {disp_buffer[2]|=BIT2;}			// x13
  if((temp_type&0x20)==0X20)
    {disp_buffer[2]|=BIT3;}			// x14
  if((temp_type&0x40)==0X40)
    { disp_buffer[5]|=BIT5;}		// x15  K
  if((temp_type&0x80)==0X80)
    { disp_buffer[0]|=BIT4;}		// x16 

   temp_type=dis_table[curent_dispoint].chaflag_3;     // 特殊标志位3
  if((temp_type&0x01)==1)
    { disp_buffer[0]|=BIT7;}		// x17
  if((temp_type&0x02)==0X02)
    { disp_buffer[0]|=BIT6;}		// x18
  if((temp_type&0x04)==0X04)
    {disp_buffer[0]|=BIT5;}			// x19 

  if(F_commudiv!=0)
    {disp_buffer[5]|=BIT7;}			// x11   通讯符号显示 COM
  if(battest==1)
    {disp_buffer[2]|=BIT1;}			// x12   电池电压检测报警显示

  for(i=0;i<12;i++)                 // 刷新显示
     {  point=LCD_DISaddr[i];
	   *point=disp_buffer[i];
	 }
	 
}


//=========================================================
//函数功能:显示模块主函数,
//
//=========================================================
void display_mode(void)
{ if(type_dispevent!=idle_envent)                         //如果有显示驱动事件发生,优先处理
     { time_dispdelay=0;              //请显示延时时间
	   switch(type_dispevent)
	      { case keyup_envent:
		             if(station_disp==auto_disp)
		                 { station_disp=key_disp;         //进入按键驱动状态
						    point_begindisp();            //指向显示第一项
                         }
					 else
		                  dispoint_next();      //显示下一项
                     type_dispevent=idle_envent;
					 
		             break;
            /*
			case keyup_envent:
			         dispoint_font();      //显示上一项
					 type_dispevent=idle_envent;
					 station_disp=key_disp;      //进入按键驱动状态
					 break;
			case keydownlong_event:
			         if(flag_startlcddisp==true)       //下翻长按键没1秒刷新一项
					     { flag_startlcddisp=false;
						   dispoint_next(); 
						 }
					 station_disp=key_disp;      //进入按键驱动状态
					 break;
		    case keyuplong_event:
			          if(flag_startlcddisp==true)
					      { flag_startlcddisp=false;
						    dispoint_font(); 
						  }
					  station_disp=key_disp;      //进入按键驱动状态
					  break;
			  */
			default:
			         break;
		  }
		refreshdisp_formtable();
	 }
  else                                                 // 如果无外部事件
     { if(dis_table[curent_dispoint].typedisp==2)      // 即时更新数据
	       refreshdisp_formtable();                    // 更新显示
	   if(flag_startlcddisp==true)
	     { flag_startlcddisp=false;
		   if(station_disp==auto_disp)                 // 如果是在自动显示状态
		      { time_turn++;
			    Read_datafromID(ID_TIMERETUN);
			    //addr_from_coreid(0,ID_TIMERETUN);    //取地址
				//data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;
				//Read_data((*ID_coretalbpoint[0]).stortype,(*ID_coretalbpoint[0]).datalong);
			    if(time_turn>value_hex_from_bcd(wr_buff[0]))                   //轮显显示8秒
				   { time_turn=0;
				     dispoint_next();             // 指向下一项 
				   }
			  }
		   else                                    // 如果在非自动显示状态
		      { time_dispdelay++;                  // 事件延时加
			    if(time_dispdelay>60)
				   { time_dispdelay=0;
                     station_disp=auto_disp;       // 恢复到自动轮显
                     point_begindisp();            // 指向显示第一项
				   }
			  }
           refreshdisp_formtable();                //更新显示
		 }
	 }
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

⌨️ 快捷键说明

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