组合模块,编程实现温度超过30度蜂鸣器报警,出现问题

2019-10-15 21:48发布

mini版开发版,DS18B20模块,led模块,lcd模块未改变,新增蜂鸣器模块buzzer,编译无误,但无法实现温度超过30度蜂鸣器报警,考虑过引脚被占用的问题(使用的是pc2和pc3引脚,插上了屏幕)以及buzzer中时钟使能与led冲突的问题,希望高手详解,1:如何实现功能2、若是led中是能过A时钟,buzzer中用A部分引脚在使能会不会出问题?具体怎么解决?3、如何选用合适的引脚,引脚复用怎么做?

buzzer.h文件
#ifndef __buzzer_H
#define __buzzer_H
#include "sys.h"
void buzzer_Init(void);
#endif




buzzer.c文件:
#include "buzzer.h"
void buzzer_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                                 //LED0-->PA.8 ¶Ë¿úÅäÖÃ
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //íÆíìêä3ö
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿úËù¶èÎa50MHz
        GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOA.8
        GPIO_ResetBits(GPIOC,GPIO_Pin_2);                                                 //PC.0 êä3öμí

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                             //LED1-->PD.2 ¶Ë¿úÅäÖÃ, íÆíìêä3ö
        GPIO_Init(GPIOC, &GPIO_InitStructure);                                           //íÆíìêä3ö £¬IO¿úËù¶èÎa50MHz
        GPIO_ResetBits(GPIOC,GPIO_Pin_3);                                                 //PC.13êä3öμí
}


主函数:

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "ds18b20.h"
#include "buzzer.h"

int main(void)
{
        u8 t=0;                            
        short temperature;   
        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        uart_init(9600);                 //′®¿ú3õê¼»ˉÎa9600
        LED_Init();                                  //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
        LCD_Init();          
        LCD_ShowString(60,150,200,16,16,"Temp:    . C");         
        while(1)
        {                        
                if(t%10==0)//ÿ100ms¶áè¡ò»′Î
                {                                                                          
                        temperature=DS18B20_Get_Temp();       
                        if(temperature>300)
                                GPIO_SetBits(GPIOC,GPIO_Pin_2);
                        else if(temperature<0)
                        {
                                LCD_ShowChar(60+40,150,'-',16,0);                        //&#207;&#212;ê&#190;&#184;oo&#197;
                                temperature=-temperature;                                        //×a&#206;a&#213;yêy
                        }else LCD_ShowChar(60+40,150,' ',16,0);                        //è¥μ&#244;&#184;oo&#197;
                        if(temperature<1000)
                        {        LCD_ShowChar(60+40+8,150,'0',16,0);
                                LCD_ShowNum(60+40+16,150,temperature/10,2,16);        //&#207;&#212;ê&#190;&#213;yêy2&#191;·&#214;            
                                   LCD_ShowNum(60+40+40,150,temperature%10,1,16);        //&#207;&#212;ê&#190;D&#161;êy2&#191;·&#214;                
                        }   
                        else
                        {
                                LCD_ShowChar(60+40+8,150,'1',16,0);
                                LCD_ShowNum(60+40+16,150,temperature/10,2,16);        //&#207;&#212;ê&#190;&#213;yêy2&#191;·&#214;            
                                   LCD_ShowNum(60+40+40,150,temperature%10,1,16);        //&#207;&#212;ê&#190;D&#161;êy2&#191;·&#214;                
                        }
                }                                  
                 delay_ms(10);
                t++;
                if(t==20)
                {
                        t=0;
                        LED0=!LED0;
                }
        }
}




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-10-15 22:27
仿真跟踪下代码
jermy_z
2楼-- · 2019-10-16 03:42
正点原子 发表于 2016-3-10 00:13
仿真跟踪下代码

这种天气,除非用特殊手段,怎么会上30度。。。。
Da Wen
3楼-- · 2019-10-16 06:25
 精彩回答 2  元偷偷看……
1448665826
4楼-- · 2019-10-16 10:38
Da Wen 发表于 2016-3-10 09:51
时钟使能一次就好了,使能多次应该也没啥问题吧

自己换了好几个引脚试试,可以了,但是还是没搞明白,插上液晶屏占用的引脚是不能用了吗?怎么看哪些引脚别占用了??
1448665826
5楼-- · 2019-10-16 11:32
jermy_z 发表于 2016-3-10 08:50
这种天气,除非用特殊手段,怎么会上30度。。。。

我用的探头型的,直接火上烤,100都没问题,不过我只是测试一下,keil仿真不太会用
1448665826
6楼-- · 2019-10-16 15:01
正点原子 发表于 2016-3-10 00:13
仿真跟踪下代码

仿真不太会用

一周热门 更多>