Exemple #1
0
void LCD_write_data(unsigned char Recdata) //写数据
{
    uint16_t PORT_DATA, tmpCmd = 0;
    Delay_1ms(2);

    //LCD1602_RS=1; //RS=1
    GPIO_SetBits(LCD1602_RS_PORT, LCD1602_RS_PIN);
    Delay_1ms(2);

    PORT_DATA = GPIO_ReadInputData(LCD1602_DB_PORT);
    PORT_DATA &= (~LCD1602_DB_MASK);

    tmpCmd = (uint16_t)(LCD_SWAP_High4Bits(Recdata) & 0xf0) << 2;
    PORT_DATA |= tmpCmd;
    GPIO_Write(LCD1602_DB_PORT, PORT_DATA);		//    写高四位
    //LCD_DATA&=0X0f; //    清高四位
    //LCD_DATA|=Recdata&0xf0; //    写高四位

    LCD_en_write();

    Recdata=Recdata<<4; //    低四位移到高四位

    PORT_DATA = GPIO_ReadInputData(LCD1602_DB_PORT);
    PORT_DATA &= (~LCD1602_DB_MASK);

    tmpCmd = 0;
    tmpCmd = (uint16_t)(LCD_SWAP_High4Bits(Recdata) & 0xf0) << 2;
    PORT_DATA |= tmpCmd;
    GPIO_Write(LCD1602_DB_PORT, PORT_DATA);   //    写低四位
    //LCD_DATA&=0X0f; //    清高四位
    //LCD_DATA|=Recdata&0xf0; //    写低四位

    LCD_en_write();
}
int main( void )
{
  u32 Point = 0;
  u16 OV7725_ID = 0;

  SystemInit();
  GPIO_Config();

  Delay_1ms(1);
  SSD1963_Config();
  Delay_1ms(50);
  SSD1963_Init();
  Delay_1ms(20);
  TFT_Clear(WHITE);

  // SCCB Init
  SCCB_Init();
  Delay_1ms(2);

  // Read ID & Check
  OV7725_ID = OV_ReadID();
  while(OV7725_ID != 0x7721) {
    LED_R = ~LED_R;
    Delay_100ms(1);
  }

  // OV7725 Init
  while(1==OV_Init());
  Cam_Start();

  while(1) {
    LED_G = ~LED_G;
    Delay_100ms(1);
  }
}
Exemple #3
0
/*====================================================================================================*/
int main( void )
{
  u8 i = 0;

  GPIO_Config();
  TIMER_Config();

  nrf_gpio_pin_set(LED_0);
  nrf_gpio_pin_clear(LED_1);

  while(1) {

//    nrf_gpio_pin_toggle(LED_0);
    nrf_gpio_pin_toggle(LED_1);
    for(i = 0; i<7; i++) {
      LED_PORT = ~(0x01<<i);
      Delay_1ms(DELAY_TIME);
    }
//    nrf_gpio_pin_toggle(LED_0);
    nrf_gpio_pin_toggle(LED_1);
    for(i = 7; i>0; i--) {
      LED_PORT = ~(0x01<<i);
      Delay_1ms(DELAY_TIME);
    }
  }
}
Exemple #4
0
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
	uchar Key_Value;  //读出的键值
	L1602_init();
	L1602_string(1,1,"  4*4 KeyBoard  ");
	L1602_string(2,1,"You Press The    ");
	while(1)
	{
		P1 = 0xf0;
		if(P1 != 0xf0)
		{
			Delay_1ms(20);	//按键消抖
			if(P1 != 0xf0)
			{
				Delay_1ms(20);	//按键消抖
				if(P1 != 0xf0)
				{
					Key_Value = Keyscan();		
				}
			}
		}
		L1602_char(2,15,Key_Value / 10 + 48);
		L1602_char(2,16,Key_Value % 10 + 48);		
	}
}
/*====================================================================================================*/
void SF595_Reset( void )
{
  SF595_MR_L;
  Delay_1ms(1);
  SF595_MR_H;
  Delay_1ms(1);
}
Exemple #6
0
//正弦测试 
void VS_Sine_Test(void) {
	VS_HD_Reset();
	VS_WR_Cmd(0x0b, 0X2020);	  //设置音量	 
	VS_WR_Cmd(SPI_MODE, 0x0820);	  //进入VS10XX的测试模式     
	while (VS_DREQ_STATE == 0)
		;     //等待DREQ为高
	//printf("mode sin:%x\n",VS_RD_Reg(SPI_MODE));
	//向VS10XX发送正弦测试命令:0x53 0xef 0x6e n 0x00 0x00 0x00 0x00
	//其中n = 0x24, 设定VS10XX所产生的正弦波的频率值,具体计算方法见VS10XX的datasheet
	VS_SPI_SpeedLow(); 	//低速 
	VS_XDCS_LOW; 	//选中数据传输
	VS_SPI_ReadWriteByte(0x53);
	VS_SPI_ReadWriteByte(0xef);
	VS_SPI_ReadWriteByte(0x6e);
	VS_SPI_ReadWriteByte(0x24);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	Delay_1ms(100);
	VS_XDCS_HIGH;
	//退出正弦测试
	VS_XDCS_LOW; 	//选中数据传输
	VS_SPI_ReadWriteByte(0x45);
	VS_SPI_ReadWriteByte(0x78);
	VS_SPI_ReadWriteByte(0x69);
	VS_SPI_ReadWriteByte(0x74);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	Delay_1ms(100);
	VS_XDCS_HIGH;

	//再次进入正弦测试并设置n值为0x44,即将正弦波的频率设置为另外的值
	VS_XDCS_LOW; 	//选中数据传输
	VS_SPI_ReadWriteByte(0x53);
	VS_SPI_ReadWriteByte(0xef);
	VS_SPI_ReadWriteByte(0x6e);
	VS_SPI_ReadWriteByte(0x44);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	Delay_1ms(100);
	VS_XDCS_HIGH;
	//退出正弦测试
	VS_XDCS_LOW; 	//选中数据传输
	VS_SPI_ReadWriteByte(0x45);
	VS_SPI_ReadWriteByte(0x78);
	VS_SPI_ReadWriteByte(0x69);
	VS_SPI_ReadWriteByte(0x74);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	VS_SPI_ReadWriteByte(0x00);
	Delay_1ms(100);
	VS_XDCS_HIGH;
}
Exemple #7
0
void LCD_en_write(void)    //液晶使能
{
    Delay_1ms(1);
    GPIO_SetBits(LCD1602_EN_PORT, LCD1602_EN_PIN);

    Delay_1ms(1);

    GPIO_ResetBits(LCD1602_EN_PORT, LCD1602_EN_PIN);
    Delay_1ms(1);
}
/*==============================================================================================*/
void HMC5883_Init( void )
{
	u8 HMC5883_Init_Data[3] = {
			0x70, /* HMC5883_REG_CONF_A */
			0xA0, /* HMC5883_REG_CONF_B */
			0x00  /* HMC5883_REG_MODE */
		};
	I2C_DMA_WriteReg(HMC5883_I2C_ADDR, HMC5883_REG_CONF_A, HMC5883_Init_Data,   1); Delay_1ms(10);
	I2C_DMA_WriteReg(HMC5883_I2C_ADDR, HMC5883_REG_CONF_B, HMC5883_Init_Data+1, 1); Delay_1ms(10);
	I2C_DMA_WriteReg(HMC5883_I2C_ADDR, HMC5883_REG_MODE,   HMC5883_Init_Data+2, 1); Delay_1ms(10);
}
Exemple #9
0
/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void L1602_init(void)
{
	wcmd(0x38);
	Delay_1ms(5);
	wcmd(0x38);
	Delay_1ms(5);
	wcmd(0x38);
	Delay_1ms(5);
	wcmd(0x38);
	wcmd(0x08);	
	wcmd(0x0c);
	wcmd(0x04);
	wcmd(0x01);
}
Exemple #10
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main()
{
    RCC_Configuration();
    GPIO_Configuration();
    SysTick_Configuration();
    TIM_Configuration();

    while(1)
    {
        GPIO_SetBits(GPIOC,GPIO_PIN_0);
        Delay_1ms(1000);
        GPIO_ResetBits(GPIOC, GPIO_PIN_0);
        Delay_1ms(1000);
    }    
}
Exemple #11
0
void main()
{
	while(1)
	{
		WEI1=0;
		Write_164(Table[1]);
		Delay_1ms(11);
		WEI1=1;
		
		WEI2=0;
		Write_164(Table[2]);
		Delay_1ms(11);
		WEI2=1;
	}
}
Exemple #12
0
void TW8836_Reset(void)
{
    GPIO_ResetBits(TW8836_RST_PORT, TW8836_RST_PIN);
    Delay_1ms(50);
    GPIO_SetBits(TW8836_RST_PORT, TW8836_RST_PIN);
///	Delay_1ms(100);
}
Exemple #13
0
void Delay_Nms(u16 Cnt)
{
  while (Cnt--)
  {
    Delay_1ms();
  }  
}
Exemple #14
0
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
	int i,temp,flag;
	while(1)
	{
		temp = KEY();
		if(temp != 0)				   //这里判断是否按键按下,按下后,才改变要显示的值
		{
			flag = temp;			   //存标志
		}
		for(i=0;i<8;i++)
		{
			P0=0;
			P2=tabP2[i];
			if(flag == 1)
			{  	
				P0=tabP0Z[i];		   //显示“左”
			}
			if(flag == 2)
			{
				P0=tabP0ZHONG[i];	   //显示 中
			}
			if(flag == 3)
			{
				P0=tabP0Y[i];		   //显示“右”
			}
			Delay_1ms(2);
		}		
	}
}
Exemple #15
0
/*====================================================================================================*/
int main( void )
{
  int32_t Temp = 0;

  GPIO_Config();
  TEMP_Config();
  RS232_Config();

  Delay_1ms(1);

  RS232_SendStr("\r\nHello World!\r\n\r\n");

  while(1) {
    LED_1_Toggle();
    LED_2_Toggle();
    LED_3_Toggle();
    LED_4_Toggle();
    Delay_100ms(5);

    RS232_SendStr("Chip Temp : ");
    Temp = (TEMP_GetTemp()*25);
    RS232_SendNum(Type_D, 5, Temp);
    RS232_SendStr(" deg\r\n");
  }
}
Exemple #16
0
//////////////////////////////////////////////////////////////
// Delay 4us
//////////////////////////////////////////////////////////////
 void MTN5_i2c_Delay(void)
{
    u32 i = 50;//,k=0;
	//for(;k<10;k++)
    while (i--) {}
	Delay_1ms(1);
}
Exemple #17
0
void LCD_write_command(unsigned char command)    //写指令
{
    uint16_t PORT_DATA, tmpCmd = 0;

    //LCD1602_RS=0; //RS=0
    GPIO_ResetBits(LCD1602_RS_PORT, LCD1602_RS_PIN);
    Delay_1ms(2);

    PORT_DATA = GPIO_ReadInputData(LCD1602_DB_PORT);
    PORT_DATA &= (~LCD1602_DB_MASK);
    //GPIO_Write(LCD1602_DB_PORT, PORT_DATA);

    tmpCmd = ((uint16_t)(LCD_SWAP_High4Bits(command) & 0xf0)) << 2;
    PORT_DATA |= tmpCmd;
    GPIO_Write(LCD1602_DB_PORT, PORT_DATA);		//    写高四位

    LCD_en_write();

    command=command<<4; //    低四位移到高四位

    PORT_DATA = GPIO_ReadInputData(LCD1602_DB_PORT);
    PORT_DATA &= (~LCD1602_DB_MASK);
    //GPIO_Write(LCD1602_DB_PORT, PORT_DATA);

    tmpCmd = 0;
    tmpCmd = ((uint16_t)(LCD_SWAP_High4Bits(command) & 0xf0)) << 2;
    PORT_DATA |= tmpCmd;
    GPIO_Write(LCD1602_DB_PORT, PORT_DATA);   //    写低四位
    //LCD_DATA|=command&0xf0;

    LCD_en_write();
}
Exemple #18
0
void overrun(void)
{
  volatile unsigned char *base = (unsigned char *)0x8300;
	unsigned char data_L, resend;	

	data_L = readRTL(CR);
	writeRTL(CR, 0x21);
	Delay_1ms(2);
	writeRTL(RBCR0, 0x00);
	writeRTL(RBCR1, 0x00);
	if(!(data_L & 0x04))
		resend = 0;
	else if(data_L & 0x04)
	{
		data_L = readRTL(ISR);
		if((data_L & 0x02) || (data_L & 0x08))
	    	resend = 0;
	    else
	    	resend = 1;
	}
	
	writeRTL(TCR, 0x02);
	writeRTL(CR, 0x22);
	writeRTL(BNRY, RXSTART_INIT);
	writeRTL(CR, 0x62);
	writeRTL(CURR, RXSTART_INIT);
	writeRTL(CR, 0x22);
	writeRTL(ISR, 0x10);
	writeRTL(TCR, TCR_INIT);
	
	writeRTL(ISR, 0xFF);
}
void MPU9255_Init( MPU_InitTypeDef *MPUx )
{
  uint8_t MPU6555_InitData[MPU9255_InitRegNum][2] = {
    {0x10, MPU6555_USER_CTRL},      // 
    {0x00, MPU6555_PWR_MGMT_1},     // 
    {0x00, MPU6555_PWR_MGMT_2},     // Enable Acc & Gyro
    {0x07, MPU6555_CONFIG},         // DLPF_CFG[2:0] = 111;
    {0x18, MPU6555_GYRO_CONFIG},    // +-2000dps
    {0x08, MPU6555_ACCEL_CONFIG},   // +-4G
    {0x48, MPU6555_ACCEL_CONFIG_2}, // Set Acc Data Rates
    {0x30, MPU6555_INT_PIN_CFG},    // 
    {0x4D, MPU6555_I2C_MST_CTRL},   // I2C Speed 400 kHz

    // Set Slave to Read AK8963
    {0x8C, MPU6555_I2C_SLV0_ADDR},  // AK8963_I2C_ADDR ( 7'b000_1100 )
    {0x00, MPU6555_I2C_SLV0_REG},   // AK8963_WIA ( 0x00 )
    {0x81, MPU6555_I2C_SLV0_CTRL},  // Enable
    {0x01, MPU6555_I2C_MST_DELAY_CTRL}
  };

  MPU6555_InitData[4][0] = MPUx->MPU_Gyr_FullScale;       // MPU6500_GYRO_CONFIG
  MPU6555_InitData[3][0] = MPUx->MPU_Gyr_LowPassFilter;   // MPU6500_CONFIG
  MPU6555_InitData[5][0] = MPUx->MPU_Acc_FullScale;       // MPU6500_ACCEL_CONFIG
  MPU6555_InitData[6][0] = MPUx->MPU_Acc_LowPassFilter;   // MPU6500_ACCEL_CONFIG_2

  for(uint8_t i = 0; i < MPU9255_InitRegNum; i++) {
    MPU9255_WriteReg(MPU6555_InitData[i][1], MPU6555_InitData[i][0]);
    Delay_1ms(1);
  }

//  while(MPU9255_Check() != SUCCESS);
//  MPU9255_SetSpeed(SPIx_SPEED_HIGH);
}
/*=====================================================================================================*/
int main( void )
{
  u16 freq = PWM_FREQ_MIN;
	u16 duty = PWM_DUTY_MAX_205k;
	u8 state = STATE_FREQ;
	
  GPIO_Config();
  PWM_Config();

  while(1) {
    LED_G = ~LED_G;

    if(KEY_WU == 1){
			if(state == STATE_FREQ){
				freq++;
			  if(freq>=PWM_FREQ_MIN){
          freq = PWM_FREQ_MIN;
          LED_R = ~LED_R;
        }
        FREQ = freq-1;
		  	PWM1 = freq>>1;
      }else if(state == STATE_DUTY){
				duty++;
				if(duty>= PWM_DUTY_MAX_205k){
					duty = PWM_DUTY_MAX_205k;
					state = STATE_FREQ;
				}
				PWM1 = duty;
			}
			Delay_1ms(10);
    }else if(KEY_BO == 1){
int8_t MPU6050_Init( MPU_InitTypeDef *MPUx )
{
    uint8_t status = ERROR;
    uint8_t MPU6050_InitData[MPU6050_InitRegNum][2] = {
        {0x01, MPU6050_PWR_MGMT_1},   // Reset device
        {0x03, MPU6050_CONFIG},       //
        {0x18, MPU6050_GYRO_CONFIG},  // +-2000dps
        {0x08, MPU6050_ACCEL_CONFIG}, // +-4G
        {0x32, MPU6050_INT_PIN_CFG},  //
        {0x00, MPU6050_USER_CTRL}     //
    };

//  MPU6050_InitData[6][0] = MPUx->MPU_Gyr_FullScale;       // MPU6500_GYRO_CONFIG
//  MPU6050_InitData[8][0] = MPUx->MPU_Gyr_LowPassFilter;   // MPU6500_CONFIG
//  MPU6050_InitData[7][0] = MPUx->MPU_Acc_FullScale;       // MPU6500_ACCEL_CONFIG
//  MPU6050_InitData[9][0] = MPUx->MPU_Acc_LowPassFilter;   // MPU6500_ACCEL_CONFIG_2

    for(uint8_t i = 0; i < MPU6050_InitRegNum; i++) {
        Delay_1ms(2);
        MPU6050_WriteReg(MPU6050_InitData[i][1], MPU6050_InitData[i][0]);
    }

    /* Check Device ID */
    status = MPU6050_Check();
    if(status != SUCCESS)
        return ERROR;

    return SUCCESS;
}
Exemple #22
0
/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
int main()
{
    RCC_Configuration();
    GPIO_Configuration();
    GD_EVAL_LEDInit(LED1);
    SysTick_Configuration();
    TIMER_Configuration();

    while(1)
    {
        GD_EVAL_LEDOn(LED1);
        Delay_1ms(1000);
        GD_EVAL_LEDOff(LED1);
        Delay_1ms(1000);
    }
}
Exemple #23
0
void Wait_Until_Ready(void)
{
    GPIO_ResetBits(LCD1602_RS_PORT, LCD1602_RS_PIN);		//RS_L;  //所读为状态位
    GPIO_SetBits(LCD1602_RW_PORT, LCD1602_RW_PIN);    	//RW_R;  //设为读状态  En_H;
    Delay_1ms(1);		//delay_nus(10);
    //while(!(P1^7 == 0)); //不断循环,直至BF=0
    GPIO_ResetBits(LCD1602_EN_PORT, LCD1602_EN_PIN);		//En_L;
}
Exemple #24
0
//硬复位MP3
//返回1:复位失败;0:复位成功	   
u8 VS_HD_Reset(void) {
	u8 retry = 0;
	VS_RST_LOW;
	Delay_1ms(20);
	VS_XDCS_HIGH; //取消数据传输
	VS_XCS_HIGH; //取消数据传输
	VS_RST_HIGH;
	while (VS_DREQ_STATE == 0 && retry < 200) //等待DREQ为高
	{
		retry++;
		Delay_1us(50);
	};
	Delay_1ms(20);
	if (retry >= 200)
		return 1;
	else
		return 0;
}
void bno_delay_ms( uint32_t delay_time )
{
   while( delay_time-- )
#if defined( __GNUC__ )
    printf( "Delay" );
#else
       Delay_1ms();
#endif
}
/*==============================================================================================*/
void MS5611_Init( MS5611_ST* COEFF )
{
  u8 ReadC[6][2] = {0};
  u8 ReadD[2][3] = {0};

  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_RESET);
  Delay_1ms(10);

  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_PROM_COEFF_1);
	MS5611_ReadData(ReadC[0], MS5611_I2C_ADDR, 2);
  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_PROM_COEFF_2);
	MS5611_ReadData(ReadC[1], MS5611_I2C_ADDR, 2);
  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_PROM_COEFF_3);
	MS5611_ReadData(ReadC[2], MS5611_I2C_ADDR, 2);
  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_PROM_COEFF_4);
	MS5611_ReadData(ReadC[3], MS5611_I2C_ADDR, 2);
  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_PROM_COEFF_5);
	MS5611_ReadData(ReadC[4], MS5611_I2C_ADDR, 2);
  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_PROM_COEFF_6);
	MS5611_ReadData(ReadC[5], MS5611_I2C_ADDR, 2);
  Delay_1ms(10);

  COEFF->C[1] = (u16)((ReadC[0][0] << 7) | ReadC[0][1]);
  COEFF->C[2] = (u16)((ReadC[1][0] << 7) | ReadC[1][1]);
  COEFF->C[3] = (u16)((ReadC[2][0] << 7) | ReadC[2][1]);
  COEFF->C[4] = (u16)((ReadC[3][0] << 7) | ReadC[3][1]);
  COEFF->C[5] = (u16)((ReadC[4][0] << 7) | ReadC[4][1]);
  COEFF->C[6] = (u16)((ReadC[5][0] << 7) | ReadC[5][1]);

  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_D1_OSR_4096);
  Delay_1ms(10);
  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_ADC);
	MS5611_ReadData(ReadD[0], MS5611_I2C_ADDR, 3);

  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_D2_OSR_4096);
  Delay_1ms(10);
  MS5611_WriteCom(MS5611_I2C_ADDR, MS5611_ADC);
	MS5611_ReadData(ReadD[1], MS5611_I2C_ADDR, 3);

  COEFF->D[1] = (u32)((ReadD[0][0] << 15) | (ReadD[0][1] << 7) | ReadD[0][2]);
  COEFF->D[2] = (u32)((ReadD[1][0] << 15) | (ReadD[1][1] << 7) | ReadD[1][2]);

  MS5611_Calculate(COEFF);
}
void MPU9250_Mag_WriteReg( uint8_t writeAddr, uint8_t writeData )
{
  uint8_t  status = 0;
  uint32_t timeout = MAG_READ_DELAY;

  MPU9250_WriteReg(MPU6500_I2C_SLV4_ADDR, AK8963_I2C_ADDR);
  Delay_1ms(1);
  MPU9250_WriteReg(MPU6500_I2C_SLV4_REG, writeAddr);
  Delay_1ms(1);
  MPU9250_WriteReg(MPU6500_I2C_SLV4_DO, writeData);
  Delay_1ms(1);
  MPU9250_WriteReg(MPU6500_I2C_SLV4_CTRL, MPU6500_I2C_SLVx_EN);
  Delay_1ms(1);

  do {
    status = MPU9250_ReadReg(MPU6500_I2C_MST_STATUS);
    Delay_1ms(1);
  } while(((status & MPU6500_I2C_SLV4_DONE) == 0) && (timeout--));
}
uint8_t MPU9250_Init( MPU_InitTypeDef *MPUx )
{
  uint8_t status = ERROR;
  uint8_t MPU6500_InitData[MPU6500_InitRegNum][2] = {
    {0x80, MPU6500_PWR_MGMT_1},     // Reset Device
    {0x01, MPU6500_PWR_MGMT_1},     // Clock Source
    {0x30, MPU6500_USER_CTRL},      // Set I2C_MST_EN, I2C_IF_DIS
    {0x00, MPU6500_PWR_MGMT_2},     // Enable Acc & Gyro
    {0x07, MPU6500_CONFIG},         // DLPF_CFG[2:0] = 111;
    {0x18, MPU6500_GYRO_CONFIG},    // +-2000dps
    {0x08, MPU6500_ACCEL_CONFIG},   // +-4G
    {0x48, MPU6500_ACCEL_CONFIG_2}, // Set Acc Data Rates
    {0x10, MPU6500_INT_PIN_CFG},    // Set INT_ANYRD_2CLEAR
    {0x10, MPU6500_INT_ENABLE},     // 
    {0x4D, MPU6500_I2C_MST_CTRL},   // I2C Speed 400 kHz
  };
  uint8_t AK8963_InitData[AK8963_InitRegNum][2] = {
    {0x01, AK8963_CNTL2},           // Reset Device
    {0x06, AK8963_CNTL1},           // Continuous measurement mode 2
  };

  MPU6500_InitData[5][0] = MPUx->MPU_Gyr_FullScale;       // MPU6500_GYRO_CONFIG
  MPU6500_InitData[4][0] = MPUx->MPU_Gyr_LowPassFilter;   // MPU6500_CONFIG
  MPU6500_InitData[6][0] = MPUx->MPU_Acc_FullScale;       // MPU6500_ACCEL_CONFIG
  MPU6500_InitData[7][0] = MPUx->MPU_Acc_LowPassFilter;   // MPU6500_ACCEL_CONFIG_2
  AK8963_InitData[1][0] |= MPUx->MPU_Mag_FullScale;

  for(uint8_t i = 0; i < MPU6500_InitRegNum; i++) {
    MPU9250_WriteReg(MPU6500_InitData[i][1], MPU6500_InitData[i][0]);
    Delay_1ms(1);
  }

  status = MPU9250_Check();
  if(status != SUCCESS)
    return ERROR;

  Delay_10ms(1);

#ifdef _USE_MAG_AK8963
  for(uint8_t i = 0; i < AK8963_InitRegNum; i++) {
    MPU9250_Mag_WriteReg(AK8963_InitData[i][1], AK8963_InitData[i][0]);
    Delay_10ms(1);
  }

  MPU9250_WriteReg(MPU6500_I2C_SLV0_REG, AK8963_ST1);
  MPU9250_WriteReg(MPU6500_I2C_SLV0_ADDR, AK8963_I2C_ADDR | 0x80);
  MPU9250_WriteReg(MPU6500_I2C_SLV0_CTRL, 0x80 | 8);
#endif

  MPU9250_SetSpeed(SPIx_SPEED_HIGH);
  Delay_10ms(1);

  return SUCCESS;
}
void main(void)
{
	uchar Key_Value;  //读出的键值		
	InitLed();
	InitKey();
	while(1)
	{
		P0 = 0xf0;//亮P0 = 0xff闪
                 //P1 = 0xff;			
		if(P0 != 0xf0)
		{
			Delay_1ms(15);	//按键消抖
			if(P0 != 0xf0)
			{
				Key_Value = Keyscan();		
			}
		}	         
		P1 = table[Key_Value % 16];		//显示低位键值		
		Delay_1ms(5);
	}
}
Exemple #30
0
void init_I2C1(void)
{

    init_I2C1_lowlevel();

    Delay_1ms(100);
    I2C_write(L3G4200D_ADDR, CTRL_REG1, 0x0F); // X,Y,Z eksenlerini aktif et ve 100Hz data çıkış frekansı 
    I2C_write(L3G4200D_ADDR, CTRL_REG2, 0x00); 
    I2C_write(L3G4200D_ADDR, CTRL_REG3, 0x00); //eğer istenilirse sensörün int2 (data hazır) interuptı kullanılabilir
    I2C_write(L3G4200D_ADDR, CTRL_REG4, 0x00); //250 DPS
    I2C_write(L3G4200D_ADDR, CTRL_REG5, 0x00);
}