大气压检测GY68BMP180模块WINavr编译器编写

上传人:ly****51 文档编号:70161853 上传时间:2022-04-06 格式:DOC 页数:8 大小:36KB
收藏 版权申诉 举报 下载
大气压检测GY68BMP180模块WINavr编译器编写_第1页
第1页 / 共8页
大气压检测GY68BMP180模块WINavr编译器编写_第2页
第2页 / 共8页
大气压检测GY68BMP180模块WINavr编译器编写_第3页
第3页 / 共8页
资源描述:

《大气压检测GY68BMP180模块WINavr编译器编写》由会员分享,可在线阅读,更多相关《大气压检测GY68BMP180模块WINavr编译器编写(8页珍藏版)》请在装配图网上搜索。

1、./*/*大气压检测GY68 BMP180 模块编译器编写手头上有块BMP180气压传感模块,为了好玩,想用之作一车载气压表。在网上找AVR驱动未果,就用来自网络BMP085模块C51单片机IIC测试程序修改,测试成功,方便初学AVR的参考;听说BMP180航模上也可以用。效果图:模块:GY68 BMP180 编译器:单片机:MEGA16 供电 D*Y*/* #include #include #include #define SDA68_L PORTB &= (1PB0) #define SDA68_H PORTB |= (1PB0)#define SCL68_L PORTB &= (1PB

2、1) #define SCL68_H PORTB |= (1PB1)#define SDA68_DDR_0 DDRB &= (1PB0)#define SDA68_DDR_1 DDRB |= (1PB0) #define SCL68_DDR_0 DDRB &= (1PB1)#define SCL68_DDR_1 DDRB |= (1PB1)#define SDA68_RD_VAL(PINB & _BV(PB0)#define BMP085_SlaveAddress 0*ee /定义器件在IIC总线中的从地址#define OSS 0 / Oversampling Setting (note:

3、code is not set up to use other OSS values)#define uchar unsigned char int dis_data; /变量short ac1;short ac2; short ac3; unsigned short ac4;unsigned short ac5;unsigned short ac6;short b1; short b2;short mb;short mc;short md;uchar HorL;uchar ge,shi,bai,qian,wan,shiwan;/*起始信号*/void BMP085_Start(void) S

4、DA68_H; /拉高数据线 SCL68_H;SDA68_DDR_1;SCL68_DDR_1; /拉高时钟线 _delay_us(5); /延时 SDA68_L; /产生下降沿 _delay_us(5); /延时 SCL68_L; /拉低时钟线SDA68_DDR_1;/拉高,置为输出SCL68_DDR_1;/*停顿信号*/void BMP085_Stop(void)SDA68_L; /拉低数据线 SCL68_H; SDA68_DDR_1;SCL68_DDR_1; /拉高时钟线 _delay_us(5); /延时 SDA68_H; /产生上升沿 _delay_us(5); /延时SDA68_DD

5、R_1;/拉高,置为输出SCL68_DDR_1;/*发送应答信号入口参数:ack (0:ACK 1:NAK)*/void BMP085_SendACK(uchar ack)SDA68_DDR_1;/拉高,置为输出SCL68_DDR_1;if (ack) SDA68_H;/写应答else SDA68_L; SCL68_H; /拉高时钟线 _delay_us(5); /延时 SCL68_L; /拉低时钟线 _delay_us(5); /延时SDA68_DDR_1;/拉高,置为输出SCL68_DDR_1;/*接收应答信号*/uchar BMP085_RecvACK(void)SCL68_H; /拉高

6、时钟线 SDA68_DDR_0;/拉低,置为输入SCL68_DDR_1;_delay_us(5); /延时 if (SDA68_RD_VAL) HorL =1;else HorL =0; SCL68_L; /拉低时钟线 _delay_us(5); /延时SDA68_DDR_1;/拉高,置为输出SCL68_DDR_1;return HorL;/*向IIC总线发送一个字节数据*/void BMP085_SendByte(char dat) SDA68_DDR_1;/DDRA |=_BV(PA0);SCL68_DDR_1;uchar i; for (i=0; i8; i+) /8位计数器 /dat

7、= 1; /移出数据的最高位 /SDA68 = CY; /送数据口 if (dat&0*80) SDA68_H;else SDA68_L;dat = 1;SCL68_H; /拉高时钟线 _delay_us(5); /延时 SCL68_L; /拉低时钟线 _delay_us(5); /延时 SDA68_DDR_1;/拉高,置为输出SCL68_DDR_1; BMP085_RecvACK();/*从IIC总线接收一个字节数据*/uchar BMP085_RecvByte(void) uchar i,dat = 0; SDA68_H;SDA68_DDR_1; /使能部上拉,准备读取数据,for (i=

8、0; i8; i+) /8位计数器 dat=1;SCL68_H;SCL68_DDR_0;_delay_us(5);dat |= SDA68_RD_VAL;SCL68_L;SCL68_DDR_1;_delay_us(5);return dat;/*/读出BMP085部数据,连续两个/*short Multiple_read(uchar ST_Address) uchar msb, lsb; short _data; BMP085_Start(); /起始信号 BMP085_SendByte(BMP085_SlaveAddress); /发送设备地址+写信号 BMP085_SendByte(ST_

9、Address); /发送存储单元地址 BMP085_Start(); /起始信号 BMP085_SendByte(BMP085_SlaveAddress+1); /发送设备地址+读信号 msb = BMP085_RecvByte(); /BUF0存储 BMP085_SendACK(0); /回应ACK lsb = BMP085_RecvByte(); BMP085_SendACK(1); /最后一个数据需要回NOACK BMP085_Stop(); /停顿信号 _delay_ms(5); _data = msb 15; *2 = (long) mc 4; /* conver085(tempe

10、rature); lcd_show_char(1,0,bai); /LCD显示,根据显示位置修改 lcd_show_char(1,1,shi); lcd_show_char(1,3,ge); /* b6 = b5 - 4000; *1 = (b2 * (b6 * b6 12) 11; *2 = ac2 * b6 11; *3 = *1 + *2; b3 = (long)ac1 * 4 + *3) + 2)/4; *1 = ac3 * b6 13; *2 = (b1 * (b6 * b6 12) 16; *3 = (*1 + *2) + 2) 2; b4 = (ac4 * (unsigned l

11、ong) (*3 + 32768) 15; b7 = (unsigned long) up - b3) * (50000 OSS); if( b7 8) * (p 8); *1 = (*1 * 3038) 16; *2 = (-7357 * p) 16; pressure = p + (*1 + *2 + 3791) 4);conver085(pressure);lcd_show_char(2,4,shiwan); /LCD显示,根据显示位置修改 lcd_show_char(2,5,wan); lcd_show_char(2,6,qian); lcd_show_char(2,7,bai); l

12、cd_show_char(2,9,shi);lcd_show_char(2,10,ge);/*altitude=44330.0*(1.0-pow(float)(pressure)/101325.0,1.0/5.255); /根据芯片手册提供的公式计算海拔高度altitude *= 100; /转换成厘米单位的高度值,调用时再换算成带小数的高度值,提高精度 conver085(altitude);lcd_show_char(1,8,shiwan); /LCD显示,根据显示位置修改 lcd_show_char(1,9,wan); lcd_show_char(1,10,qian); lcd_show

13、_char(1,11,bai);lcd_show_char(1,13,shi);lcd_show_char(1,14,ge); /*/*主程序*/*int main(void) DDRA=0*ff;PORTA=0*ff;DDRC=0*ff;PORTC=0*ff; _delay_ms(50); /上电延时 init_lcd(); /液晶初始化lcd_show_char(1,2,.); lcd_show_char(1,4,0*DF); /温度单位 lcd_show_char(1,5,C); lcd_show_char(1,12,.);lcd_show_char(1,15,m);/高度单位lcd_show_char(2,2,P); /显示压强 lcd_show_char(2,3,:); lcd_show_char(2,8,.); lcd_show_char(2,11,h); /气压单位 lcd_show_char(2,12,p); lcd_show_char(2,13,a);Init_BMP085(); /初始化BMP085 while(1) /循环 bmp085Convert(); _delay_ms(500);.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!