DHT22 AS2302 STC15F261S2 24Mhz 通过串口1 现示
文件如下: Main.c文件
#include \#include \#include \#include
/************* 本地常量声明 **************/
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 位整型变量 */
typedef signed char S8; /* defined for signed 8-bits integer variable 号8位整型变量 */
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号8 有符无符号16
位整型变量 */
typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */ U8 U8FLAG,k;
U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; U8
U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U8 outdata[5]; //定义发送的字节数 U8 indata[5];
U8 count, count_r=0; //U8 str[3]={\U8 a[5];
U16 U16temp1,U16temp2; #define uchar unsigned char #define uint unsigned int
#define Data_0_time 4 sbit P2_0 = P2^0 ; sbit P2_1 = P2^1 ;
/************* 本地变量声明 **************/
/************* 本地函数声明 **************/ /*void SendData(U8 *a) { outdata[0] = a[0]; outdata[1] = a[1]; outdata[2] = a[2]; outdata[3] = a[3]; outdata[4] = a[4]; count = 1; SBUF=outdata[0]; } */
void COM(void)//读AM2302一个字节 {U8 i;
for(i=0;i<8;i++) { U8FLAG=2; while((!P2_0)&&U8FLAG++); delay_10us(4); U8temp=0;
if(P2_0)U8temp=1; U8FLAG=2; while((P2_0)&&U8FLAG++); if(U8FLAG==1)break;//超时则跳出for循环,//判断数据位是0还是1,如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1; U8comdata|=U8temp; } }
void RH(void) { P2_0=0; delay_ms(10); P2_0=1; //总线由上拉电阻拉高 主机延时20us delay_10us(4); P2_0=1;//主机设为输入 判断从机响应信号 if(!P2_0)//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 {U8FLAG=2; while((!P2_0)&&U8FLAG++);//判断从机是否发出 80us 的低电平响应信号是否结束 U8FLAG=2; while((P2_0)&&U8FLAG++);//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 COM(); //读AM2302一个字节 U8RH_data_H_temp=U8comdata; COM(); U8RH_data_L_temp=U8comdata; COM(); U8T_data_H_temp=U8comdata; COM(); U8T_data_L_temp=U8comdata; COM(); U8checkdata_temp=U8comdata; P2_0=1;
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);//数据校验
if(U8temp==U8checkdata_temp) {U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } } }
/************* 外部函数和变量声明 *****************/
/************* 串口1初始化函数 *****************/ void UART_config(void) { COMx_InitDefine COMx_InitStructure; //结构定义 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //使用波特率, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用BRT_Timer2) COMx_InitStructure.UART_BaudRate = 115200ul; //波特率, 一般 110 ~ 115200 COMx_InitStructure.UART_RxEnable = ENABLE; //接收允许, ENABLE或DISABLE COMx_InitStructure.BaudRateDouble = DISABLE; //波特率加倍, ENABLE或DISABLE COMx_InitStructure.UART_Interrupt = ENABLE; //中断允许, ENABLE或DISABLE COMx_InitStructure.UART_Polity = PolityLow; //中断优先级, PolityLow,PolityHigh COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //切换端口, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必须使用内部时钟) COMx_InitStructure.UART_RXD_TXD_Short = DISABLE; //内部短路RXD与TXD, 做中继, ENABLE,DISABLE USART_Configuration(USART1, &COMx_InitStructure); //初始化串口1 USART1,USART2 //PrintString1(\//SUART1发送一个字符串 }
/**********************************************/ void main(void) {
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库DHT22 AS2302 STC15F261S2 24Mhz 通过串口1 现示在线全文阅读。
相关推荐: