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

📄 board.c

📁 单片机控制面板程序
💻 C
📖 第 1 页 / 共 5 页
字号:
			  led01=20;//F.OH
              led02=22;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
		  case 7:
		     {
			  led01=26;//F.OU
              led02=22;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }		  
          case 8:
		     {
			  led01=24;//F.ER
              led02=18;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
          case 9:
		     {
			  led01=22;//F.PO
              led02=23;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
          case 10:
		     {
			  led01=24;//F.UA
              led02=26;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
		  case 11:
		     {
			  led01=24;//F.OA
              led02=22;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
          case 12:
		     {
			  led01=21;//F.OL
              led02=22;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
          case 13:
		     {
			  led01=26;//F.UU
              led02=26;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
		  case 14:
		     {
			  led01=25;//F.OS
              led02=22;
              led03=15;
              led04=19;
			  fault_flash_flag=1;
			  break;
			  }
		  default:break;
		 }
		   
}
//=============================================================
//程序说明:1ms子中断
//=============================================================
void T0_PERIOD(void) interrupt 1        //外中断,接收中断子程序
{

      TH0=0xfc;
      TL0=0x66;                  //1ms
//=====================================
      send();//发送程序
//=====================================      
	  light_pro();//点灯程序
//=====================================
//通讯未成功,报故障,其他菜单不响应
//=====================================
	  if(send_success_flag==0)
	     {
		  confirm=0;//通讯不正常时,需要初始化某些参数
		  point_flag=0;
		  high_led_number=4;
          led_pos=0;
		  start_only_once_flag=0;
		  fault_first_flag=0;
		  send_ask_set_flag=0;
		  send_ask_fault_flag=0;
		  fault_enter_flag=0;
		  send_on_kind=0;

          led01=17;//F.EC
          led02=18;
          led03=15;
          led04=19;
	      fault_flash_flag=1;
		 }
	  else//通讯正常后,判断是否存在故障
	     {
//=====================================
//故障代码循环显示程序,当没有模式键按下时
//使出现的所有故障类型循环显示,一旦故障后
//有模式键按下则不显示故障代码
//=====================================
          if(fault_data!=0)
	        {
			if(fault_enter_flag==1)
			 {
			 fault_enter_flag=0;
             if(fault_first_flag==0)//一旦出现故障,没有模式键前提下,不断更新
		      {
			   confirm=0;
		       point_flag=0;
               led_pos=0;
		       fault_pro();//故障处理程序
			   start_only_once_flag=0;
		      }
             }
			else
			  fault_enter_flag++;//这个寄存器的作用是2次周期中断获取一个故障代码
			}
	       else
             {
			  fault_enter_flag=0;//这个值需要复位
              if((start_only_once_flag==0)&&(confirm==0))//保证开机时通讯正常后,只进入一次
 			  {
			  led01=10;//F.--
              led02=10;
              led03=15;
              led04=19;
			  start_only_once_flag=1;
			  }
			  fault_flash_flag=0;//没有任何故障,不需要进行故障代码的闪烁
			  fault_first_flag=0;//这里清零可以使得一出现故障,可以使所有故障代码进行循环闪烁
			  }
	 	 }
//===================================
//以下程序用来定时:当一类数据发送完成时,
//10ms还没收到主机应答时,需要再次发送
//====================================
	  if(send_over_flag==1)//一类数据发送完毕后,需要进行计时操作,防止长时间没有收到应答而造成心跳故障
	      send_inter_count++;
	  else
	      send_inter_count=0;

	  if(send_inter_count>SEND_COMM_ERROR)//20ms没有收到应答,则从发前次数据
	      {
		   send_over_kind=0;
		   send_over_flag=0;
		   send_inter_count=0;
		   rx_point=0;
		   send_on_kind=0;
		   }
//==================================
//定时置发送类标志
//==================================
   if(send_success_flag==1)
      {
       send_hand_count=0;

	   send_fault_count++;
       if(send_fault_count>=SEND_FAULT_TIME)//设置定时发送故障数据请求
          {
           send_kind=send_kind|SEND_FAULT;
           send_fault_count=0;
          }
       send_heart_count++;
       if(send_heart_count>=SEND_HEART_TIME)//设置定时发送心跳数据请求
         {
          send_kind=send_kind|SEND_HEART;
          send_heart_count=0;
         }
       send_heart_last_count++;
       if(send_heart_last_count>=SEND_HEART_LAST_TIME)//设置定时发送心跳持续数据请求
         {
          send_success_flag=0;
          send_heart_last_count=0;
          }
       }
    else
       {
	    send_fault_count=0;//通讯不正常时,需要初始化某些参数
        send_heart_count=0;
        send_heart_last_count=0;
		send_over_kind=0;
		send_over_flag=0;
		send_point=0;
		rx_point=0;
        send_on_flag=0;
		set_data=0;
		fault_data=0;
		show_data=0;
		sys_state=0;
		error_data=0;
		key_sample_code=0;

		send_show_count=0;
		send_kind=send_kind&SEND_HAND;//未联网成功,清除所有发送请求
        send_hand_count++;
        if(send_hand_count>=SEND_HAND_TIME)//设置握手数据请求
           {
		    send_kind=send_kind|SEND_HAND;
            send_hand_count=0;
           }
        } 
//============================================
//显示类数据只有进入显示菜单,并且联网成功后发送
//============================================   
     if((confirm==0x11)&&(send_success_flag==1))
       {
        send_show_count++;
        if(send_show_count>=SEND_SHOW_TIME)//设置显示数据请求
           {
            send_show_count=0;
            send_kind=send_kind|SEND_SHOW;
           }
       }
    else
      {
       send_show_count=0;
      }                  
//==================================
//根据LED的数码位,进行相应位发送
//==================================
     led_show_byte_number++;
     if(led_show_byte_number>=4)
        led_show_byte_number=0;
     if(led_show_byte_number==0)
        led_show_number=0xef;
     if(led_show_byte_number==1)
        led_show_number=0xdf;
     if(led_show_byte_number==2)
        led_show_number=0xbf;
     if(led_show_byte_number==3)
        led_show_number=0x7f;
    led_show_byte();//1个8位数码管的显示程序
//=================================
//按键采样,字符输出
//=================================
    key_sample_count_l++;
    if(key_sample_count_l>199)
      {
       key_sample_count_l=1;

	   if(send_success_flag==1)//只有通讯正常才采样键值
          {
           key_sample();
          }

       IN_PUT();
       getcode();
       value_show();
	   if(send_ask_set_flag==1)
		   set_show();//这里set的值也具有实时通讯显示功能。
       if(send_ask_fault_flag==1)
           fault_show();//这里fault堆栈也具有实时通讯显示功能。
       display();
       key_sample_code=0;
      }
//================================
//COPY和PASTE键处理程序
//================================
    if(function_key_kind==1)//1表示是COPY键
       {
        if(led_data>62)//总共62个参数
          {
          function_key_kind=function_key_kind&0xfe;//清除参数复制键标志
          }
        else
          {
          send_kind=send_kind|SEND_FU;//COPY键是在参数发送基础上的
          }
        }
//===============================
    if(function_key_kind==2)
       {
        if(led_data>62)//总共62个参数
          {
          function_key_kind=function_key_kind&0xfd;
          }
        else  
          {
           send_kind=send_kind|SEND_SET;//清除粘帖键标志
           eeprom_addh=0x28;
           eeprom_addl=led_data-1;//从0x2800开始
           eeprom_read();
           set_data=(eeprom_data&0xff)<<8;//先取高8位数据
           led_data++;

           eeprom_addl=led_data-1;
           eeprom_read();
           set_data=set_data|eeprom_data;//再取低8位数据
          }
       } 
                     
}
//================================
//eeprom的读操作
//================================
eeprom_read()
{

    ISP_CONTR=ENABLE_ISP;
    ISP_CMD=ISP_IAP_BYTE_READ;
    ISP_ADDRH=eeprom_addh;
    ISP_ADDRL=eeprom_addl;
    ISP_TRIG=0x46;
    ISP_TRIG=0xb9;
    eeprom_data=ISP_DATA;
    
    disable_eeprom();

}
//================================
//eeprom的写操作
//================================
eeprom_write()
{
    ISP_CONTR=ENABLE_ISP;
    ISP_CMD=ISP_IAP_BYTE_PROGRAM;
    ISP_ADDRH=eeprom_addh;
    ISP_ADDRL=eeprom_addl;
    ISP_DATA=eeprom_data;
    ISP_TRIG=0x46;
    ISP_TRIG=0xb9;
    
    disable_eeprom();
}
//================================
//eeprom的擦除操作
//================================
eeprom_erase()
{
    ISP_CONTR=ENABLE_ISP;
    ISP_CMD=ISP_IAP_SECTOR_ERASE;
    ISP_ADDRH=0x28;
    ISP_ADDRL=0x00; 
    ISP_TRIG=0x46;
    ISP_TRIG=0xb9;
    
    disable_eeprom();

}
//================================
//eeprom不使能操作
//================================
disable_eeprom()
{
    ISP_CONTR=0;
    ISP_CMD=0;
    ISP_TRIG=0x00; 
}
//================================
//程序说明:根据要求进行LED显示字符刷新
//================================
display()
{

       if(flash_code==0)
          {
           flash_code=1;
           led_show_value[0]=ledcode01;
           led_show_value[1]=ledcode02;
           led_show_value[2]=ledcode03;
           led_show_value[3]=ledcode04;
          }
       else
          {
           flash_code=0;
           led_show_value[0]=ledcode01flash;
           led_show_value[1]=ledcode02flash;
           led_show_value[2]=ledcode03flash;
           led_show_value[3]=ledcode04flash;
          }
}
//================================
//程序说明:根据按键输入,进行相应操作
//================================
IN_PUT()
{
     char i;
     int type_num;
     int  data_temp;
     switch(key_sample_code)
      {
       case MODE_KEY:
          {
           send_ask_set_flag=0;
		   send_ask_fault_flag=0;
		   set_rev_flag=0;
           key_sample_count_h=0;
		   if((confirm==0x11)||(confirm==0x21)||(confirm==0x31))
           {
           point_flag=0;		   

		   high_led_number=4;

		   if(confirm==0x11)
              {
               led04=14;
               led03=10;
               led01=led_data%10;
               led02=led_data/10;
               confirm=0x10;
                  led_pos=1;

               }
           if(confirm==0x21)
              {
               led04=13;
               led03=10;
               led01=led_data%10;
               led02=led_data/10;
               confirm=0x20;
                  led_pos=1;
               }
		   if(confirm==0x31)
              {
               led04=28;
               led03=10;
               led01=led_data%10;
               led02=led_data/10;
               confirm=0x30;
                  led_pos=1;
               }
           }
          else
          {
           confirm=confirm+0x10;
           if(confirm>=0x40)

⌨️ 快捷键说明

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