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); //ÏÔ꾸ooÅ
temperature=-temperature; //×aÎaÕyêy
}else LCD_ShowChar(60+40,150,' ',16,0); //è¥μô¸ooÅ
if(temperature<1000)
{ LCD_ShowChar(60+40+8,150,'0',16,0);
LCD_ShowNum(60+40+16,150,temperature/10,2,16); //ÏÔê¾Õyêy2¿·Ö
LCD_ShowNum(60+40+40,150,temperature%10,1,16); //ÏÔê¾D¡êy2¿·Ö
}
else
{
LCD_ShowChar(60+40+8,150,'1',16,0);
LCD_ShowNum(60+40+16,150,temperature/10,2,16); //ÏÔê¾Õyêy2¿·Ö
LCD_ShowNum(60+40+40,150,temperature%10,1,16); //ÏÔê¾D¡êy2¿·Ö
}
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
LED0=!LED0;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>