




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.#include /* common defines and macros */#include derivative.h /* derivative-specific definitions */#include /Keil library #define uchar unsigned char#define uint unsigned int#defineSMPLRT_DIV0x19/陀螺仪采样率,典型值:0x07(125Hz)#defineCONFIG0x1A/低通滤波频率,典型值:0x06(5Hz)#defineGYRO_CONFIG0x1B/陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)#defineACCEL_CONFIG0x1C/加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)#defineACCEL_XOUT_H0x3B#defineACCEL_XOUT_L0x3C#defineACCEL_YOUT_H0x3D#defineACCEL_YOUT_L0x3E#defineACCEL_ZOUT_H0x3F#defineACCEL_ZOUT_L0x40#defineTEMP_OUT_H0x41#defineTEMP_OUT_L0x42#defineGYRO_XOUT_H0x43#defineGYRO_XOUT_L0x44#defineGYRO_YOUT_H0x45#defineGYRO_YOUT_L0x46#defineGYRO_ZOUT_H0x47#defineGYRO_ZOUT_L0x48#definePWR_MGMT_10x6B/电源管理,典型值:0x00(正常启用)#defineWHO_AM_I0x75/IIC地址寄存器(默认数值0x68,只读)#defineSlaveAddress0xD0/IIC写入时的地址字节数据,+1为读取#define DataPort PORTA #define RS PORTB_PB1 /PTS_PTS7#define RW PORTB_PB2 /PTJ_PTJ7#define EN PORTB_PB3 /PTJ_PTJ6#define PSB PORTB_PB0#define SDA PORTB_PB4#define SCL PORTB_PB5float x1,y1,z1;int X,Y,Z,Q,W,E;char cy;uchar a=0,0x2e,0,0;uchar b=0,0,0,0x2e,0;uchar c=0,0,0,0x2e,0;uchar e=0,0,0,0x2e,0;void PLL_Init(void) /PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1) CLKSEL=0X00; / 初始化PLL前先使用外部晶振 PLLCTL_PLLON=1; / 开启 PLL SYNR=0x40 | 0x04; / pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz; REFDV=0x80 | 0x01; /*1_0x80|0x01; 2_ 3_0xc0|0x03 4_ 0x40|0x04; 5_0XC0 | 0X05;*/ POSTDIV=0x00; _asm(nop); / BUS CLOCK=40M _asm(nop); while(!(CRGFLG_LOCK=1); /等待PLL稳定 CLKSEL_PLLSEL =1; /fBUS采用根据PLL频率设定 DDRA= 0xFF; /Set PORTA Input DDRB= 0xFF; void PIT_Init(void)/定时中断初始化函数 2MS定时中断设置 PITCFLMT_PITE=0; /定时中断通道0关 PITCE_PCE0=1;/定时器通道0使能 PITMTLD0=199;/8位定时器初值设定。200分频,在40MHzBusClock下,为0.2MHz。即 5us PITLD0=599;/16位定时器初值设定。PITTIME*0.005MS=2ms PITMUX_PMUX0=0;/选择时基 PITINTE_PINTE0=1;/定时器中断通道0中断使能 PITCFLMT_PITE=1;/定时器通道0使能 void delays(int ms) int ii,jj; if (ms1) ms=1; for(ii=0;iims;ii+) for(jj=0;jj2;jj+); /busclk:16MHz-1ms (12*1335/16000)=1 6*8000/48000void delay(int ms) int ii,jj; if (ms1) ms=1; for(ii=0;iims;ii+) for(jj=0;jj2600;jj+); /busclk:16MHz-1ms (12*1335/16000)=1 6*8000/48000void delay_us(int n) while(n-)_asm(nop); _asm(nop); _asm(nop); _asm(nop); _asm(nop); void delayM(unsigned int t) unsigned int i,j; for(i=0;it;i+) for(j=0;j0) write_date(*s);s+;delays(1);void sda_high() /SDA高电平的产生 DDRB_DDRB4=1; SDA=1; _asm(nop); _asm(nop); _asm(nop); _asm(nop); return;/*/SDA低电平的产生/*void sda_low() /SDA低电平的产生 DDRB_DDRB4=1; SDA=0; _asm(nop); _asm(nop); _asm(nop); _asm(nop); return;/*/SCL高电平产生/*void scl_high() /SCL高电平产生 DDRB_DDRB5=1; SCL=1; _asm(nop); _asm(nop); _asm(nop); _asm(nop); return;/*/SCL低电平的产生/*void scl_low() /SCL低电平的产生 DDRB_DDRB5=1; SCL=0; _asm(nop); _asm(nop); _asm(nop); _asm(nop); return;/*/I2C起始信号/*void I2C_Start() sda_high(); /拉高数据线 scl_high(); /拉高时钟线 delayM(1); /延时 sda_low(); /产生下降沿 delayM(1); /延时 scl_low(); /拉低时钟线/*/I2C停止信号/*void I2C_Stop() sda_low(); /拉低数据线 scl_high(); /拉高时钟线 delayM(1); /延时 sda_high(); /产生上升沿 delayM(1); /延时/*/I2C发送应答信号/入口参数:ack (0:ACK 1:NAK)/*void I2C_SendACK(char ack) if(ack) sda_high(); else sda_low(); /写应答信号 scl_high(); /拉高时钟线 delayM(1); /延时 scl_low(); /拉低时钟线 delayM(1); /延时/*/I2C接收应答信号/*uchar I2C_RecvACK() DDRB_DDRB4=0; scl_high(); /拉高时钟线 DDRB_DDRB4=0; delayM(1); /延时 if(SDA=1) cy=1; else cy=0; / cy = SDA; /读应答信号 scl_low(); /拉低时钟线 delayM(1); /延时 DDRB_DDRB4=1; return cy;/*/向I2C总线发送一个字节数据/*void I2C_SendByte(uchar dat) uchar i; for (i=0; i8; i+) /8位计数器 if(dati)&0x80) sda_high(); else sda_low(); / SDA = cy; /送数据口 scl_high(); /拉高时钟线 delayM(1); /延时 scl_low(); /拉低时钟线 delayM(1); /延时 I2C_RecvACK();/*/从I2C总线接收一个字节数据/*uchar I2C_RecvByte() uchar i; uchar dat = 0,cy; sda_high(); /使能内部上拉,准备读取数据, DDRB_DDRB4=0; for (i=0; i8; i+) /8位计数器 dat = 1; scl_high(); /拉高时钟线 delayM(1); /延时 if(SDA=1) cy=1; else cy=0; dat |= cy; /读数据 scl_low(); /拉低时钟线 delayM(1); /延时 DDRB_DDRB4=1; return dat;/*/向I2C设备写入一个字节数据/*void Single_WriteI2C(uchar REG_Address,uchar REG_data) I2C_Start(); /起始信号 I2C_SendByte(SlaveAddress); /发送设备地址+写信号 I2C_SendByte(REG_Address); /内部寄存器地址, I2C_SendByte(REG_data); /内部寄存器数据, I2C_Stop(); /发送停止信号/*/从I2C设备读取一个字节数据/*uchar Single_ReadI2C(uchar REG_Address)uchar REG_data;I2C_Start(); /起始信号I2C_SendByte(SlaveAddress); /发送设备地址+写信号I2C_SendByte(REG_Address); /发送存储单元地址,从0开始I2C_Start(); /起始信号I2C_SendByte(SlaveAddress+1); /发送设备地址+读信号REG_data=I2C_RecvByte(); /读出寄存器数据I2C_SendACK(1); /接收应答信号I2C_Stop(); /停止信号return REG_data;/*/初始化MPU6050/*void InitMPU6050()Single_WriteI2C(PWR_MGMT_1, 0x00);/解除休眠状态Single_WriteI2C(SMPLRT_DIV, 0x07);Single_WriteI2C(CONFIG, 0x06);Single_WriteI2C(GYRO_CONFIG, 0x18);Single_WriteI2C(ACCEL_CONFIG, 0x01);/*/合成数据/*int GetData(uchar REG_Address)uchar H,L;H=Single_ReadI2C(REG_Address);L=Single_ReadI2C(REG_Address+1);return (H=0) b0=0x2b; else X=-X; b0=0x2d; if(Y=0) c0=0x2b; else Y=-Y; c0=0x2d; if(Z=0) e0=0x2b; el
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兴业银行南充市顺庆区2025秋招结构化面试15问及话术
- 华夏银行武汉市江夏区2025秋招半结构化面试题库及参考答案
- 中信银行杭州市拱墅区2025秋招笔试专业知识题专练及答案
- 华夏银行聊城市茌平区2025秋招结构化面试经典题及参考答案
- 招商银行惠州市惠阳区2025秋招笔试创新题型专练及答案
- 中信银行商丘市永城市2025秋招笔试热点题型专练及答案
- 招商银行长沙市雨花区2025秋招无领导小组面试案例库
- 兴业银行南京市浦口区2025秋招半结构化面试15问及话术
- 农发行内江市资中县2025秋招半结构化面试15问及话术
- 光大银行上海市奉贤区2025秋招笔试价值观测评题专练及答案
- GB/T 3785.1-2023电声学声级计第1部分:规范
- j11pro固件爵聆数播说明书
- 第四版环境工程微生物学课后习题答案
- 房地产营销渠道拓客培训
- 电容式电压互感器试验指导方案
- GB/T 10781.2-2022白酒质量要求第2部分:清香型白酒
- GB/T 23353-2009梨干技术规格和试验方法
- FZ/T 52003-2014丙纶短纤维
- 百善孝为先主题班会课件
- 招商银行智慧营销体系规划方案((2022年-2023年)-2022)
- 人教版小学数学六年级下册《斐波那契数列》课件
评论
0/150
提交评论