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

上传人:工**** 文档编号:567627066 上传时间:2024-07-21 格式:PDF 页数:8 大小:201.94KB
返回 下载 相关 举报
大气压检测GY68BMP180模块WINavr编译器编写_第1页
第1页 / 共8页
大气压检测GY68BMP180模块WINavr编译器编写_第2页
第2页 / 共8页
大气压检测GY68BMP180模块WINavr编译器编写_第3页
第3页 / 共8页
大气压检测GY68BMP180模块WINavr编译器编写_第4页
第4页 / 共8页
大气压检测GY68BMP180模块WINavr编译器编写_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

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

2、efine SCL68_L PORTB &= (1PB1)*define SCL68_H PORTB |= (1PB1)*define SDA68_DDR_0DDRB &= (1PB0)*define SDA68_DDR_1DDRB |= (1PB0)*define SCL68_DDR_0DDRB &= (1PB1)*define SCL68_DDR_1DDRB |= (1PB1)*define SDA68_RD_VAL(PINB & _BV(PB0)*define BMP085_SlaveAddress 0xee/定义器件在 IIC 总线中的从地址*define OSS 0 / Oversa

3、mpling Setting (note: code is not set up to use other OSSvalues)*define uchar unsigned charintdis_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;/*.v.起始信号*/void BM

4、P085_Start(void)SDA68_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_DDR_1;

5、/拉高,置为输出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);/延时.v.SDA68_DDR_1;/拉高,置为输出SCL68_DDR_1;/*接收应答信号*/uchar BMP085_RecvACK(void)SCL68_H;/拉高时钟线SDA68_D

6、DR_0;/拉低,置为输入SCL68_DDR_1;_delay_us(5);/延时if (SDA68_RD_VAL)HorL =1;elseHorL =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 = 1;/移出数据的最高位/SDA68

7、= CY;/送数据口if (dat&0x80) 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();.v./*从 IIC 总线接收一个字节数据*/uchar BMP085_RecvByte(void)uchar i,dat = 0;SDA68_H;SDA68_DDR_1;/使能部上拉,准备读取数据,for (i=0; i8; i+)/8 位计数器dat=1;SCL68_H;

8、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_Address);/发送存储单元地址BMP085_Start();/起始信

9、号BMP085_SendByte(BMP085_SlaveAddress+1);/发送设备地址+读信号msb = BMP085_RecvByte();/BUF0存储BMP085_SendACK(0);/回应 ACKlsb = BMP085_RecvByte();BMP085_SendACK(1);/最后一个数据需要回NOACKBMP085_Stop();/停止信号_delay_ms(5);_data = msb 15;x2 = (long) mc 4;/*conver085(temperature);lcd_show_char(1,0,bai);/LCD 显示,根据显示位置修改lcd_show

10、_char(1,1,shi);lcd_show_char(1,3,ge);/*b6 = b5 - 4000;x1 = (b2 * (b6 * b6 12) 11;x2 = ac2 * b6 11;x3 = x1 + x2;b3 = (long)ac1 * 4 + x3) + 2)/4;x1 = ac3 * b6 13;x2 = (b1 * (b6 * b6 12) 16;.v.x3 = (x1 + x2) + 2) 2;b4 = (ac4 * (unsigned long) (x3 + 32768) 15;b7 = (unsigned long) up - b3) * (50000 OSS);

11、if( b7 8) * (p 8);x1 = (x1 * 3038) 16;x2 = (-7357 * p) 16;pressure = p + (x1 + x2 + 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);lcd_show_char(2,9,shi);lcd_show_char(2,10,ge);/*altitude=44330.0*(1.0-pow(

12、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_char(1,11,bai);lcd_show_char(1,13,shi);lcd_show_char(1,14,ge);/*/*主程序*/*int

13、 main(void)DDRA=0xff;PORTA=0xff;DDRC=0xff;PORTC=0xff;_delay_ms(50);/上电延时init_lcd();/液晶初始化lcd_show_char(1,2,.);lcd_show_char(1,4,0XDF);/温度单位lcd_show_char(1,5,C);lcd_show_char(1,12,.);.v.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();/初始化 BMP085while(1)/循环bmp085Convert();_delay_ms(500);.v

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号