重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3957|回复: 4
打印 上一主题 下一主题

【实验室培训_201810期】 余超 第四周任务

[复制链接]

3

主题

6

帖子

39

积分

新手上路

Rank: 1

积分
39
跳转到指定楼层
楼主
发表于 2018-12-5 20:27:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
一、任务要求:
根据按键的输入状态输出不同温度类型(摄氏度、华氏温度、开氏温度) ,当温度低于某个值,LED灯亮,否则灭
二、工作环境:
开发环境:MDK  开发板:STM32F407ZGT6   外设:LED灯、按键开关、DHT11温湿度传感器。
三、实现步骤:
编写一个按键扫描函数,通个按键输入改变设定的一个变量的值,函数循环体中通过判断变量的值,来输出不同类型的温度值。
[C] syntaxhighlighter_viewsource syntaxhighlighter_copycode
#include "sys.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "LED.H"
u8 temperatures[2],humiditys[2];//¶¨òåζè¡¢êa¶è±äá¿
u8 flag=1;	
//¸′λDHT11
void DHT11_Rst()
{
	key_mod_out();
	key_out=0;
	delay_ms(20);
	key_out=1;
	delay_us(30);//à-¸ß30us£¬μè′yDHT11Ïìó|
}
//¼ì2aDHT11êÇ·ñ¿ÕÏD
u8 DHT11_Check()
{
	u8 wait_time=0;
	DHT11_Rst();
  key_mod_in();
	while(key_in&&wait_time<100)
	{
		delay_us(1);
		wait_time++;
	}
	if(wait_time>=100)
		return 0;
	else
	wait_time=0;
  while(!key_in&&wait_time<100)
	{
		delay_us(1);
		wait_time++;
	}
	if(wait_time>=100)
		return 0;
	  return 1;
}
//¶áò»¸öλ
u8 read_bit()
{
	u8 wait_time=0;
	while(key_in&&wait_time<100)//μè′y±äμí
	{
		delay_us(1);
		wait_time++;
	}
	wait_time=0;
  while(!key_in&&wait_time<100)//μè′y±ä¸ß
	{
		delay_us(1);
		wait_time++;
	}
	delay_us(40);
	if(key_in)
		return 1;
	else
		return 0;
}
//¶á3öò»¸ö×Ö½úμÄêy¾Y
u8 read_byte()
{
	u8 i,val=0;
	for(i=0;i<8;i++)
	{
		val<<=1;
		if(read_bit())
		{
		val|=0x01;
		}
	}
	return val;
}
//¶á3öÎÂêa¶èÖμ
u8 read_data(u8 *a,u8 *b)
{
	u8 i,buf[5],temp=0;
	if(DHT11_Check())
	{
		for(i=0;i<5;i++)
		{
		buf[i]=read_byte();
		}
		for(i=0;i<4;i++)
		{
		temp+=buf[i];
		}
		if(temp==buf[4])
		{
		//ζèÖμ
		a[0]=buf[2];
		a[1]=buf[3];
		//êa¶èÖμ
		b[0]=buf[0];
		b[1]=buf[1];
		}
		else 
			return 0;
	}
	else
		return 0;
	  return 1;
}
int main(void)
{
  float temperature,humidity;
 delay_init(168);
 uart_init(115200);
	LED_Init();
	key_init();
	if(DHT11_Check())
 {
	 printf("ok");
 }
 else 
	 printf("error");
   printf("\r\n");
 while(1)
{
  KEY_Scan(0);//μ÷óð′¼üé¨Ãèoˉêy£¬¸Ä±äflagÖ죬èôflag=1,êä3öéãêÏζ裬flag=2,êä3ö»aêÏζ裬flag=3,êä3ö¿aêÏζè
	delay_ms(2000);//ÿ2Ãë¶áè¡ò»′ÎÎÂêa¶è
	if(temperature<19.0)
	{
		LED0=0;
	}//èôζèμíóú19¶è£¬LED0áᣬ·ñÔòϨÃe
	else
	{
		LED0=1;
	}
  if(read_data(temperatures,humiditys))
	{	
		temperature=temperatures[0]+0.0039*temperatures[1];
		humidity=humiditys[0]+0.0039*humiditys[1];
		if(flag==1)
		{
		  printf("temperature:  %.2féãê϶è",temperature);
		}
			else if(flag==2)
		{
			printf("temperature:  %.2f»aê϶è",temperature*1.8+32);
		}
		else if(flag==3)
		{
			printf("temperature:  %.2f¿aê϶è",temperature+273);
		}
			printf("\r\n");
		  printf("humidity: °ù·ÖÖ®%.2f",humidity);
			printf("\r\n");	
	}
	else printf("unknow error\r\n");
}
}


DHT11.zip (493.19 KB, 下载次数: 1)
四、实现效果及问题:
编程过程中总会有大大小小的问题,语法错误倒是很容易排查,然而逻辑错误很难排查,通过MDK自带的调试功能可以找出问题所在

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

299

主题

684

帖子

7026

积分

学生管理组

Rank: 8Rank: 8

积分
7026
沙发
发表于 2018-12-6 22:05:23 | 只看该作者
回复

使用道具 举报

14

主题

69

帖子

485

积分

学生管理组

Rank: 8Rank: 8

积分
485
QQ
板凳
发表于 2018-12-7 20:25:20 | 只看该作者
你是用的STM32做的任务呀!
回复 支持 反对

使用道具 举报

3

主题

6

帖子

39

积分

新手上路

Rank: 1

积分
39
地板
 楼主| 发表于 2018-12-7 20:30:17 | 只看该作者
是的,学长,其实我是个16级电科的,这学期才加的实验室,我们都没开单片机的课,只有自学了。这学期才加的实验室,后来才发现大三加实验室是个贼尴尬的存在
回复 支持 反对

使用道具 举报

14

主题

69

帖子

485

积分

学生管理组

Rank: 8Rank: 8

积分
485
QQ
5#
发表于 2018-12-7 20:54:46 | 只看该作者
余超 发表于 2018-12-7 20:30
是的,学长,其实我是个16级电科的,这学期才加的实验室,我们都没开单片机的课,只有自学了。这学期才 ...

没事,大三加实验室也可以学,没关系
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-12-22 22:27 , Processed in 0.188248 second(s), 31 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表