包含程序源码,电路图
单片机源程序如下:
#include "../LPC177x_8x/LPC177x_8x.h"
#include "../LPC177x_8x/type.h"
#include "../ADC/adc.h"
#define BEEPON (LPC_GPIO3->CLR = 1ul << 30) /* 蜂鸣器工作 */
#define BEEPOFF (LPC_GPIO3->SET = 1ul << 30) /* 蜂鸣器不工作 */
#if ADC_DEBUG
#include "../UART/uart.h"
#endif
extern volatile uint32_t ADCValue[ADC_NUM];
extern volatile uint32_t ADCIntDone;
#if ADC_DEBUG
extern volatile uint32_t UART0Count;
extern volatile uint8_t UART0Buffer[BUFSIZE];
#endif
#if ADC_DEBUG
/*********************************************************************************************************
** 函数名称 :ConvertDigital
** 函数功能 :Convert Digital to ASCII
** 输入参数 : 字符
** 返回值 : ASCII字符
*********************************************************************************************************/
static uint8_t ConvertDigital ( uint8_t digit )
{
static uint8_t hex[] = "0123456789ABCDEF";
return hex[digit & 0xf];
}
#endif
/*********************************************************************************************************
** 函数名称:myDelay
** 函数描述:软件延时
** 输入参数:ulTime 延时大小
** 返回值 :无
*********************************************************************************************************/
//uint8_t tdata[5]={0x00,0x00,0x00,0x00,0x00};
uint8_t buf[7];
uint8_t sbuf,check;
void myDelay (uint32_t ulTime)
{
uint32_t i = 0;
while (ulTime--)
{
for (i = 0; i < 20000; i++);
}
}
void usDelay (uint32_t ulTime)
{
uint32_t i = 0;
while (ulTime--)
{
for (i = 0; i < 20; i++);
}
}
void DHT11_Rst(void)
{
LPC_GPIO3->DIR |= 1<<25; //SET OUTPUT
LPC_GPIO3->CLR = 1ul << 25 ; //拉低DQ
myDelay(20); //拉低至少18ms
LPC_GPIO3->SET = 1ul << 25; //DQ=1
usDelay(30); //主机拉高20~40us
}
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
uint8_t DHT11_Check(void)
{
uint8_t retry=0;
LPC_GPIO3->DIR &= ~(1 << 25); //SET INPUT
while (!(LPC_GPIO3->PIN & 1 << 25)&&retry<100)//DHT11会拉低40~80us
{
retry++;
usDelay(1);
}
if(retry>=100)
return 1;
else retry=0;
while ((LPC_GPIO3->PIN & 1 << 25)&&retry<100)//DHT11拉低后会再次拉高40~80us
{
retry++;
usDelay(1);
}
if(retry>=100)
return 1;
return 0;
}
//从DHT11读取一个位
//返回值:1/0
uint8_t DHT11_Read_Bit(void)
{
uint8_t retry=0;
while((LPC_GPIO3->PIN & 1 << 25)&&retry<100)//等待变为低电平
{
retry++;
usDelay(1);
}
retry=0;
while(!(LPC_GPIO3->PIN & 1 << 25)&&retry<100)//等待变高电平
{
retry++;
usDelay(1);
}
usDelay(40);//等待40us
if((LPC_GPIO3->PIN & 1 << 25))return 1;
else return 0;
}
//从DHT11读取一个字节
//返回值:读到的数据
uint8_t DHT11_Read_Byte(void)
{
uint8_t i,dat;
dat=0;
for (i=0;i<8;i++)
{
dat<<=1;
dat|=DHT11_Read_Bit();
}
return dat;
}
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
{
uint8_t i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)//读取40位数据
{
buf[i]=DHT11_Read_Byte();
}
buf[5] = 'r';
buf[6] = 'n';
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}
else return 1;
//return 0;
}
//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在
uint8_t DHT11_Init(void)
{
LPC_GPIO3->DIR |= 1<<25;
DHT11_Rst();
return DHT11_Check();
}
/*********************************************************************************************************
** 函数名称 :main
** 函数描述 :查询方式采集ADC0的电压,短接ADC_IN和P0.23(JP20)、TXD0和P0.2、RXD0和P0.3,
** 由UART0发送采集到的数据,波特率9600。
** 输入参数 : 无
** 返回值 : 系统返回值
*********************************************************************************************************/
int main (void)
{ uint32_t i,VEL;
uint32_t ADCSum = 0;
uint8_t kk, temperature, humidity;
uint8_t d1,d2,d3,d4;
SystemInit();
#if ADC_DEBUG /* 如果定义了调试则编译串口初始化 */
UARTInit(0, 9600);
#endif
ADCInit1( ADC_CLK ); /* ADC初始化 */
DHT11_Init();
LPC_GPIO3->DIR |= 1<<30; /* 设置P3.30为输出 */
LPC_GPIO3->SET |= 1<<30; //beep
LPC_GPIO3->DIR |= 1<<31;//led
LPC_GPIO3->SET |= 1<<31;
LPC_GPIO3->DIR |= 1<<25;//led
LPC_GPIO3->SET |= 1<<25;
LPC_GPIO0->DIR &= ~(1 << 12); /* 设置P0.12为输入 */
while(1)
{
ADCInit1( ADC_CLK );
for(i = 0; i < ADC_NUM; i++)
{
上一篇:以通俗易懂的话解释CM3内核时钟源
下一篇:LPC824低功耗下pin配置调试程序
推荐阅读最新更新时间:2024-11-09 04:00
设计资源 培训 开发板 精华推荐
- 抗噪声电容式触控 HMI 参考设计
- 电梯解决方案
- ATmega32U4 左移64 机械键盘 适用免费打样
- 51核心板
- 使用 AD5292 数字电位器和 ADA4091-4 运算放大器的可编程双向电流源
- 基于SMART ATSAMR21微控制器驱动LED的参考设计
- EVAL-ADM1030,基于 ACPI 温度监视器和 ADM1030 PWM 风扇控制器的评估板
- DC1495A,使用 LT2940 电源/电流监视器的演示板
- 【数电课设】电子游戏转盘
- DC1053A-A,使用 LTC3526EDC、0.8 至 5.5 Vin、1.8/3.3/5 Vout @ 100mA 高效同步升压转换器的演示板