重工电子论坛

标题: 【实验室培训_201810期】 余超 第四周任务 [打印本页]

作者: 余超    时间: 2018-12-5 20:27
标题: 【实验室培训_201810期】 余超 第四周任务
一、任务要求:
根据按键的输入状态输出不同温度类型(摄氏度、华氏温度、开氏温度) ,当温度低于某个值,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=read_byte();
                }
                for(i=0;i<4;i++)
                {
                temp+=buf;
                }
                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自带的调试功能可以找出问题所在


作者: 李维强-15级    时间: 2018-12-6 22:05

作者: 鲁亮    时间: 2018-12-7 20:25
你是用的STM32做的任务呀!
作者: 余超    时间: 2018-12-7 20:30
是的,学长,其实我是个16级电科的,这学期才加的实验室,我们都没开单片机的课,只有自学了。这学期才加的实验室,后来才发现大三加实验室是个贼尴尬的存在
作者: 鲁亮    时间: 2018-12-7 20:54
余超 发表于 2018-12-7 20:30
是的,学长,其实我是个16级电科的,这学期才加的实验室,我们都没开单片机的课,只有自学了。这学期才 ...

没事,大三加实验室也可以学,没关系




欢迎光临 重工电子论坛 (http://www.cqutlab.cn/) Powered by Discuz! X3.1