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

📄 main.c

📁 矿工定位系统单端
💻 C
📖 第 1 页 / 共 2 页
字号:
  TH0=0Xac;
  TL0=0X95;
  TR0=1;   
}
//**********************************************************
void Send_ok(unsigned char key)
{ 
   unsigned char i;
    ES=0;
    TX_EN=1; 
	//Delay1msa(5);
	for(i=0;i<8;i++)
	{
      SBUF = 0x88;				// 发送数据
      while(0==TI);			// 等待发送完毕
      TI = 0;				// 清除发送标志
	  SBUF = 0xff;				// 发送数据
      while(0==TI);			// 等待发送完毕
      TI = 0;				// 清除发送标志

	  SBUF = key;				// 发送数据
      while(0==TI);			// 等待发送完毕
      TI = 0;				// 清除发送标志
	  SBUF = key;				// 发送数据
      while(0==TI);			// 等待发送完毕
      TI = 0;				// 清除发送标志
   }
   if(key_tem==0x02)
   {
     wring_send_times--;
	 if(wring_send_times==0)
	 {
        key_tem=0x01;
	 }
   }
   else
   {
    key_tem=0x01;
   }
	TX_EN=0; 
	//Delay1msa(4);
    ES=1;
  
}

/******************************************************************
* 名称:UART_SendByte
* 功能:向串口发送字节数据。
* 入口参数:dat	  待发送的数据
* 出口参数:无
******************************************************************
void  UART_SendByte(uint8 dat)
{  SBUF = dat;				// 发送数据
   while(0==TI);			// 等待发送完毕
   TI = 0;				// 清除发送标志
}


/******************************************************************
* 名称:UART_SendCode
* 功能:读取FLASH中的数据,并发送到串口。
* 入口参数:addr	  读取的起始地址
*          no     读取的数据个数
* 出口参数:无
******************************************************************
void  UART_SendCode(uint16 addr, uint16 no)
{  uint8 code *readp;

   readp = addr;
   for(; no>0; no--)
   {  UART_SendByte(*readp++);		// 读取数据并发送
   }
}

*/
void flash_led(unsigned char j )
{  
   char i;
   for(i=0;i<j;i++)
   {
        LED=0;
        Delay1ms(50);
	    LED=1;
		Delay1ms(50);
   }
 LED=1;	  
}
//***************************************************************
void flash_beep(unsigned char j )
{  
   char i;
   beep_delay++;
   if(beep_delay>40000)
   {
    beep_delay=0;
    for(i=0;i<j;i++)
    {
        BEEP=0;
        Delay1ms(60);
	    BEEP=1;
		Delay1ms(60);
    }
   }
  BEEP=0;	
   
}
//******************************************************************
//**********************************************************
void Setok(void)
{ 
  
    ES=0;
    SBUF ='O';				// 发送数据
    while(0==TI);			// 等待发送完毕
    TI = 0;				// 清除发送标志
    SBUF = 'K';				// 发送数据
    while(0==TI);			// 等待发送完毕
    TI = 0;				// 清除发送标志
    ES=1;
}
//**************************************************************
void main(void)
{
  unsigned  char Link_ok=0,j,CS_state=0;
 // unsigned int xxx;

  
  ports_init();
  BEEP=0;
 if(ISP) 
  {
   user_uart_init();//用户串口初始化
    watchdog_init();//初始化看门狗
  
   }
 else
  {
   uart_init();  //进入ISP模式
   FLASH_WriteByte(0xc04, 0);
  }
  osc_init();
  rtc_init();
  EA=1;
  ES=1;
  CS=0;
  TX_EN=0; //接收状态
  PWR =1;
 //rtc_start();
 LED=0;
 Delay100ms(2);
 LED=1;
  if((FLASH_ReadByte(0XC05)==0x55)&(FLASH_ReadByte(0XC06)==0xaa))//初始化模块的ID
  {
    EA=0;
    ADDR=FLASH_ReadByte(0XC04); 
    EA=1;
      //FLASH_WriteByte(0xc04, 0); 
  }
  else
   {
    ADDR=0;
	EA=0;
    FLASH_WriteByte(0xc04, 0);
    FLASH_WriteByte(0xc05, 0x55);
	FLASH_WriteByte(0xc06, 0xAA);
    EA=1;
   }
  
//ADDR=2;


while(1)
 { 
  if(beep_flg)
  {
     //BEEP=1;
	 flash_beep(3);
  }
   if(ISP)
   {
      watchdog_start();
     
	  if(!KEY){beep_flg=0;wring_send_times=3; key_tem=0x02; LED=0; Delay100ms(2); LED=!LED;LED=0; Delay100ms(2); LED=!LED;}//有键按下
	   watchdog_feed();
      if(rxok)
	  {
	    rxok=0;

        xxxx=cal_crc( RXtem,4);
		/*SBUF=xxxx>>8;
		while(!TI);
		TI=0;
	    SBUF=xxxx;
		while(!TI);
		TI=0;*/
		if(xxxx==CRC.intX)//crc交验通过
		{
		 if(RX_BEEP==0x33)
		 {
		    beep_delay=40000;
		    beep_flg=1;
		 }
		 
		Send_ok(key_tem);
	    flash_led(3);
		i=0;
	    LED=1;
		Link_ok=1;
        watchdog_feed();
         PWR =0;//关
		}
		  
	 }
	 if(set_ok)//设置模块的ID
	 {
        watchdog_feed();
	 	set_ok=0;
		Send_ok(key_tem);

		watchdog_feed();
		EA=0;
	    FLASH_WriteByte(0xc04,RX_addr);   //存入新ID
   	    EA=1;
		ADDR=RX_addr;
	    LED=0;
        flash_led(5);
		i=0;
	    LED=1;
		Link_ok=1;
        watchdog_feed();
	 }
    rtc_start();
  switch(CS_state)
  {
   case 0:
   CS=0;
   if(T_flag)
	{  
     
       watchdog_feed();
      rtc_stop();  
      T_flag=0;
	    if(i>=2)
	  { 
	   PWR =1;   
	  }
   
	  i++;
    
	  if(i>3)
	  {
	    i=0;
        watchdog_feed();
	    if(Link_ok)
	    {
	       Link_ok=0;
           watchdog_feed();
	   
	    }
	   else
	    {
	       LED=0;
           Delay1ms(50);
	       LED=1;
	       j++;
           watchdog_feed();
           CS_state=1;
		   if(j>5)
		  {  
		    PWR =0;   
		    j=0;
		    DIVM =0x00;
            watchdog_feed();
			 power_mode(POWER_TOTALPOWERDOWN);//休眠
		  }
	    }
	 }
	}
    break;
   case 1:
     CS=1;
   if(T_flag)
	{   // PWR =1;     
       watchdog_feed();
      rtc_stop();  
      T_flag=0;
	  if(i>=2)
	  { 
	   PWR =1;   
	  }
    
	  i++;
	 
	  if(i>3)
	  {
	   i=0;
       watchdog_feed();
	   if(Link_ok)
	   {
	    Link_ok=0;
        watchdog_feed();
	   
	   }
	   else
	   {
	    LED=0;
        Delay1ms(50);
	    LED=1;
	    j++;
        watchdog_feed();
        CS_state=0;
		if(j>5)
		{    
		 PWR =0;   
		 j=0;
		 DIVM =0x00;
         watchdog_feed();
	     power_mode(POWER_TOTALPOWERDOWN);//休眠
		}
	   }
	 }
	}
    break;
   default:
    CS_state=0;
    break;
   }//end swtich
 

   }
   else
   {
    LED=!LED;
    Delay100ms(10);

	
	
	 if(set_ok)//设置模块的ID
	 {
	    
        watchdog_feed();
	 	set_ok=0;
	    EA=0;
	    FLASH_WriteByte(0xc04,RX_addr);   //存入新ID
   	    EA=1;
		ADDR=RX_addr;
	    LED=0;
        flash_led(4);
		i=0;
	    LED=1;
		Link_ok=1;
        watchdog_feed();
		Setok();
	 }
   }
 }
}

⌨️ 快捷键说明

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