野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 27487|回复: 7

OLED动态显示+按键设定温度值

[复制链接]
发表于 2018-11-9 20:57:04 | 显示全部楼层 |阅读模式
#include "stm32f4xx.h"
#include "usart.h"
#include "SysTick.h"
#include "ds18b20.h"
#include "oled.h"
#include <stdio.h>
#include "led.h"
#include "dh11.h"
#include "key.h"
//用于存储格式化后字符串的数组
unsigned  char cStr [ 10 ]; //ds18b20

unsigned  char cStr1 [ 10 ]; //dh11 湿度

unsigned  char cStr2 [ 10 ];//dh11 温度

//按键温度格式化存储数组

unsigned  char WDcStr [ 10 ]; //dh11 湿度

unsigned  char SDcStr [ 10 ];//dh11 温度


unsigned char  key    [10];

unsigned char SDtemp1=0 ;

unsigned char temp=0;

float temperature;   //ds18b20
//dh11
float temperature1;

float temperature2;

int uctemp ;
int untemp1;

DHT11_Data_TypeDef DHT11_Data;


int main(void)
{       
   uint8_t uc,DS18B20Id[8];

  /*初始化USART,配置模式为 115200 8-N-1*/
  Debug_USART_Config();

        /* 系统定时器初始化 */
        SysTick_Init();
       
        LED_GPIO_Config();       
        Key_GPIO_Config();
        I2C_Configuration();//配置CPU的硬件I2C
        OLED_Init();    //初始化OLED
       
        OLED_CLS();//清屏       

       
        if(DS18B20_Init()==0)
        {
                printf("DS18B20初始化成功\n");
        }
        else
        {
                printf("DS18B20初始化失败\n");
                printf("请将传感器正确插入到插槽内\n");
                /* 停机 */
                while(1)
                {}                       
        }               
        DS18B20_ReadId ( DS18B20Id  );           // 读取 DS18B20 的序列号
       
        printf("\r\nDS18B20的序列号是: 0x");

        for ( uc = 0; uc < 8; uc++ )             // 打印 DS18B20 的序列号
        printf ( "%.2x", DS18B20Id[uc]);
        printf("\n");
       
  while(1)
        {
               
                temperature=DS18B20_Get_Temp();
               
               
                printf("DS18B20读取到的温度为:%0.3f\n",temperature);
               
                sprintf ( (char*)cStr, "%0.3f",        temperature);
               
                  
                        /*调用DHT11_Read_TempAndHumidity读取温湿度,若成功则输出该信息*/
                if( Read_DHT11 ( & DHT11_Data ) == SUCCESS)
                {
                        printf("\r\n读取DHT11成功!\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n",\
                       
                        DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);
                       
                        temperature1=DHT11_Data.humi_int+DHT11_Data.humi_deci;
                       
                        temperature2=DHT11_Data.temp_int+DHT11_Data.temp_deci;
                       
                        sprintf ( (char*)cStr1, "%0.2f ", temperature1);
                       
                        sprintf ( (char*)cStr2, "%0.2f", temperature2);
                       
                       
                        }               
                else
                {
                  printf("Read DHT11 ERROR!\r\n");
                }

        //sprintf把temperature的值格式化到字符串里的%d位置,格式化的结果存储在cStr中
    //要转换浮点型变量可以使用 %f

                       

    //显示字符串,把cStr作为输入进行显示。以下函数是液晶的字符串显示函数,可根据自己的液晶驱动修改


                //显示汉字程序
   //当前温度
                OLED_ShowCN(0,0,0);                                       
                OLED_ShowCN(1*16,0,1);       
                OLED_ShowCN(2*16,0,2);       
                OLED_ShowCN(3*16,0,3);       
//动态显示温度
               
         OLED_ShowStr(5*16,0,cStr,2);               
       
        //当前湿度
       
                OLED_ShowCN(0,2,0);                                       
                OLED_ShowCN(1*16,2,1);       
                OLED_ShowCN(2*16,2,4);       
                OLED_ShowCN(3*16,2,5);       
       
                OLED_ShowStr(5*16,2,cStr1,2);
                         
       

                OLED_ShowCN(0,4,11);                                       
                OLED_ShowCN(1*16,4,12);       
                OLED_ShowCN(2*16,4,13);       
                OLED_ShowCN(3*16,4,14);       
                OLED_ShowCN(4*16,4,15);       
               

                OLED_ShowCN(0,6,11);                                       
                OLED_ShowCN(1*16,6,12);       
                OLED_ShowCN(2*16,6,4);       
                OLED_ShowCN(3*16,6,5);       
                OLED_ShowCN(4*16,6,15);       


if ( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON)
                {
               
                       
       
               
                                temp++;
                       
                        if(temp==40)
                        {
                          temp=0;
                                OLED_CLS();//清屏       
                               
                        }
                       
                       
                 uctemp=temp;
                       
                        printf(":%0.3d\n",uctemp);

                        sprintf ( (char*)WDcStr, "%d",uctemp );

           OLED_ShowStr(6*16,4,WDcStr,2);
                       
                       
       }
               

                //设置key2          
if ( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON)
                {
               
       
               
               
               
                                SDtemp1++;
                       
                        if(SDtemp1==30)
                        {
                          SDtemp1=0;
                                        OLED_CLS();//清屏       
                        }
                       
                        untemp1=SDtemp1;
                       
       
                        sprintf ( (char*)SDcStr, "%d",        untemp1 );

                OLED_ShowStr(6*16,6,SDcStr,2);
                       
               
                         
                 }
                 
                 
           Delay_ms(100);   

       
        }


       
       
}

               



               
       

按键+oled 动态设定温度

按键+oled 动态设定温度
回复

使用道具 举报

发表于 2018-11-10 08:44:29 | 显示全部楼层
不错
回复

使用道具 举报

发表于 2018-11-10 11:02:37 | 显示全部楼层
本帖最后由 ZSR20181017 于 2018-11-10 11:05 编辑

66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-10 18:46:43 | 显示全部楼层
程序源码 附上 因为只是随机测试 不是工程项目  拿来参考就好了 之前第一次用OLED的时候  我也很头疼动态显示数字 这个 问题  现在既然解决了 大家一起快乐 就完事了
如果有其他问题  可以问就好了  我帖子隔一段时间  就会看下。。。。

OLED9663 温度湿度设定程序.rar

757.99 KB, 下载次数: 336

回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-19 20:43:03 | 显示全部楼层
谢谢,太好了正好急需
回复 支持 反对

使用道具 举报

发表于 2020-3-20 17:41:30 | 显示全部楼层
为啥我不行呢
就是没办法显示动态的数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-12 20:24:05 | 显示全部楼层
wx_f08h40A5 发表于 2020-3-19 21:41
为啥我不行呢
就是没办法显示动态的数据

能显示么?可以显示就是你程序的问题
回复 支持 反对

使用道具 举报

发表于 2021-5-4 14:24:47 | 显示全部楼层
谢谢大佬
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-20 11:01 , Processed in 0.037376 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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