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

📄 display.c

📁 89C54构成MC4511锁相环稳定性扫描测试仪器
💻 C
📖 第 1 页 / 共 2 页
字号:
     freholder.hun=bcdmap[out][1];
     freholder.dec=bcdmap[out][2];
     freholder.num=bcdmap[out][3];
	 led_buf_auto_flush();
	 if(++out>41)  out=0;
	}	 
  }
  scanh++;
  if(scanh>1)
   {
    scanh=0;
    if(!auto_scanh)
    {
	 dataout=(out&0x3f)|(dataout&0xc0);
     freholder.tho=bcdmap[out][0];
     freholder.hun=bcdmap[out][1];
     freholder.dec=bcdmap[out][2];
     freholder.num=bcdmap[out][3];
	 led_buf_auto_flush();
	 if(++out>41)  out=0;
	}	 
  }
}

/*********************************************************************
函数原型:void timer1(void)
功    能:中断服务程序
*********************************************************************/
void timer1(void) interrupt 3 using 3
{
  TH1=reload_high1;
  TL1=reload_low1;
  D4=!D4;
  D5=!D5;
}

/*********************************************************************
函数原型:void swtich_power(void)
功    能: 开关RF12伏电源 
*********************************************************************/
void switch_power(void)
{
  if(RF)
  {
   RFOUT=dataout&0x3f;
   if(message_disp)
    {
	 dispdata=0x0f;
     message_disp=!message_disp;
    }; 
   dataout=(RFOUT&0x00)|(dataout&0xc0);
  }
  else 
  {
   dataout=(dataout&0xc0)|RFOUT;
   if(!message_disp)
    message_disp=!message_disp;
  };
  RF=!RF;
  EA=!EA;
}

//主菡数
main()
{
  init_sys();
  TMOD=0x11;
  TCON=0x10;
  TH0=reload_high;
  TL0=reload_low;
  TH1=reload_high1;
  TL1=reload_low1;
  IE=0x82;
  TR1=0;
  ET1=1;
  pulse_control=0; 
  auto_scanl=1;
  auto_scanh=1;
  message_disp=1;
  dataout=dataout&0xc0;
  freholder.tho=bcdmap[0][0];
  freholder.hun=bcdmap[0][1];
  freholder.dec=bcdmap[0][2];
  freholder.num=bcdmap[0][3];
  monitor();
}

/***************************************************************************
菡数原型:void error_message(void)
功    能:显示错误信息"0000"
****************************************************************************/
void error_message(void)
{
  auto_flush=0;
  set_led_buf('8',0,1);
  set_led_buf('8',1,1);
  set_led_buf('8',2,1);
  set_led_buf('8',3,1);
  message_time=5;
  message_flag=1;
}

/***************************************************************************
函数原型:void set_led_buf(uchar c,uchar pos,uchr cnt)
功    能:从显示缓冲区的pos位置开始,用字符c填充cnt个字节
****************************************************************************/
void set_led_buf(uchar c,uchar pos,uchar cnt)
{
 uchar ledbuf_pos;
 auto_flush=0;
 for(ledbuf_pos=pos;cnt>0;cnt--)
   {
    led_buf[ledbuf_pos]=((islower(c))?(toupper(c)):(c));
    ledbuf_pos++;
	if(ledbuf_pos>=4) ledbuf_pos=0;
   }
}

/****************************************************************************
函数原型:void led_buf_auto_flush(void)
功    能:自动刷新显示缓冲区
*****************************************************************************/
void led_buf_auto_flush(void) reentrant
{
  if(isdigit(freholder.tho))
  led_buf[0]=freholder.tho;
  else led_buf[0]=0x0f;
  if(isdigit(freholder.hun))
  led_buf[1]=freholder.hun;
  else led_buf[1]=0x0f;
  if(isdigit(freholder.dec))
  led_buf[2]=freholder.dec;
  else led_buf[2]=0x0f;
  if(isdigit(freholder.num))
  led_buf[3]=freholder.num;
  else led_buf[3]=0x0f;
}

/*****************************************************************************
函数:void set_auto_disp(void)
设置频率
*****************************************************************************/
void set_fre_disp(void)
{
 uchar ccommand;
 uchar data str[4];
 auto_flush=0;
 curfre.tho=freholder.tho;
 curfre.hun=freholder.hun;
 curfre.dec=freholder.dec;
 curfre.num=freholder.num;
 get_str(str,4);
 while(1)
  {
   curfre.tho=str[0];
   curfre.hun=str[1];
   curfre.dec=str[2];
   curfre.num=str[3]; 
   ccommand=get_ch();
   if(isupper(ccommand))
	switch(ccommand)
	{
	 case 'M':if(!compare_fre_disp())
	           {
			   error_message();
			   auto_flush=1;
			   }
			   else auto_flush=1; break;
     case 'F':break;
	}
   if(auto_flush) break;
  }
 led_buf_auto_flush();
}

/****************************************************************************
函数原型:void scan_fre_bufL(void)
功    能:自动刷新显示缓冲区
*****************************************************************************/
void scan_fre_bufL(void)
{
 if(auto_scanh)
  auto_scanl=!auto_scanl;
 else 
  {
   auto_scanh=!auto_scanh;
   auto_scanl=!auto_scanl;
  }
 FLASH=0;
}

/****************************************************************************
函数原型:void scan_fre_bufL(void)
功    能:自动刷新显示缓冲区
*****************************************************************************/
void scan_fre_bufH(void)
{
 if(auto_scanl)
 auto_scanh=!auto_scanh;
 else
  {
   auto_scanl=!auto_scanl;
   auto_scanh=!auto_scanh;
  }
 FLASH=0;
}

/****************************************************************************
函数原型:void fre_outl(void)
功    能:
*****************************************************************************/
void fre_outl(void)
{
 uchar out=0x00;
 dataout=(dataout&0xc0)|(out&0x3f);      //LEDS  999
 freholder.tho=0x0f;
 freholder.hun=bcdmap[0][1];
 freholder.dec=bcdmap[0][2];
 freholder.num=bcdmap[0][3];
 led_buf_auto_flush();
 F=!F;
}

/****************************************************************************
函数原型:void frr_outm(void)
功    能:
*****************************************************************************/
void fre_outm(void)
{
 uchar out=0x13;
 dataout=(dataout&0xc0)|(out&0x3f);      //LEDS  1060
 freholder.tho=bcdmap[19][0];
 freholder.hun=bcdmap[19][1];
 freholder.dec=bcdmap[19][2];
 freholder.num=bcdmap[19][3];
 led_buf_auto_flush();
 F=!F;
}

/****************************************************************************
函数原型:fre_outh(void)
功    能:
*****************************************************************************/
void fre_outh(void)
{
 uchar out=0x26;
 dataout=(dataout&0xc0)|(out&0x3f);      //LEDS   1121
 freholder.tho=bcdmap[38][0];
 freholder.hun=bcdmap[38][1];
 freholder.dec=bcdmap[38][2];
 freholder.num=bcdmap[38][3];
 led_buf_auto_flush();
 F=!F;
}

/****************************************************************************
函数原型:void pulse_switch(void)
功    能:
*****************************************************************************/
void pulse_switch(void)
{
 pulse_control=!pulse_control;
 D0=0;
 D1=0;
 D2=0;
 D3=0;
 D4=D5;
 TR1=!TR1;
}

/****************************************************************************
函数原型:void fre_uph(void)
功    能:
*****************************************************************************/
void fre_up(void)
{
 uchar outup;
 outup=dataout&0x3f;
 if(++outup>41)   outup=0;
 dataout=outup|(dataout&0xc0);
 freholder.tho=bcdmap[outup][0];
 freholder.hun=bcdmap[outup][1];
 freholder.dec=bcdmap[outup][2];
 freholder.num=bcdmap[outup][3];
 led_buf_auto_flush();
}

/****************************************************************************
函数原型:void fre_uph(void)
功    能:
*****************************************************************************/
void fre_down(void)
{
 uchar outdown;
 outdown=dataout&0x3f;
 if(outdown--<=0)  outdown=41;
 dataout=outdown|(dataout&0xc0);
 freholder.tho=bcdmap[outdown][0];
 freholder.hun=bcdmap[outdown][1];
 freholder.dec=bcdmap[outdown][2];
 freholder.num=bcdmap[outdown][3];
 led_buf_auto_flush();
}

/****************************************************************************
函数原型:bit compare_fre_disp(void)
功    能:
*****************************************************************************/
bit compare_fre_disp(void)
{
 uchar compare;
 for(compare=0;compare<41;compare++)
  {
   if((bcdmap[compare][0]==curfre.tho)&&(bcdmap[compare][1]==curfre.hun)&&\
   (bcdmap[compare][2]==curfre.dec)&&(bcdmap[compare][3]==curfre.num))
	  {
	   freholder.tho=curfre.tho;
	   freholder.hun=curfre.hun;
	   freholder.dec=curfre.dec;
	   freholder.num=curfre.num;
	   //TR0=1;
	   auto_flush=1;
       led_buf_auto_flush();
       message_flag=0;
	   dataout=(dataout&0xc0)|(compare&0x3f);
	   return((bit) 1);
      }
  }
 message_flag=1;
 return((bit) 0);
} 

⌨️ 快捷键说明

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