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

📄 wnt10.c

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 C
📖 第 1 页 / 共 5 页
字号:
       while( AD0INT == 0 );                   // Wait for Convert Over
       AdcDatBuff.ucVAR[0] = ADC0H;            // Only Get High 8 Byte.  
	   ExSramWrRdAdr = VocCh1RecDatWrPtr;
       *ExSramWrRdAdr = AdcDatBuff.ucVAR[0];    // Save CH1 DATA.
	   VocCh1RecDatWrPtr++; 
       if( VocCh1RecDatWrPtr >= VocRecDatLength )     
       {                                       // 64000 Sample Points / Page( 8sec ).
	      VocCh1RecDatWrPtr = 0;               // RST Address.
          VocCh1RecDatWrPag++;                 // CH1 SRAM Page Number Increase 1.
       }
       if( VocCh1RecDatWrPag > VocCh1RecEndPag )  
	   {                                       // Voice CH1 Record Over.
  	      VocCh1RecDatWrPtr = 0;
	      VocCh1RecDatWrPag = 3;
          VocCh1RecSTA = 0;                    // Clear Voice CH1 Record STATUS Flag.     
          VocCh1RecEvt = 1;                    // Set Voice Record CH1 Over Event Flag.
	   }
    }
    // VOICE CHANNAL 2 RECORDING.
    if( VocCh2RecSTA == 1 )
    {
       ExSRAM_PageSetting( VocCh2RecDatWrPag );// Page 5 ~ 6.
       ADC0_CH_Setting(0x00);                  // AIN02,voice channal 2.                     
	   AD0INT = 0;                             // RST ADC Convert Complete Flag.
       AD0BUSY = 1;                            // Start ADC0    
       while( AD0INT == 0 );                   // Wait for Convert Over
       AdcDatBuff.ucVAR[0] = ADC0H;            // Only Get High 8 Byte.  
	   ExSramWrRdAdr = VocCh2RecDatWrPtr;
       *ExSramWrRdAdr = AdcDatBuff.ucVAR[0];    // Save CH2 DATA.
	   VocCh2RecDatWrPtr++;
       if( VocCh2RecDatWrPtr >= VocRecDatLength )     
       {                                       // 64000 Sample Points / Page( 8sec ).
	      VocCh2RecDatWrPtr = 0;               // RST Address.
          VocCh2RecDatWrPag++;                 // CH2 SRAM Page Number Increase 1.
       }
       if( VocCh2RecDatWrPag > VocCh2RecEndPag )  
	   {                                       // Voice CH2 Record Over.
  	      VocCh2RecDatWrPtr = 0;
	      VocCh2RecDatWrPag = 5;
          VocCh2RecSTA = 0;                    // Clear Voice CH2 Record STATUS Flag.     
          VocCh2RecEvt = 1;                    // Set Voice Record CH2 Over Event Flag.
	   }
    }
    if( VocPlaySTA == 1 )                      // DAC0 Task: Play Voice Sample.
    {
	   ExSRAM_PageSetting(7);
       DacDatBuff.uiVAR = 0;
	   ExSramWrRdAdr = VocSamDatRdPtr;
       DacDatBuff.ucVAR[0] = *ExSramWrRdAdr;
       DacDatBuff.uiVAR = DacDatBuff.uiVAR >> 2;           // Vmax / 4 = 0.6V(Vpp).
//       DacDatBuff.ucVAR = DacDatBuff.ucVAR & 0x7f80;

       SFRPAGE = DAC0_PAGE;          // Switch to DAC0 Page
       DAC0L = DacDatBuff.ucVAR[1];  // DAC0 DATA Low  Byte.
       DAC0H = DacDatBuff.ucVAR[0];  // DAC0 DATA High Byte.
	    
       VocSamDatRdPtr++;
       if( VocSamDatRdPtr >= VocSamPlyLength )
       {
	      VocSamDatRdPtr = 0;
          VocRePlyTimCNT++;
       }
       if( VocRePlyTimCNT >= VocSamRePlayTim  )
       {
	      VocSamDatRdPtr = 0;
          VocRePlyTimCNT = 0;
		  VocPlaySTA = 0;            // Voice Play Over.
       }
	}
    uiTimCNT++;               // 1S Counting.
    if( uiTimCNT >= 8000 )    // Second Time Base.
    {
       uiTimCNT = 0;          // .
       SecFlag = 1;           // Second Signal.
    }
	SFRPAGE = 0x0F;           // P4 Page.
	P4 = CurrSramPage;        // Restore P4 Value.  
	SFRPAGE = 0x00;
}

void PwrCtrl(unsigned char ucMode)
{
   switch( ucMode )
   {
      case  0: // System Power On Init.
               SW0 = CarON;      // Backup Battary Switch Enabled / Disabled. 
               SW8 = 0;          // Fans' Power Enabled(MTD2955).
               nPDN = 0;         // MobilePhone Battary Enabled,"Low" is Active;(0)
               LED0 = 1;         // System Power's STADUS                       (0)              
               LED1 = 0;         // Communicating with the Control Centerl      (1) 
               LED2 = 0;         // GPS's STADUS                                (1)
               LED3 = 0;         // MobilePhone 1's STADUS                      (1)
               LED4 = 0;         // MobilePhone 2's STADUS                      (1)
               LED5 = 0;         // MobilePhone 3's STADUS                      (1)
	           break;
      case  1: // System Normal Operating.
			   MCU_STATUS = MCU_STATUS | 0x70; // Open TestMobilePhone Charging.		                              
               Ref_Init(1);                    // Internal Voltage Refernce Init
               ADC0_Init(1,0,4,0,1,4,1);       // ADC0 Enabled,GAIN: 1,HVA Enabled, GAIN: 0.25. 
               T1_RunCtrl(1);                  // T1 Running for UART1 BaudRate.
               T3_RunCtrl(1);                  // T3 Running for DAC0  DATA Refresh.
               T4_RunCtrl(1);                  // T4 Running for UART0 BaudRate.
               SW0 = 0;          // Switch On  Backup Battary Switch.
               SW3 = 1;          // Analog  Power    Enabled(TPS76350).
               SW2 = 1;          // GPS     Power    Enabled(TPS76350).
               SW1 = 0;          // DigiPower(VCC)   Enabled(MTD2955).
   		       DmS(10);          // delay 10mS.
               nRST386 = 0;      // Reset the Ex386.
   		       DmS(10);          // delay 10mS.
   			   nRST386 = 1;      // 386Ex Normal Operation.

			   DAC0_Init(1,1,7);      // Timer 3, Left-Justified.
			   DAC1_Init(1,0,7);      // Sync with Write to DAC1H.
			   SFRPAGE = DAC0_PAGE;
			   DAC0L = 0xff;
			   DAC0H = 0xff;          // DCA1 Output: 1/2 Vref.
			   SFRPAGE = DAC1_PAGE;
			   DAC1L = 0x00;
			   DAC1H = 0x80;          // DCA1 Output: 1/2 Vref.
			   SFRPAGE = 0x00;
	           break;
      case  2: // System Standby.
               Ref_Init(0);      // Disable Internal Voltage Refernce.
               ADC0_Init(0,0,4,0,0,4,1);  // ADC0 Disabled,HVA Disabled. 
	  		   DAC0_Init(0,1,7); // DAC0 Disabled.
			   DAC1_Init(0,0,7); // DAC1 Disabled.
               SW0 = CarON;      // Switch Off Backup Battary Switch.
               SW3 = 0;          // Analog  Power    Disabled(TPS76350).
               SW2 = 0;          // GPS     Power    Disabled(TPS76350).
               SW1 = 1;          // DigiPower(VCC)   Disabled(MTD2955).              
               T1_RunCtrl(0);    // Disable T1(UART1 BaudRate).
               T3_RunCtrl(0);    // Disable T3(DAC0  DATA Refresh).
               T4_RunCtrl(0);    // Disable T4(UART0 BaudRate).
	           break;
      default: break;
   }
}

void main(void)
{
   unsigned char i,j,ucTMP;
   unsigned char idata ucDATA[10]; 
   unsigned char idata SysTemp,BattVolt,ExPwrVolt;

   unsigned char idata SecCNT,MinCNT,ExPwrChgCNT;
   unsigned char idata ReTxTimCNT;
   unsigned char idata BattAlmVldCNT,BattNrlVldCNT;
   unsigned char idata TempAlmVldCNT,TempNrlVldCNT;
   unsigned int  idata ExPwrAlmVldCNT;   // 15min = 900S.
   unsigned char idata ExPwrNrlVldCNT;   // 30S Affirm.
   unsigned char idata ExPwrOnTimCNT;    // 30S Affirm.
   unsigned char idata Ex386PwrOffCNT;

   unsigned char idata PwrLedCNT, PwrLedOn, PwrLedOff;
   unsigned char idata MC35LedCNT,MC35LedOn,MC35LedOff;
   unsigned char idata MP0LedCNT, MP0LedOn, MP0LedOff;
   unsigned char idata MP1LedCNT, MP1LedOn, MP1LedOff;
   unsigned char idata MP2LedCNT, MP2LedOn, MP2LedOff;

   unsigned char xdata *VocSamDatWrAdr;  //
   unsigned char xdata *VocRecDatRdAdr;  //

   unsigned char VocChnDatTxTimCNT = 0;  // Voice CHn Record DATA TX Time Counting.
   unsigned char RecChnTxDlyCNT = 0; 

   EA = 0;
   SP = 0xC0;             // SP: 64 Bytes,0xC0~0xff, User: 192 Bytes.
   WDT_Disabled();        // WatchDog Disabled.
   Port_Init();           // I/O Port and EMIF Config. 
   SW0 = CarON;           // Backup Battary Switch Enabled(MTD2955).
   SW7 = 1;               // Battary Charge Enabled,Begin of Charging...
   BattChgSTA = 1;        // Battary Charging Now.
   PwrCtrl(0);            // System Power On Init.
   External_Osc();        // Switch to External Oscillator, 24.000MHz.
   RstSTATUS();           // Get MCU Reset Record.
   if( ChkExSRAM() )
   {
      for(i=0;i<10;i++)
	  {
         LED0 = 1;
		 DmS(50);
         LED0 = 0;
		 D1S(1);
	  }
   }  
   TstLED();              // Panal LED SelfTest.
   FraFormat();

   T0T1_Init();           // T0、T1 Init, T0: 1mS Interrupt, T1: 19200 BaudRate.
   T3_Init();             // DAC0 DATA Refresh Timer.
   T4_Init();             // UART0 Baudrate.
   T0_RunCtrl(1);         // T0 Running: 125uS.

   UART0_Init();          // UART0 Init: 19200bps.
   UART1_Init();          // UART1 Init: 19200bps.

   uiTimCNT = 0;          // RST 1S   Counter.       
   PwrLedCNT = 0;         // RST PwrLED counter. 
   PwrLedOn = 1;          // System Standby LED LightOn: 1S. 
   PwrLedOff = 6;         // System Standby LED LightOnOff Period: 6S.       
   MC35LedCNT = 0;        // RST MC35 LED counter.
   MP0LedCNT = 0;         // RST MP1  LED counter.
   MP1LedCNT = 0;         // RST MP2  LED counter.
   MP2LedCNT = 0;         // RST MP3  LED counter.

   ExPwrChgCNT = 0;       // RST Power Change Status Counter.
   BattAlmVldCNT = 0;     // RST Battary Alarm  Valid Counter.
   BattNrlVldCNT = 0;     // RST Battary Normal Valid Counter.
   TempAlmVldCNT = 0;     // RST Temp Alarm  Valid Counter.
   TempNrlVldCNT = 0;     // RST Temp Normal Valid Counter.
   ExPwrAlmVldCNT = 0;    // RST ExPwr Alarm  Valid Counter.
   ExPwrNrlVldCNT = 0;    // RST ExPwr Normal Valid Counter.
   ReTxTimCNT = 0;        // RST TX Pause to Resume Time Counter.

   RxCurrFraIdx.uiVAR = 0;
   RxLastFraIdx.uiVAR = 0;
   TxRecFraIdx.uiVAR  = 0;
  
   ExPwrLastSTA = 1;      // ExPwrSTATUS Initial.
   Ex386STATUS = 0x00;    // 386Ex Initial Value: 00 00 00 00.
   Ex386StaChg = 1;
   SysStandby = 1;        // System Standby.

   Interrupt_Init();      // System Interrupt Config.
   WDT_Setting(0x04);     // 651uS for 24.000MHz.
   WDT_Reload();          // WDT Enabled.
   EA = 1;                // Global Enable 8051 interrupts.

   while(1)   
   {
      if( SysStandby == 1 )
        SW0 = CarON;      // Switch Off Backup Battary Switch.

	  /**************************************************************
         P1: D7,  D6,  D5,  D4,  D3,  D2,  D1,  D0 
             LED5,LED4,LED3,LED2,LED1,LED0,mPDN,SW8.
      **************************************************************/
      if( PwrLedCNT < PwrLedOn )     // Power Indicator LED.
        P1 = P1 | 0x04;              // LED0 Light On.        
	  else
	    P1 = P1 & 0xfb;              // LED0 Light Off.
	  if( MC35LedCNT < MC35LedOn )   // MC35 Indicator LED.
	    P1 = P1 | 0x08;              // LED1(P1.3) Light On.        
  	  else
	    P1 = P1 & 0xf7;              // LED1(P1.3) Light Off.
      if( MP0LedCNT < MP0LedOn )     // MP0 Indicator LED.
	    P1 = P1 | 0x20;              // LED3(P1.5) Light On.        
	  else
	    P1 = P1 & 0xdf;              // LED3(P1.5) Light Off.
      if( MP1LedCNT < MP1LedOn )     // MP1 Indicator LED.
	    P1 = P1 | 0x40;              // LED4(P1.6) Light On.        
	  else
	    P1 = P1 & 0xbf;              // LED4(P1.6) Light Off.
      if( MP2LedCNT < MP2LedOn )     // MP2 Indicator LED.
	    P1 = P1 | 0x80;              // LED5(P1.7) Light On.        
	  else
	    P1 = P1 & 0x7f;              // LED5(P1.7) Light Off.

      if( PwrLedCNT >= PwrLedOff )     
        PwrLedCNT = 0;
      if( MC35LedCNT >= MC35LedOff )   
        MC35LedCNT = 0;
      if( MP0LedCNT >= MP0LedOff )     
        MP0LedCNT = 0;
      if( MP1LedCNT >= MP1LedOff )     
        MP1LedCNT = 0;
      if( MP2LedCNT >= MP2LedOff )     
        MP2LedCNT = 0;
      /**************************************************************
      ***  SECOND FLAG VALID ***
      **************************************************************/
      if( SecFlag )               // Second TimOut flag.
      {
         SecCNT++; 
		 if( SecCNT >= 60 )       // Minute flag.
		 {
			MinFlag = 1;          // Set minute flag.
		    SecCNT = 0;           // RST secong counter.
		 }
         if( Ex386PwrDwn == 1 )
	       Ex386PwrOffCNT++;
         else
		   Ex386PwrOffCNT = 0; 
         PwrLedCNT++;             // Power Indicator LED.
         MC35LedCNT++;            // MC35 Indicator LED.
         MP0LedCNT++;             // MP0 Indicator LED.
         MP1LedCNT++;             // MP1 Indicator LED.
         MP2LedCNT++;             // MP2 Indicator LED.
         /**************************************************************
         ***  Get External Power STATUS  & Refresh I/O  ***
         **************************************************************/        
         ExPwrCurrSTA = CarON;    // Get Current ExPwr STATUS Every Second.        

⌨️ 快捷键说明

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