【用18B20温度控制板介绍华大兆易创新GD32F330单片机 (五)——程序流程介绍和代码详解】


前言

本次介绍温度控制板的程序流程和关键代码详解

一、基于18B20的温度控制板功能介绍

1、数码显示的温度为18B20采集的环境温度,仅显示个位和十位,小数点后的忽略;
2、按动按钮,显示风扇温度阈值,松手即显示环境温度,为了便于两者区分,风扇温度阈值加上小数点;
3、当环境温度达到阈值温度时,风扇启动,当温度下降到阈值温度以下5℃时,风扇停转,这样设计可避免风扇频繁启停;

为了实现以上功能,将采用以下技术方案:
1、每1秒钟采集一次温度,即调用ds18b20.c库函数,执行完毕,将会返回3位十进制数值,与10取模,得到高两位数据,;
2、每10毫秒移位一个数码管位,并更新该位的数值,本项目采用两位数码管,两个共阴极,共用8个笔端,移位函数、更新数码管笔端函数集合在led.c函数里;
3、每10毫秒采集一次按钮,因为是按下有效,抬起失效,因此可以不做消抖处理,按钮处理在主程序完成;
4、启用通用定时器2,中断周期10ms,中断子程序里完成置标志位:数码管显示标志位、温度采集标志位
以下是程序流程图;
5、延时库函数delay.c,使用正点原子提供,使用delay_ms()和delay_us()两个函数;

二、18B20温度控制板程序介绍

1.主函数

int main(void)
{
   
    systick_config();
    delay_init(72);

    /* enable the LED GPIO clock */
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOB);
    /*  led 和风扇输出 GPIO 初始化 */
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
    gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);

    gpio_bit_reset(GPIOA, GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
    gpio_bit_reset(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);
	  /*  按钮输入 GPIO 初始化 */
	  gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_15);
	
	  ds18b20_get_temperature();//在此做一次温度转换,第一次转换会得到85℃的默认值,为了不显示这个数值,在显示程序执行前先过一次

    timer2_init(1200 - 1, 500 - 1);
    while(1) {
   

        delay_us(2);
        if(FlagLed == 1) //① 10ms刷新一次LED
        
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值