打印

我在做一个神秘的东西,欢迎参与,做好了送给你

[复制链接]
9822|97
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CD, LCD, pi, AC, IO
本帖最后由 gaoyang9992006 于 2015-12-11 14:46 编辑

这么好的内容,不仅要回复可见,而且要连载,我一步一步做,然后一楼一楼的帖。。。之所以神奇是因为百度找不到这样的例子,我逛了几家的论坛也没有找到,那个LCD如何驱动显示字符串啊,显示单个字符啊,同时读取DHT11和MQ-2了。哈哈,是不是感觉像国产凌凌漆里的达文西。。。要你命3000


  这个是基于去年参加活动送的板子:STM32F429i discovery 的板子做的。目前刚刚写了显示代码,读取DHT11,这个是温湿度传感器,下面的电压是MQ-2的。刚做个初步,希望大家回复给我个动力啊,后面我要干大事了。代码什么的,我先把这个板子研究透了,每一步我都发帖,代码在宿舍,晚上回去慢慢改,然后我上代码,谢谢,第一个图,是我刚调试好DHT11时候的情况,第二个是测MQ-2有害气体传感器时候的,这个无污染情况是0.3以下,刚开始没有开窗户,一下2.26,严重污染,其实不然,是因为电压接错了,应该接5V供电才行,这个MQ-2模块要接5V,因为内部要加热,3,3肯定不行。不过也是挺高的,当时是超过了1,我开了一晚上的窗户,空气跟外边一样了,是0.43,这说明南京的空气也是有一定污染的。



2015年,11,23更新 stm32f429 LCD.rar (557.58 KB)



这次不隐藏了,感兴趣的,帮我完善功能,比如增加触摸按键。。。--------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------
今晚又画了个供电系统图,毕竟是DIY嘛,我们要画的形象好懂。


------------------------------------------------------------------
因为没有专业的容器,考虑用的是电脑CPU的风扇,我已经狠心把我台式机的CPU风扇拆了,我是不是太狠心了??
----------------------------------------------------------------------
考虑到如果没有水了或者发生烟雾了,比如电路起火了。要报警啊,来个警报器,我拆了个警报器的蜂鸣器。
---------------------------------
完善一下。
-------------------------------------------------


按键处理程序,一个按键搞定所有。靠谱吗?--------------------------------------------------
贴上我这很矬的代码
#include "stm32f4xx.h"
#include <stdio.h>
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "stm32f429i_discovery_lcd.h"
#include "dht11.h"
#include "adc.h"

RCC_ClocksTypeDef RCC_Clocks;


#define LED0 PGout(13)
#define LED1 PGout(14)
#define BUTTON PAin(0)
#define MESSAGE0   "shutdown---!"
#define MESSAGE1   "wendu:  ^C"
#define MESSAGE2   "shidu:   %"
#define MESSAGE3   "  Working---!"
#define MESSAGE4   "DHT11(GPIO-PG9)"
#define MESSAGE5   "MQ-2 (GPIO-PA5)"
#define MESSAGE6   "voltage:    V"
#define FONTSIZE         Font12x12
        
Point oPoint1={10,10};
unsigned char on_off=0;
//        PG13、PG14分别对应绿、红LED?

void LED_Init(void)
{

GPIO_InitTypeDef  GPIO_InitStructure;
         
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG , ENABLE);        
        
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;                                
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;               
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOG, &GPIO_InitStructure);                                         
        
GPIO_ResetBits(GPIOG,GPIO_Pin_13);                                                
GPIO_ResetBits(GPIOG,GPIO_Pin_14);        
}





static void Display_Init(void)
{
  /* Initialize the LCD */
  LCD_Init();
  LCD_LayerInit();
  /* Enable the LTDC */
  LTDC_Cmd(ENABLE);
  /* Set LCD Background Layer  */
  LCD_SetLayer(LCD_BACKGROUND_LAYER);
  /* Clear the Background Layer */
  LCD_Clear(LCD_COLOR_WHITE);  
  /* Configure the transparency for background */
  LCD_SetTransparency(255);

  // Set LCD Foreground Layer
        
  LCD_SetLayer(LCD_FOREGROUND_LAYER);
  //Configure the transparency for foreground
  LCD_SetTransparency(127);  
// Clear the Foreground Layer
// LCD_Clear(LCD_COLOR_WHITE);
        LCD_Clear(LCD_COLOR_BLACK);
/*

//  Set the LCD Text size */
  LCD_SetColors(LCD_COLOR_WHITE,LCD_COLOR_BLACK);
  LCD_SetFont(&Font16x24);

        

}

//按键程序,开机后默认红绿灯不亮,红绿灯分别对应风扇和雾化器。当按下后就翻转状态。
void Button(void)
{
if(BUTTON) {on_off=~on_off;while(BUTTON);}         //按下后翻转标志变量,之后等待松手信号。
        
        if(on_off)   {LED0=1;LED1=1;                LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE3); } //开机
        else         {LED0=0;LED1=0;          LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE0);}  //关机

}
int main(void)
{
int wendu_x=0;
int shidu_x=0;
u16 adcx,adcx_temp;        
u8 temperature;              
u8 humidity;  

delay_init();
LED_Init();
Display_Init();
Adc_Init();
DHT11_Init();


while (1)
  {


  {

                LCD_DisplayStringLine(LCD_LINE_3, (uint8_t*)MESSAGE4);         
    LCD_DisplayStringLine(LCD_LINE_7, (uint8_t*)MESSAGE5);
                DHT11_Read_Data(&temperature,&humidity);        
          wendu_x=temperature;
          shidu_x=humidity;


  LCD_DisplayStringLine(LCD_LINE_4, (uint8_t*)MESSAGE1);
  LCD_DisplayStringLine(LCD_LINE_5, (uint8_t*)MESSAGE2);                        
                  LCD_DisplayChar(LCD_LINE_4, 16*6, '0'+wendu_x/10);
                        LCD_DisplayChar(LCD_LINE_4, 16*7, '0'+wendu_x%10);
                  LCD_DisplayChar(LCD_LINE_5, 16*6, '0'+shidu_x/10);
                        LCD_DisplayChar(LCD_LINE_5, 16*7, '0'+shidu_x%10);

        }        

        adcx=Get_Adc_Average(ADC_Channel_5,20);
  adcx=(float)adcx*(3.3*1000/4096);
  
if(((adcx)%10)>=5) adcx=adcx+10;                   //四舍五入到百分位
  adcx=adcx/10;                                    //变换为三位数整数
        adcx_temp=adcx;
        
  LCD_DisplayStringLine(LCD_LINE_8, (uint8_t*)MESSAGE6);
        LCD_DisplayChar(LCD_LINE_8, 16*8, '0'+adcx_temp/100);           //显示个位
        LCD_DisplayChar(LCD_LINE_8, 16*9, '.');
        adcx_temp%=100;
        LCD_DisplayChar(LCD_LINE_8, 16*10, '0'+adcx_temp/10);         //显示十分位        
  LCD_DisplayChar(LCD_LINE_8, 16*11, '0'+adcx_temp%10); // 显示百分位

        Button();
/*                LED0=1;                                                
                LED1=0;
                delay_ms(500);
                LED0=0;                                                
                LED1=1;
                delay_ms(500);
                */
  }
}



#ifdef  USE_FULL_ASSERT


void assert_failed(uint8_t* file, uint32_t line)
{

  while (1)
  {
  }
}
#endif

//按键程序,开机后默认红绿灯不亮,红绿灯分别对应风扇和雾化器。当按下后就翻转状态。
void Button(void)
{
if(BUTTON) {on_off=~on_off;while(BUTTON);}         //按下后翻转标志变量,之后等待松手信号。
        
        if(on_off)   {LED0=1;LED1=1;                LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE3); } //开机
        else         {LED0=0;LED1=0;          LCD_DisplayStringLine(LCD_LINE_1, (uint8_t*)MESSAGE0);}  //关机

}我来说说我这个执行代码,人家按键都搞神马中断了,延时防抖了,我为何不搞,我的不靠谱吗?非也非也。
首先我没有对BUTTON进行初始化,这就错了吗?非也非也,实际上好多IO口默认就是IO口,默认就是准双向。所以我使用这个输入功能是不需要初始化可以直接使用的。
我先判断是否为1,也就是是否触发,如果触发进入函数段,翻转开关标志,接下来人家有的人估计会判断是不是抖动啊,我想说,抖动个毛线啊,我直接while锁死该变量,直到你释放按键,释放后,你抖动就不管我的事情了,我已经进入后面的程序了,等你抖动完了,我还在后面执行别的程序呢。哈哈哈,是不是?

差不多做好了,觉得报警多余就没有上,因为我这水箱很大的。全部用跳线连接到那个STM32F429i discovery上。





专门去超市买的水箱。。然后用电烙铁和刀子挖了个洞







相关帖子

沙发
dirtwillfly| | 2015-11-2 09:12 | 只看该作者

使用特权

评论回复
板凳
通宵敲代码| | 2015-11-2 09:17 | 只看该作者
:L还回复可见!

使用特权

评论回复
地板
lvyunhua| | 2015-11-2 09:18 | 只看该作者
:lol,过来凑热闹。

使用特权

评论回复
5
cooran| | 2015-11-2 09:50 | 只看该作者
真的这么神?

使用特权

评论回复
6
雨落沉轩| | 2015-11-2 09:55 | 只看该作者
没事,瞅瞅

使用特权

评论回复
7
00750| | 2015-11-2 10:30 | 只看该作者
楼主搞的这么神密

使用特权

评论回复
8
fzy_666| | 2015-11-2 12:32 | 只看该作者
:lol

使用特权

评论回复
9
lyf08| | 2015-11-2 12:36 | 只看该作者
看看什么东西

使用特权

评论回复
10
天高任鸟飞| | 2015-11-2 13:24 | 只看该作者

使用特权

评论回复
11
天高任鸟飞| | 2015-11-2 13:28 | 只看该作者
楼主的

使用特权

评论回复
12
XC456| | 2015-11-2 15:06 | 只看该作者
:loveliness:

使用特权

评论回复
13
XC456| | 2015-11-2 15:08 | 只看该作者
回复了也没看见,隐藏的深啊

使用特权

评论回复
14
aaa制| | 2015-11-2 15:56 | 只看该作者
:lol

使用特权

评论回复
15
gaoyang9992006|  楼主 | 2015-11-2 16:21 | 只看该作者
XC456 发表于 2015-11-2 15:08
回复了也没看见,隐藏的深啊

系统出了故障,我源码和过程没有上传呢,今晚更新,到时候更新后,通知你。

使用特权

评论回复
16
gaoyang9992006|  楼主 | 2015-11-2 16:21 | 只看该作者

:lol这个符号不在标准的字码里面

使用特权

评论回复
17
明眸| | 2015-11-2 16:27 | 只看该作者
111111111111111111111111111111

使用特权

评论回复
18
silong1123| | 2015-11-2 16:29 | 只看该作者
什么东东,没看懂

使用特权

评论回复
19
gaoyang9992006|  楼主 | 2015-11-2 16:31 | 只看该作者

图片是不是挂了,我这显示挂了,我上传了两次了。

使用特权

评论回复
20
ningling_21| | 2015-11-2 16:34 | 只看该作者
不会是两个相同的图片吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1896

主题

15629

帖子

198

粉丝