这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 【玩转TIMSPM0】课程3任务1:学习以及作业完成情况

共2条 1/1 1 跳转至

【玩转TIMSPM0】课程3任务1:学习以及作业完成情况

高工
2024-05-05 22:11:29     打赏

课程3时进一步的进阶学习。

第一部分

加入了蜂鸣器的使用,按键增加蜂鸣器的音效。这一步最终需要实现的是通过按键按下后增加蜂鸣器的音效,并使数码管增加数值,由于课程2中使用延时的方法采集按键状态,效果不太理想,我们在这节课程中使用外部中断采集。

在之前的S2配置中加入下降沿触发中断:

1.png

增加的新模块是蜂鸣器模块:

2.png

它可以直接通过高低电平控制,课程中选取了PA15进行控制,依然通过配置文件初始化。

如何时间功能呢:

void GROUP1_IRQHandler(void)
{
    switch (DL_GPIO_getPendingInterrupt(GPIO_S2_PORT)) {
            case GPIO_S2_PIN_14_IIDX:
                Dutytmp++;
                keyflag = 1;

                break;
            default:
                break;
        }

}

通过按键中断程序里面直接对显示的数据Dutytmp进行增加,按下只能触发一次,中断方式还是比较好的,论坛大佬的方法还是不错的。将标志位置位后,在定时器中断中进行蜂鸣器响的时间控制:

void TIMER_0_INST_IRQHandler(void){
    switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
        case DL_TIMER_IIDX_ZERO:
            if(keyflag == 1){
                keyflag++;
                DL_GPIO_clearPins(GPIO_Buzzer_PORT, GPIO_Buzzer_PIN_15_PIN);
            }
            else if(keyflag > 1){
                keyflag = 0;
                DL_GPIO_setPins(GPIO_Buzzer_PORT, GPIO_Buzzer_PIN_15_PIN);
            }


            break;
        default:
            break;
    }
}

第二部分

通过数码管显示温度,课程中是通过热敏电阻来反馈温度变化的,板载了一颗热敏电阻,这里用到的主要是adc采集部分:

3.png

ADC采集连接的是PA15,看样子上一部分刚用的引脚就要换一下了,蜂鸣器控制切换到PA16,然后进行ADC采集的配置:

4.png

通过定时器定时100ms'采集转化一次ADC的值,初始化时通过DL_ADC12_startConversion(ADC12_0_INST);开启转换。

第三部分与课后作业

课程是通过ADC采集的数值进行的温度转换实现的温度报警器功能,在第二部分已经实现了ADC的采集,所以这一部分主要是进行转换判断,这次就跳过直接实现DS18B20的采集,然后判断温度值进行报警功的实现。

DS18B20是一个单总线通信的温度传感器,我们通过一个引脚就能实现数据的读取,这里面我们使用论坛网友提供的DS18B20的驱动进行采集,在定时器中,每100ms采集一次。代码如下:

void TIMER_0_INST_IRQHandler(void){
    switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
        case DL_TIMER_IIDX_ZERO:
            Dutytmp = DS18B20_GetTemp();
            if(keyflag == 1){
                keyflag++;
                DL_GPIO_clearPins(GPIO_Buzzer_PORT, GPIO_Buzzer_PIN_16_PIN);
            }
            else if(keyflag > 1){
                keyflag = 0;
                DL_GPIO_setPins(GPIO_Buzzer_PORT, GPIO_Buzzer_PIN_16_PIN);
            }

            if(Dutytmp > 300){
                DL_GPIO_clearPins(GPIO_Buzzer_PORT, GPIO_Buzzer_PIN_16_PIN);
            }
            else
                DL_GPIO_setPins(GPIO_Buzzer_PORT, GPIO_Buzzer_PIN_16_PIN);


            break;
        default:
            break;
    }
}

为了能够显示小数,我们弄了一个标志位代表小数位数,对于数码管来说小数点就相当于对现实数据&0x7f,最高位为0就可以点亮,超过30℃的报警器完成。





关键词: 玩转TIMSPM0     课程3     任务1    

专家
2024-05-06 06:16:48     打赏
2楼

学习一下


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]