DHT11在ARM7上的实现Word文档下载推荐.docx
- 文档编号:18528749
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:21
- 大小:796.90KB
DHT11在ARM7上的实现Word文档下载推荐.docx
《DHT11在ARM7上的实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DHT11在ARM7上的实现Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
(2)使用流程(即简明用户手册)
1.首先把传感器连接到2410开发板上,传感器1PIN连接开发板的5V供电端,2PIN数据端连接P0.2,3PIN悬空,4PIN连接GND(即接地);
继电器的信号输入的端口接P0.8另一端接地。
2.用户要在电脑上安装ARMDeveloperSuiteV1.2软件然后创建一个项目文件,打开项目程序程序(见附录)。
3.给2410主控板供电、连接J-link仿真器并连接控制板到电脑的串口
4.编译并调试程序,然后打开串口调试小助手,把波特率调为115200
(3)项目运行结果(软件抓图、硬件整个相片)
三、结论(结论、不足、进一步完善建议)
本次项目实现了对温湿度的检测、报警和控制的功能,并能通过程序修改相关的参数来对不同的场合进行检测,从而扩大了该项目成果的使用范围。
在做这个项目前期,由于没有把显示器显示数据的原理搞明白,所以没有用显示器来显示数据。
后期温湿度的显示是靠另外的软件来解决的,没有显示器也就给读取数据带来了麻烦。
另外这个项目是在2410控制板上实现的,所以如果要成为产品的话,就必须要用更便宜控制板替换2410,这样就可以减少成本。
软件的操作也是一个不足之处,由于ARMDeveloperSuiteV1.2软件本省的原因,编译和运行该项目的程序的过程有点复杂,这也是要改进的一点。
在项目选择硬件时,由于没有考虑的周到,造成三极管的导通电压需求较高。
2410控制板上可提供的信号电压是3.3V,所以外加了一个直流电源(两节干电池)供电,这一点需要改进---更换一个导通电压低于3.3V的三极管。
从图片上可以看到硬件的连线很乱,可以把这些硬件固定在一块电路板上,从而可以使整体看起来比较的简单。
以上是对本项目中出现的困难、不足和需要改进之处做的一个总结,我也从这个项目制作的过程中加深了对嵌入式的了解和认识。
2010/12/21秦嵩峰
附:
#include"
config.h"
#include<
stdio.h>
#defineUART_BPS115200/*定义通讯波特率*/
#defineLEDCON1(1<
<
22)//湿度过高报警
#defineLEDCON2(1<
23)//湿度过低报警
#defineLEDCON3(1<
24)//温度过高报警
#defineLEDCON4(1<
25)//温度过低报警
#defineBUZZE(1<
7)
#defineDATA_BUS(1<
2)
#defineCONTROL(1<
8)
#definewarning_temp_max25
#definewarning_temp_min20
#definewarning_rh_max50
#definewarning_rh_min43
uint8RH_H_temp;
//湿度数据
uint8RH_L_temp;
uint8RH_H;
uint8RH_L;
uint8T_H_temp;
//温度数据
uint8T_L_temp;
uint8T_H;
uint8T_L;
uint8check_temp;
uint8comdata;
uint32flag_0_time=0;
uint32flag_1_time=0;
uint32measure;
/*****************************************************
*延迟10us
*****************************************************/
voidDelay_10us()
{
T0TCR=0x03;
T0TCR=0x01;
//启动并复位T0TC;
T0IR=0x01;
while((T0IR&
0x01)==0);
//T0IR=0x01;
//T0TCR=0;
//计数器停止
}
/***************************************************
*延迟1us
****************************************************/
voidDelay_1us()//用汇编实现1us定时
__asm
{
NOP
}
/**********************************************
*延迟1ms
**********************************************/
voidDelay_1ms()
T1TCR=0x03;
T1TCR=0x01;
T1IR=0x01;
while((T1IR&
//T1TCR=0;
/***********************************************************************
*判别0函数,26-28us表示0
************************************************************************/
voidMeasureForZero()
uint8count;
for(count=0;
count<
4;
count++)
0x01)==0)
flag_0_time++;
}///测量30us,flag_0_time的值;
注意while语句也会占用时间
/**********************************************************************
*判别1函数
***********************************************************************/
voidMeasureForOne()
8;
flag_1_time++;
/*******************************************************************
*定时器0,1初始化函数
*******************************************************************/
voidTime0Init(void)
/*初始化定时器0,实现0.5S定时;
定时器1实现0.1秒定时。
Fcclk=Fosc*4=11.0592MHz*4=44.2368MHz
Fpclk=Fcclk/4=44.2368MHz/4=11.0592MHz
*/
T0TC=0;
T0PR=0;
//设置定时器1分频
T0MCR=0x03;
//匹配通道0匹配中断并复位T0TC
T0MR0=120;
//实现10us定时,(实际要大于10us,真实值约为10.85us)
voidTime1Init(void)
T1TC=0;
T1PR=0;
T1MCR=0x03;
T1MR0=11059;
//实现1ms定时
/**************************************************************************
*数据接收函数
**************************************************************************/
voidCOM(void)
uint8i;
uint32detect;
for(i=0;
i<
i++)
measure=0;
detect=0;
while(!
(IO0PIN&
DATA_BUS))//等待50us结束
detect++;
while((IO0PIN&
DATA_BUS)==4)
measure++;
if(measure<
flag_0_time)
comdata<
=1;
comdata|=0;
elseif((measure>
flag_0_time)&
&
(measure<
flag_1_time))
comdata|=1;
else
comdata<
comdata|=1;
}//for
//--------------------------------
//-----湿度读取子程序------------
//----以下变量均为全局变量--------
//----温度高8位==U8T_data_H------
//----温度低8位==U8T_data_L------
//----湿度高8位==U8RH_data_H-----
//----湿度低8位==U8RH_data_L-----
//----校验8位==U8checkdata-----
//----调用相关子程序如下----------
//----Delay_1ms();
Delay_10us();
COM();
voidRH(void)
uint8counter;
IO0CLR=DATA_BUS;
//将总线拉低18ms,发出开始信号
for(counter=0;
counter<
18;
counter++)
Delay_1ms();
//将总线拉高40us,等待传感器响应
IO0SET=DATA_BUS;
//主机设为输入判断从机响应信号
IO0DIR&
=(~DATA_BUS);
Delay_10us();
//Delay_10us();
//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行
if((IO0PIN&
DATA_BUS)==0)//有响应
//等待IO0PIN的响应信号
//while((IO0PIN&
DATA_BUS)==1);
DATA_BUS));
//等待80us的响应结束
COM();
RH_H_temp=comdata;
RH_L_temp=comdata;
T_H_temp=comdata;
T_L_temp=comdata;
check_temp=comdata;
if(check_temp==(RH_H_temp+RH_L_temp+T_H_temp+T_L_temp))
RH_H=RH_H_temp;
RH_L=RH_L_temp;
T_H=T_H_temp;
T_L=T_L_temp;
/****************************************************************************
*名称:
UART0_Ini()
*功能:
初始化串口0。
设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
*入口参数:
无
*出口参数:
****************************************************************************/
voidUART0_Ini(void)
{uint16Fdiv;
U0LCR=0x83;
//DLAB=1,可设置波特率
Fdiv=(Fpclk/16)/UART_BPS;
//设置波特率
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0x03;
UART0_SendByte()
向串口发送字节数据,并等待发送完毕。
data要发送的数据
voidUART0_SendByte(uint8data)
{U0THR=data;
//发送数据
while((U0LSR&
0x40)==0);
//等待数据发送完毕
UART0_SendStr()
向串口发送一字符串
srt要发送的字符串的指针
voidUART0_SendStr(charconst*str)
{while
(1)
{if(*str=='
\0'
)break;
UART0_SendByte(*str++);
//发送数据
uint8constSEND_STRING[]="
HelloWorld!
\n"
;
/*******************************************************
*主函数
********************************************************/
intmain()
uint32i;
//uint8data[4];
//用来存放接收到的数据
charstr[30];
PINSEL0=0x00000005;
//UART
PINSEL1=0x00000000;
IO0DIR=DATA_BUS;
UART0_Ini();
Time0Init();
Time1Init();
MeasureForOne();
MeasureForZero();
while
(1)
/*FlashLEDCON_23();
//10ms为单位的2s闪烁
FlashLEDCON_24();
//10us为单位的2s闪烁
FlashLEDCON_25();
//1us为单位的0.2s闪烁
IO0DIR=LEDCON1|LEDCON2|LEDCON3|DATA_BUS|CONTROL|BUZZE;
RH();
//每隔2s采样
2000;
//检查温度是否到报警值
if(RH_H>
warning_rh_max)
IO0CLR=LEDCON1;
IO0SET=LEDCON1;
if(RH_H<
warning_rh_min)
IO0CLR=LEDCON2;
IO0SET=LEDCON2;
if(T_H>
warning_temp_max)
IO0CLR=LEDCON3;
IO0SET=LEDCON3;
if(T_H<
warning_temp_min)
IO0CLR=LEDCON4;
IO0SET=CONTROL;
IO0SET=LEDCON4;
IO0CLR=CONTROL;
//蜂鸣器报警功能
if((T_H>
warning_temp_max)||(T_H)<
IO0CLR=BUZZE;
IO0SET=BUZZE;
//data[0]=RH_H;
//data[1]=RH_L;
//data[2]=T_H;
//data[3]=T_L;
sprintf(str,"
Humidity:
%2d.%3drh,Temp:
%2d.%3d°
C\n"
RH_H,RH_L,T_H,T_L);
UART0_SendStr(str);
//UART0_SendStr(SEND_STRING);
UART0_SendByte('
\n'
);
}//while
(1)
return1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DHT11 ARM7 实现