示例#1
0
文件: midipult.c 项目: wesen/midipult
void set_led(unsigned char sel_pin, unsigned char led_pin) {
  SET_PIN_OUTPUT(LED_BUTTON_PORT, led_pin);
  SET_PIN_LOW(LED_BUTTON_PORT, led_pin);
  SET_PIN_OUTPUT(LED_BUTTON_SEL_PORT, sel_pin);
  if (LED_STATUS(sel_pin * led_pin)) {
    SET_PIN_HIGH(LED_BUTTON_SEL_PORT, sel_pin);
  } else {
    SET_PIN_LOW(LED_BUTTON_SEL_PORT, sel_pin);
  }
}
示例#2
0
inline void MULTIPLEX_Setup()
{
	//BIT_HIGH(MULTIPLEX_1_PORT, MULTIPLEX_1_PIN);
	//BIT_HIGH(MULTIPLEX_2_PORT, MULTIPLEX_2_PIN);
	//BIT_HIGH(MULTIPLEX_3_PORT, MULTIPLEX_3_PIN);
	SET_PIN_OUTPUT(MULTIPLEX_1_DDR, MULTIPLEX_1_PIN);
	SET_PIN_OUTPUT(MULTIPLEX_2_DDR, MULTIPLEX_2_PIN);
	SET_PIN_OUTPUT(MULTIPLEX_3_DDR, MULTIPLEX_3_PIN);
	
	// Timer 0 running multiplexing
	TCCR0 |= (1 << CS01) | (1 << CS00); // Set prescaler and start the timer
	TIMSK |= (1 << TOIE0); // Set interrupt on overflow
}
示例#3
0
//////////////////////////////////////////////////////////////////////
// Returns 0 for no errors = the ACK bit from the slave
unsigned short I2C_Wr(unsigned short data) {
  unsigned short ret=0,i;

   // grab the data
   for(i = 0; i < 8; i++) {
   
      I2C_SCL_0; // Clock low
      if (data & 0x80) I2C_SDA_1; else I2C_SDA_0; // Data output
      data <<= 1;   // Next data bit.
      I2C_delay();  // low T/2.
      
      I2C_SCL_1;    // Clock released to high.
      I2C_delay();  // high T/2.
   }

   // get ACK or NACK
   I2C_SCL_0;
   I2C_SDA_1;    // Release the  data line
   SET_PIN_INPUT(I2C_SDA_PIN);
   I2C_delay();  // low T/2.
   
   I2C_SCL_1;
   // Sample the ACK
   ret = I2C_SDA_IN;
   I2C_delay();  // high T/2.
   
   I2C_SCL_0;    // Return clock to safe state
   SET_PIN_OUTPUT(I2C_SDA_PIN);

   return ret;
}
示例#4
0
void I2C_Init(unsigned long speed) {
   // must do following in one go else port takes time to do it so R-M-F stops it.
   SET_PIN_OUTPUT(I2C_SDA_PIN|I2C_SCL_PIN);
   I2C_SDA_1; // release data  (high).
   I2C_SCL_1; // release clock (high).
}