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

📄 陀螺仪.c

📁 陀螺仪的驱动程序,用ATMEGA16编写,使用AD7715做AD采集,16BIT精度.
💻 C
字号:
#include<avr/io.h>  
#include<stdio.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long 

#define RDY (PINA&_BV(5))

#define RES_1 PORTA|=_BV(5)
#define RES_0 PORTA&=~_BV(5)


static uint g_aAdValue[100]; //A/D 转换缓冲区

unsigned long int results=0;
uint jiaodu,zhong;
uint adc;
int vjiao;
long fx;
/*----------------------------------------------------------------------------
延时一些时间
------------------------------------------------------------------------------*/
void delay10ms(unsigned int x)
{
 unsigned char i,j,k;
 for(i=0;i<x;i++)
  for(j=0;j<10;j++)
   for(k=0;k<120;k++);
}
void delay(unsigned int x)
{
 
 while(x--)
 {;}
}
/*----------------------------------------------------------------------------
 初始化IO口
------------------------------------------------------------------------------*/
void IoInit(void)
{
 DDRA=0X0F;
 PORTA=0Xff;
 //DDRD=0Xff;
 //PORTD=0Xff;
}

void InitS() //初始化串口
{
 UBRRL=51;//设置波特率为9600
 UCSRB|=_BV(RXEN)|_BV(TXEN);//允许串口接受
// UCSR1B|=_BV(RXCIE);//允许串口中断
 
 
 
}

void SPI_SET(void)		   			 //SPI初始化
{
  	 DDRB=0XBE;						 //DRDY接PB1,设置PB1为输入口
	 PORTB=0XFF;
	 PORTB=0XEF&PORTB;				 //复位接PB4,此处为拉低PB4
	 SPCR=0X5c;	  					 //设置SPI使能,工作于主机状态,
	 								 //并设CPOL=0,CPHA=1,SPR1=0,SPR2=0
									 //SCK为对11.0592晶振的1/4分频
}
void WRITE_DATA(uchar i)			 //SPI发送数据
{
  	 uchar CLEAR;
	 SPDR=i;
	 while(!(SPSR&0X80));
	CLEAR=SPSR;
	CLEAR=SPDR;
}
uchar READ_DATA(void)	 			 //SPI接收数据
{
  	 
	  uchar data,clear;
	  SPDR=0x00;
 	  while(!(SPSR&0x80));
 	  clear=SPSR;
 	  data=SPDR;
	  return(data);
} 
void putbyte(uchar x)
{
while( !(UCSRA & (1<<UDRE)) );
UDR=x;
}

////////////////////////////////////////////////////////////////////////////////

uchar num(uchar x)
{
 switch(x)
 {
  case 0:x='0';break;
  case 1:x='1';break;
  case 2:x='2';break;
  case 3:x='3';break;
  case 4:x='4';break;
  case 5:x='5';break;
  case 6:x='6';break;
  case 7:x='7';break;
  case 8:x='8';break;
  case 9:x='9';break;
 }
 return x;
}
uint AD(void)
{
 uint result1,result2,ad;
 RES_1;
 while(RDY);
 WRITE_DATA(0x38);
 while(RDY);
 result1=READ_DATA();
 result2=READ_DATA();
 RES_0;
 ad=(result1<<8)+result2;
 return ad;
}
void InitTLY(void)
{
 uchar i;
 for(i=0;i<200;i++)
  {
   results+=AD();
  }
 zhong=results/200;
}
//****************************************************************************//
//                                                          				  //
//							 主函数											  //
//																			  //
//****************************************************************************//
int main(void)
{
uchar i;

IoInit();
InitS();
SPI_SET();
while(1)
 {

 adc=AD()/16;
 putbyte(0x58);
 putbyte(adc>>8);
 putbyte(adc&0xff);
 //vjiao=AD()-zhong;
 //if(vjiao>50){fx+=(vjiao*0.0461);}
 //else {vjiao=~vjiao+1;if(vjiao>50){fx-=(vjiao*0.0461);}}
// putbyte(num(adc/10000));
 //putbyte(num(adc%10000/1000));
 //putbyte(num(adc%1000/100));
 //putbyte(num(adc%100/10));
 //putbyte(num(adc%10));
 //putbyte('\n');
 delay10ms(1);

 }
}













⌨️ 快捷键说明

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