基于C8051F410的am2305温湿度传感器的驱动编写
来源:互联网 发布:种子磁力搜索软件 编辑:程序博客网 时间:2024/05/09 14:29
这个和那个DHT11差不多,精度稍高一点,价格相差十倍呢。程序很有改进,中间如果连线出问题则会自动恢复。
直接上程序吧。
#include <C8051F410.h> // SFR declarations#include <stdio.h>#define SYSCLK 24500000 // SYSCLK frequency in Hz#define BAUDRATE 9600 // Baud rate of UART in bps#define WAIT 50000sbit led1 = P2^1;sbit led2 = P2^3;sbit dht_dat = P0^6;void Oscillator_Init (void);void Port_Init(void);void UART0_Init (void);void delay(unsigned int m);void delay_ms(unsigned int m);void read_am2305(void);void main (void){ PCA0MD &= ~0x40; // WDTE = 0 (clear watchdog timer // enable) Oscillator_Init (); // Initialize system clock to // 24.5MHz Port_Init(); UART0_Init(); // Initialize UART0 for printf's EA = 1; // Enable global interrupts printf("初始化完成!\n\n"); //delay_ms(5000); led1 = 1; led2 = 1; dht_dat = 1; while (1) { delay_ms(1000);read_am2305(); }}void Oscillator_Init (void){ OSCICN = 0x87; // Configure internal oscillator for // its highest frequency RSTSRC = 0x04; // Enable missing clock detector}void Port_Init (void){ P1SKIP |= 0x40; // Skip all analog pins XBR0 = 0x01; // UART0 TX and RX pins enabled XBR1 = 0x40; // Enable crossbar and weak pull-ups P0MDOUT |= 0x10; // Enable TX0 as a push-pull output}void UART0_Init (void){ SCON0 = 0x10; // SCON0: 8-bit variable bit rate // level of STOP bit is ignored // RX enabled // ninth bits are zeros // clear RI0 and TI0 bits if (SYSCLK/BAUDRATE/2/256 < 1) { TH1 = -(SYSCLK/BAUDRATE/2); CKCON |= 0x08; // T1M = 1; SCA1:0 = xx } else if (SYSCLK/BAUDRATE/2/256 < 4) { TH1 = -(SYSCLK/BAUDRATE/2/4); CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01 CKCON |= 0x01; } else if (SYSCLK/BAUDRATE/2/256 < 12) { TH1 = -(SYSCLK/BAUDRATE/2/12); CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00 } else if (SYSCLK/BAUDRATE/2/256 < 48) { TH1 = -(SYSCLK/BAUDRATE/2/48); CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10 CKCON |= 0x02; } else { while (1); // Error. Unsupported baud rate } TL1 = TH1; // Init Timer1 TMOD &= ~0xF0; // TMOD: timer 1 in 8-bit autoreload TMOD |= 0x20; TR1 = 1; // START Timer1 TI0 = 1; // Indicate TX0 ready}void delay(unsigned int m){while(m--);}void delay_ms(unsigned int m){while(m--)delay(2046);}unsigned char am2305_byte(void){unsigned char tmp1=0,wei=0;unsigned int cnt;for (wei=0;wei<8;wei++){tmp1*=2;delay(90);cnt=0;while(0==dht_dat){cnt++;if(cnt>WAIT){printf("\n传输错误1");return 0;}}delay(60);if(1==dht_dat){tmp1++;cnt=0;delay(80);while(1==dht_dat){cnt++;if(cnt>WAIT){printf("\n传输错误2");return 0;}}}}return tmp1;}void read_am2305(void){unsigned char wei=0;unsigned char humi_int=0,humi_float=0,temp_int=0,temp_float=0,chk_dat=0;float temp,humi;unsigned int cnt;dht_dat=1;printf("\n\n\n开始发送请求。\n");delay_ms(5);dht_dat=0;delay_ms(1);dht_dat=1;delay(40);cnt=0;while(1==dht_dat){cnt++;if(cnt>WAIT){printf("\n传感器未响应1。");return;}}//printf("下位机已响应--当前低电平。\n");delay(160);cnt=0;while(0==dht_dat){cnt++;if(cnt>WAIT){printf("\n传感器未响应2。");return;}}//printf("下位机已响应--当前高电平。\n");delay(160);cnt=0;while(1==dht_dat){cnt++;if(cnt>WAIT){printf("\n传感器未响应3。");return;}}//printf("下位机开始传送数据\n");//开始接收数据//湿度整数接受完成humi_int=am2305_byte();humi_float=am2305_byte();temp_int=am2305_byte();temp_float=am2305_byte();chk_dat=am2305_byte();humi=(float)((humi_int*256+humi_float)*0.1);temp=(float)(((temp_int & 0x7f)*256+temp_float)*0.1);if (temp_int & 0x80)temp=-temp;printf("湿度为:%2.1f%%。\n",humi);printf("温度为:%2.1f。\n",temp);printf("校验码为:%d\n",(int)chk_dat);// putchar('A');// scanf("%c",wei);// printf("\nyour input is:%d",(int)wei);if(chk_dat==(char)(humi_int+humi_float+temp_int+temp_float))printf("校验无误。\n",wei);elseprintf("校验出错。\n");delay_ms(2500);}
- 基于C8051F410的am2305温湿度传感器的驱动编写
- 基于C8051F410的DHT11温湿度传感器驱动编写
- STM32 AM2305高精度温湿度传感器驱动
- Linux的温湿度传感器DHT11驱动
- 温湿度传感器SHT20的驱动与使用
- 基于多传感器的温湿度检测系统
- 基于Tiny4412的DHT11温湿度传感器的Linux设备驱动的简单实现
- 温湿度传感器si7020-a20 linux驱动编写
- 温湿度传感器si7020-a20 linux驱动编写
- [嵌入式Linux驱动]S5PV210的DHT11温湿度传感器Linux驱动
- DHT11温湿度传感器的树莓派3 python3驱动代码
- 基于LPC11C14和DHT11的温湿度传感器编程
- 基于C8051F410的波形发生器设计
- 基于C8051F410的矩阵键盘设计
- 基于C8051F410的串口通信实验
- 温湿度传感器DHT11的数据处理
- 温湿度传感器驱动模块
- 基于CC2530的温湿度传感器和基于C#的应用界面设计
- [工具]Mac下非常好用的快捷终端Dterm
- boost库中的智能指针向上转换
- [ios 站在巨人的肩膀上开发 之]ASIHttpRequest 使用指南(一)
- 对Kernel panic-not syncing:No init found...init=option to kernel错误总结!
- Android: 3G/1G and 2G/2G kernels problem
- 基于C8051F410的am2305温湿度传感器的驱动编写
- Allan 译 The Little MongoDB Book (Chapter 2 - Updating)
- C fread的文本模式与二进制模式的区别
- File类
- firefox 最短路spfa 的应用
- 中文乱码问题
- 心静
- UML类图
- mysql编码查看及设置命令