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

📄 wnt10.c

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 C
📖 第 1 页 / 共 5 页
字号:

unsigned char bdata SYS_RUN_STATUS = 0; // MCU Event Flag.
sbit Ex386PwrDwn  = SYS_RUN_STATUS^7;   //
sbit RecChnTxDly  = SYS_RUN_STATUS^6;   // Voice Record Channal Switch Delay.  
sbit ExPwrLastSTA = SYS_RUN_STATUS^5;   //
sbit ExPwrCurrSTA = SYS_RUN_STATUS^4;   //
sbit TempLastSTA  = SYS_RUN_STATUS^3;   //
sbit TempCurrSTA  = SYS_RUN_STATUS^2;   //
sbit BattLastSTA  = SYS_RUN_STATUS^1;   //
sbit BattCurrSTA  = SYS_RUN_STATUS^0;   //

void RstSTATUS(void)
{
   unsigned char ucTMP;
   SFRPAGE = 0x00;         // Sfr Page 0.
   ucTMP = RSTSRC;
   if( ucTMP & 0x01 )      // External PIN RST.
   {
	  McuExRST = 1;        // . 
      Blink(100,250,1);
   }
   if( ucTMP & 0x02 )      // Power On RST.
   {
	  McuPwrOnRST = 1;     // . 
      Blink(100,250,2);
   }
   if( ucTMP & 0x04 )	   // Miss Clock RST.
   {
      McuMisClkRST = 1;    // .
      Blink(100,250,3);
   }
   if( ucTMP & 0x08 )	   // WDT Time Out RST.
   {
 	  McuWdtRST = 1;       // . 
      Blink(100,250,4);
   }
}

void TstLED(void)
{
   unsigned char i,ucTMP;
   ucTMP = 0x04;           
   for(i=0;i<6;i++)        // LED0 --> LED5
   {
      P1 = P1 | ucTMP;
	  DmS(250); 
	  DmS(250); 
      ucTMP = ucTMP << 1;
   }  
   P1 = P1 & 0x03;         // all LEDs LightOff.
   DmS(250);
   DmS(250);  
   P1 = P1 | 0xfc;         // all LEDs LightOn.
   DmS(250);
   DmS(250); 
   P1 = P1 & 0x03;         // all LEDs LightOff.
   for(i=0;i<10;i++)       // LED0 Blink 10 times.
   {
      LED0 = ~LED0;
	  D1S(1); 
   }  
   LED0 = 1;               // LED0 LightOn.
}

void Blink(unsigned char OnTime,unsigned char OffTime,unsigned char Num)
{          //       指示灯亮             指示灯灭              闪烁次数
   unsigned char i,ucTMP;
   SFRPAGE = 0x0F;
   ucTMP = P4;
   for(i=0;i<Num;i++)
   {
      P4 = ucTMP & 0xef;  // iLED = 0;
      DmS(OnTime);  
      P4 = ucTMP | 0x10;  // iLED = 1;
      DmS(OffTime);  
   }
   SFRPAGE = 0x00;
}

void FraFormat(void)
{
   AlmDATA[0] = FraSAT0;      // 0x55.
   AlmDATA[1] = FraSAT1;      // 0xAA.
   AlmDATA[2] = AlmFraCTL;    // 0x04.
   AlmDATA[3] = 0x00;         // Frame Index high byte.
   AlmDATA[4] = 0x00;         // Frame Index low  byte.
   AlmDATA[5] = AlmFraLeng;   // Alarm Info data: 1 bytes.
   AlmDATA[7] = 0x00;         // XOR, not used.
   AlmDATA[8] = FraEND;       // 0x88.

   GpsDATA[0] = FraSAT0;      // 0x55.
   GpsDATA[1] = FraSAT1;      // 0xAA.
   GpsDATA[2] = GpsFraCTL;    // 0x05.
   GpsDATA[3] = 0x00;         // Frame Index high byte.
   GpsDATA[4] = 0x00;         // Frame Index low  byte.
   GpsDATA[5] = GpsFraLeng;   // Gps Info data: 39 bytes.
   GpsDATA[43] = 0x00;        // XOR, not used.
   GpsDATA[44] = FraEND;      // 0x88.

   StaDATA[0] = FraSAT0;      // 0x55.
   StaDATA[1] = FraSAT1;      // 0xAA.
   StaDATA[2] = StaFraCTL;    // 0x06.
   StaDATA[3] = 0x00;         // Frame Index high byte.
   StaDATA[4] = 0x00;         // Frame Index low  byte.
   StaDATA[5] = StaFraLeng;   // MCU Status Changed Info data: 1 bytes.
   StaDATA[7] = 0x00;         // XOR, not used.
   StaDATA[8] = FraEND;       // 0x88.

   SysDATA[0] = FraSAT0;      // 0x55.
   SysDATA[1] = FraSAT1;      // 0xAA.
   SysDATA[2] = SysFraCTL;    // 0x07.
   SysDATA[3] = 0x00;         // Frame Index high byte.
   SysDATA[4] = 0x00;         // Frame Index low  byte.
   SysDATA[5] = SysFraLeng;   // MCU Status Info data Length: 9 bytes.
   SysDATA[15] = 0x00;        // XOR, not used.
   SysDATA[16] = FraEND;      // 0x88.

   RecDATA[0] = FraSAT0;      // 0x55.
   RecDATA[1] = FraSAT1;      // 0xAA.
   RecDATA[2] = 0x01;         // 0x01/0x02/0x03.
   RecDATA[5] = 200;          // Voice Record data Length: 200 bytes.
   RecDATA[206] = 0x00;       // XOR, not used.
   RecDATA[207] = FraEND;     // 0x88.

   AckDATA[0] = FraSAT0;      // 0x55.
   AckDATA[1] = FraSAT1;      // 0xAA.
   AckDATA[2] = 0x80;         // 0x80/0xC0/0xE0.
   AckDATA[3] = FraEND;       // 0x88.
}

void UART1_ISR(void) interrupt 20
{
   unsigned char ucTMP,CurrSramPage;
   SFRPAGE = 0x0F;                    // P4 Page.
   CurrSramPage = P4;                 // Save P4 Value.              
   ExSRAM_PageSetting(0);             // Use SRAM Page 0;

   SFRPAGE = UART1_PAGE;
   RI1 = 0;                           // Clear the UART1 Interrupt Flag.
   ucTMP = SBUF1;
   if( GPS_HEAD_OK )
   {
      if( ucTMP == ',' )              // Should Process the Perious GPS DATA.
	  {
	     GpsFlaCNT++;
	     switch( GpsFlaCNT )
	     {
		    case  1: GpsDatPtr = 7;	  // Gps TIME: 7~12.			
				     break;
		    case  3: GpsDatPtr = 13;  // Gps Latitude: 13~21.			
				     break;
		    case  5: GpsDatPtr = 22;  // Gps Longtitude: 22~31.
				     break; 
		    case  7: GpsDatPtr = 32;  // Gps Speed: 32~36.
				     break; 				
		    case  9: GpsDatPtr = 37;  // Gps DATE: 37~42.
				     break;											
		    default: break;
         }
	  }				
      else
	  {
		 switch( GpsFlaCNT )
		 {
			case  1: GpsDATA[GpsDatPtr++] = ucTMP;   // Gps DATE.				
					 break;
			case  2: if( ucTMP=='V' )                // Gps Valid Flag.
					 GpsDATA[6] = GpsDATA[6] & 0x7f; // GpsInfo Invalid.				
					 break;
			case  3: GpsDATA[GpsDatPtr++] = ucTMP;	 // Gps Latitude.			
					 break;
			case  4: if( ucTMP=='S' )                // Gps Latitude hemisphere.
					 GpsDATA[6] = GpsDATA[6] | 0x02; // 'S'hemisphere.					
					 break;
			case  5: GpsDATA[GpsDatPtr++] = ucTMP;   // Gps Longtitude.			
					 break;
			case  6: if( ucTMP=='W' )                // Gps Longtitude hemisphere.
					 GpsDATA[6] = GpsDATA[6] | 0x01; // 'W'hemisphere.			
					 break;
			case  7: GpsDATA[GpsDatPtr++] = ucTMP;	 // Gps Speed.			
					 break;
			case  9: GpsDATA[GpsDatPtr++] = ucTMP;   // Gps DATE.				
					 break;
			case 10: GPS_HEAD_MATCH = 0;             // Gps Info Recieved Success.
					 GpsFlaCNT = 0;                  // Begin from 2.
 	                 if( SysStandby == 0 )           // System Operating Normal.
        		       GpsDatReady = 1;              // Gps Data Ready to TX. 
                     LED2 = 0;                       // GPS Light Off.
					 break; 				
			default: break;
		 }
      }
   }
   else
   {
	  switch( GPS_HEAD_MATCH )
	  {
	 	 case 0x00: if( ucTMP =='$' )         // Recv DATA Equal '$' ?
					GPS_HEAD_S = 1;
					break;
		 case 0x01: if( ucTMP =='G' )         // Last DATA Equal '$'
		   		    GPS_HEAD_G = 1; 	      // Recv DATA Equal 'G' ?
			        else 
			          GPS_HEAD_MATCH = 0x00;
					break;			
		 case 0x03: if( ucTMP =='P' )         // Last DATA Equal 'G'
			 		  GPS_HEAD_P = 1;  		  // Recv DATA Equal 'P' ?
			        else 
			          GPS_HEAD_MATCH = 0x00;
					break;
	     case 0x07: if( ucTMP =='R' ) 		  // Last DATA Equal 'P'
			  		  GPS_HEAD_R = 1;	 	  // Recv DATA Equal 'R' ?
			        else 
			          GPS_HEAD_MATCH = 0x00;
					break;
		 case 0x0f: if( ucTMP =='M' ) 		  // Last DATA Equal 'R'
			 		  GPS_HEAD_M = 1;		  // Recv DATA Equal 'M' ?
			        else 
			          GPS_HEAD_MATCH = 0x00;
					break;		
		 case 0x1f: if( ucTMP =='C' ) 		  // Last DATA Equal 'M'
		  		    { 	   
					   GPS_HEAD_OK = 1;	      // All Chars Match
					   GpsDATA[6] = 0x80;     // Init: GpsInfo Valid,N,E
					   LED2 = 1;              // *** GPS LED LightOn ***;
		 			}
  		            else
			           GPS_HEAD_MATCH = 0x00; //
					break;
		 default:   break;	  						  				   
	  }
   }
   SFRPAGE = 0x0F;                           // P4 Page. 
   P4 = CurrSramPage;                        // Restore P4 Value.
   SFRPAGE = 0x00;  
}

void UART0_ISR(void) interrupt 4
{
    unsigned char ucTMP,CurrSramPage;
    SFRPAGE = 0x0F;                            // P4 Page.
    CurrSramPage = P4;                         // Save P4 Value.              
    ExSRAM_PageSetting(0);                     // Use SRAM Page 0;
    
	SFRPAGE = UART0_PAGE;
    if( TI0 )                                  // TX Interrupt. 
	{
  	   TI0 = 0;                                // Clear the UART0 Interrupt Flag.
       if( UART0_TX_Paus == 0 )                // UART0 TX need Pause ? 
	   {
          if( UART0_TX_CNT < UART0_TX_NUM )    // Current Frame Send OVER ?
	      {
 	         SBUF0 = *( TxDATA + UART0_TX_CNT );
             UART0_TX_CNT++;
          }
	      else
	      {
             switch( UART0_TX_TASK )
	         {  
			    case  1: AlmDatReady = 0;
				         break;  
			    case  2: GpsDatReady = 0;
				         break;  
			    case  3: StaDatReady = 0;
			             break;  
			    case  4: SysDatReady = 0;
 			             MCU_Ex386_STATUS = MCU_Ex386_STATUS & 0xE0; 
			             break;  
			    case  5: AckDatReady = 0;
			             break;  
			    case  6: RecDatReady = 0;
			             break;  
			    default: break;  
			 }
	         McuTxCNT++;               // MCU Frame Send Counting. 
			 UART0_TX_CNT = 255;
	         UART0_TX_Busy = 0; 
          }
	   }
    }
	if( RI0 )                          // Byte Process Methode.
    {
       ucTMP = SBUF0;
       RI0 = 0;                        // Clear the UART0 Interrupt Flag.
       if( UART0_FraHEAD_OK )          // 
	   {
          /********************************************
          ***  386Ex STATUS Information DATA Frame  ***
          ********************************************/
          if( UART0_RX_DTYPE == 1 )    // 386Ex STATUS Information Frame.
          {
		     UART0_RX_CNT++;

⌨️ 快捷键说明

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