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

📄 asuro 020.c

📁 020 Asuro小车示例源码 playing music!!!.rar
💻 C
📖 第 1 页 / 共 5 页
字号:
				//get corresponding tone-code and store in reload value for tone0
				gucTm0CurRldVal=gucMusTonLst[uci];
				//make right engine tone pitch differ from left engine tone pitch
				gucTm1CurRldVal=gucTm0CurRldVal+1;
				//clear tone-duration counter
				gucTm2IntCnt=0;
				//start tone0-playing
				SFRX(TIMSK,TOIE0_H);
				//delay to avoid tone0 and tone1 starting at the same time (battery-current reducing)
				vDelayXMilliSeconds(1);
				//if low octave is selected (timer0 range 3 is set)
				if(SFRS(TCCR0,CS00_H)){
					//if dual tone mode is set
					if(gbDuaTonMod){
						//start tone1-playing too
						SFRX(TIMSK,TOIE1_H);
					}//if
				}//if
				//if high octave is selected (timer0 range 2 is set)
				else{
					//start tone1-playing too
					SFRX(TIMSK,TOIE1_H);
				}//else
				//start tone-duration counter
				SFRX(TIMSK,TOIE2_H);
				//exit loop
				break;
			}//if
		}//else
		//select next tone list index
		uci++;
	}
}
//================================================================================
//  DELAY MILLI SECONDS
//================================================================================
void vDelayXMilliSeconds(int iDelMilSec){
	//var
	unsigned int i,j;
	//handle all milli seconds
	for(i=0;i<iDelMilSec;i++){
		//delay 1 millisecond
		for(j=0;j<28750;j++){
		}//for
	}//for
}
//================================================================================
//  TOGGLE SOUND PITCH EIGHT OCTAVES
//================================================================================
void vToggleSoundPitchEightOctaves(void){
	//if timer0 range 3 is set (low range)
	if(SFRS(TCCR0,CS00_H)){
		//set timer0 to range 2 (high range)
		SFRX(TCCR0 ,CS00_L);
		//set timer1 to range 2 (high range)
	  SFRX(TCCR1B,CS10_L);

	}//if
	//if timer0 range 2 is set (high range)
		else{
		//set timer0 to range 3 (low range)
		SFRX(TCCR0 ,CS00_H);
		//set timer1 to range 3 (low range)
	  SFRX(TCCR1B,CS10_H);
	}//else
}
//================================================================================
//  ALL LEDS OFF
//================================================================================
void vAllLedsOff(void){
	//left brake led off
	SFRX(PORTC,BOD_LFT_L);
	//right brake led off
	SFRX(PORTC,BOD_RGT_L);
	//red system led off
	SFRX(PORTD,SLD_RED_L);
	//green system led off
	SFRX(PORTB,SLD_GRN_L);
	//track led off
	SFRX(PORTD,TRK_LED_L);
}
//================================================================================
//  TOGGLE ALL LEDS AT RANDOM
//	toggles brake/track leds extra to match 8 choices
//================================================================================
void vToggleAllLedsAtRandom(void){
	//get random value from 0-7
	switch((random()&0x07)){
		//toggle left brake led
		case 0: SFRT(PORTC,BOD_LFT); break;
		//toggle right brake led
		case 1: SFRT(PORTC,BOD_RGT); break;
		//toggle red system led
		case 2: SFRT(PORTD,SLD_RED); break;
		//toggle green system led
		case 3: SFRT(PORTB,SLD_GRN); break;
		//toggle track led
		case 4: SFRT(PORTD,TRK_LED); break;
		//toggle left brake led
		case 5: SFRT(PORTC,BOD_LFT); break;
		//toggle right brake led
		case 6: SFRT(PORTC,BOD_RGT); break;
		//toggle track led
		case 7: SFRT(PORTD,TRK_LED); break;
	}//switch
}
//================================================================================
//	INIT ALL PORTS AS INPUTS AND OUTPUTS
//================================================================================
void vInitAllPortsAsInputsAndOutputs(void){

  //disable all output pull-up resistors
  //SFRX(SFIOR,PUD_H);

  //+-------------------------------------------------------------------------------------------+
  //| DDRB =  Data Direction Register port B                                                    |
  //|                                                                                           |
  //| FWD_RGT = Forward Right engine                                                            |
  //| REV_RGT = Reverse Right engine                                                            |
  //| IR1_TXD = InfraRed Transmit data (connection1, connected to R16) carrier input            |
  //| SPD_RGT = Speed of Right engine                                                           |
  //| SPD_LFT = Speed of Left engine                                                            |
  //| SLD_GRN = System LeD Green                                                                |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| right engine off, ir-tx carrier off, left/right engine speed zero, green system led off   |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|port name  |   PB7   |   PB6   |   PB5   |   PB4   |   PB3   |   PB2   |   PB1   |   PB0   |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |    2    |    1    |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|pin number |   10    |    9    |   19    |   18    |   17    |   16    |   15    |   14    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name|  XTAL2  |  XTAL1  |REV_RGT_X|FWD_RGT_X|IR1_TXD_X|SPD_RGT_X|SPD_LFT_X|SLD_GRN_X|
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( DDRB   ,RESERVED |RESERVED |REV_RGT_O|FWD_RGT_O|IR1_TXD_O|SPD_RGT_O|SPD_LFT_O|SLD_GRN_O);
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( PORTB  ,RESERVED |RESERVED |REV_RGT_H|FWD_RGT_H|IR1_TXD_L|SPD_RGT_L|SPD_LFT_L|SLD_GRN_L);
  //+-------------------------------------------------------------------------------------------+

  //+-------------------------------------------------------------------------------------------+
  //| DDRC =  Data Direction Register port C                                                    |
  //|                                                                                           |
  //| VPL_SNS = V+ Sense                                                                        |
  //| SWI_JNC = Switch Junction                                                                 |
  //| TRS_LFT = Tracksensor Left                                                                |
  //| TRS_RGT = Tracksensor Right                                                               |
  //| BOD_LFT = Break and Odometer Left                                                         |
  //| BOD_RGT = Break and Odometer Right                                                        |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| supply voltage measurement enable, switch detection by interrupt enable,                  |
  //| left/right track sensors enable, left/right break leds enable                             |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|port name  |   PC7   |   PC6   |   PC5   |   PC4   |   PC3   |   PC2   |   PC1   |   PC0   |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|pin number |    -    |    1    |   28    |   27    |   26    |    25   |    24   |   23    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name|    -    |  RESET  |VPL_SNS  |SWI_JNC  |TRS_LFT  |TRS_RGT  |BOD_LFT  |BOD_RGT  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( DDRC   ,RESERVED |RESERVED |VPL_SNS_I|SWI_JNC_I|TRS_LFT_I|TRS_RGT_I|BOD_LFT_O|BOD_RGT_O);
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( PORTC  ,RESERVED |RESERVED |VPL_SNS_N|SWI_JNC_N|TRS_LFT_N|TRS_RGT_N|BOD_LFT_L|BOD_RGT_L);
  //+-------------------------------------------------------------------------------------------+

  //+-------------------------------------------------------------------------------------------+
  //| DDRD =  Data Direction Register port D                                                    |
  //|                                                                                           |
  //| BOD_COM = Breaks and Odoleds Common connection                                            |
  //| TRK_LED = Track Led                                                                       |
  //| FWD_LFT = Forward Left engine                                                             |
  //| REV_LFT = Reverse Left engine                                                             |
  //| SWI_IAC = Switches Interrupt And Control                                                  |
  //| SLD_RED = System Led Red                                                                  |
  //| IR2_TXD = InfraRed Transmit data (connection2, connected to D10) modulation input         |
  //| IR_RXD  = InfraRed Receive data                                                           |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| enable breakleds, trackled off, left engine off, switch sensor enable,                    |
  //| red system led off, tx-ir modulator off, rx-ir enable                                     |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|port name  |   PD7   |   PD6   |   PD5   |   PD4   |   PD3   |   PD2   |   PD1   |   PD0   |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |     2   |     1   |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|pin number |   13    |   12    |   11    |    6    |    5    |     4   |     3   |    2    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name|BOD_COM_X|TRK_LED_X|REV_LFT_X|FWD_LFT_X|SWI_IAC_X|SLD_RED_X|IR2_TXD_X|IR_RXD_X |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( DDRD   ,BOD_COM_O|TRK_LED_O|REV_LFT_O|FWD_LFT_O|SWI_IAC_I|SLD_RED_O|IR2_TXD_O|IR_RXD_I ); 
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( PORTD  ,BOD_COM_L|TRK_LED_L|REV_LFT_H|FWD_LFT_H|SWI_IAC_N|SLD_RED_L|IR2_TXD_H|IR_RXD_N ); 
  //+-------------------------------------------------------------------------------------------+

}

//================================================================================
//  INIT TIMER COUNTER 0
//================================================================================
void vInitTimerCounter0(void){
  //+-------------------------------------------------------------------------------------------+
  //| TCCR0 = Timer/Counter Control Register                                                    |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| CSnn = Clock Source                                                                       |
  //| 000 = no clock source, timer/counter stopped                                              |
  //| 001 = 8MHz/   1 = 8.000.000Hz => /256 = 31250.00Hz =     32us                             |
  //| 010 = 8MHz/   8 = 1.000.000Hz => /256 =  3906.25Hz =    256us                             |
  //| 011 = 8MHz/  64 =   125.000Hz => /256 =   488.28Hz =  2.048us                             |
  //| 100 = 8MHz/ 256 =    31.250Hz => /256 =   122.07Hz =  8.192us                             |
  //| 101 = 8MHz/1024 =     7.813Hz => /256 =    30.52Hz = 32.768us                             |
  //| 110 = External clock source on T0 pin. Clock on falling edge                              |
  //| 111 = External clock source on T0 pin. Clock on rising edge                               |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| use clkio/1024 that makes freerunning frequency of 30.52Hz                                |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|           |    -    |    -    |    -    |    -    |    -    | Timer0  | Timer0  | Timer0  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |    2    |    1    |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name|RESERVED |RESERVED |RESERVED |RESERVED |RESERVED | CS02_X  | CS01_X  | CS00_X  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( TCCR0  ,RESERVED |RESERVED |RESERVED |RESERVED |RESERVED | CS02_L  | CS01_H  | CS00_H  );
  //+-------------------------------------------------------------------------------------------+


  //+-------------------------------------------------------------------------------------------+
  //| TIFR = Timer/Counter Interrupt Flag Register                                              |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| OCF2     = output compare flag 2 (set if timer/counter2 = OCR2)                           |
  //| TOV2     = timer/counter2 overflow flag                                                   |
  //| ICF1     = Timer/Counter1, Input Capture Flag (if capture event on pin ICP1)              |
  //| OCF1A    = Timer/Counter1, Output Compare A Match Flag (if TCNT1 = OCR1A)                 |
  //| OCF1B    = Timer/Counter1, Output Compare B Match Flag (if TCNT1 = OCR1B)                 |
  //| TOV1     = Timer/Counter1, Overflow Flag (cleared by interrupthandler or manual writing 1)|
  //| RESERVED = reserved                                                                       |
  //| TOV0     = Timer/Counter0, Overflow Flag (cleared by interrupthandler or manual writing 1)|
  //|                                                                                           |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| eventually use register for overflow detection                                            |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|           | Timer2  | Timer2  | Timer1  | Timer1  | Timer1  | Timer1  |    -    | Timer0  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |    2    |    1    |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name| OCF2_X  | TOV2_X  | ICF1_X  | OCF1A_X | OCF1B_X | TOV1_X  |RESERVED | TOV0_X  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//SFRX ( TIFR   , OCF2_X  | TOV2_X  | ICF1_X  | OCF1A_X | OCF1B_X | TOV1_X  |RESERVED | TOV0_X  );
  //+-------------------------------------------------------------------------------------------+


  //+-------------------------------------------------------------------------------------------+
  //| TIMSK = Timer/Counter Interrupt Mask Register                                             |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //| OCIE2    = timer/counter2, output-compare-match interrupt enable                          |
  //| TOIE2    = timer/counter2, overflow interrupt enable                                      |
  //| TICIE1   = timer/counter1, input-capture interrupt enable                                 |
  //| OCIE1A   = timer/counter1, equal to output-compare-A-match register, interrupt enable     |
  //| OCIE1B   = timer/counter1, equal to output-compare-B-match register, interrupt enable     |
  //| TOIE1    = timer/counter1 overflow interrupt enable                                       |
  //| RESERVED = unused                                                                         |
  //| TOIE0    = timer/counter0 overflow interrupt enable                                       |
  //|                                                                                           |
  //+-------------------------------------------------------------------------------------------+
  //| enable timer/counter0 interrupt                                                           |
  //+-------------------------------------------------------------------------------------------+
  //|                                                                                           |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|           | Timer2  | Timer2  | Timer1  | Timer1  | Timer1  | Timer1  |    -    | Timer0  |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|bit number |    7    |    6    |    5    |    4    |    3    |    2    |    1    |    0    |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  //|signal name| OCIE2_X | TOIE2_X |TICIE1_X |OCIE1A_X |OCIE1B_X | TOIE1_X |RESERVED | TOIE0_X |
  //+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
  SFRX ( TIMSK  ,                                                                       TOIE0_L );
  //+--------------------------------------------

⌨️ 快捷键说明

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