这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 【MSP焕新大作战】课程1+任务2+用定时器实现数码管从10到0的递减,步长为1

共1条 1/1 1 跳转至

【MSP焕新大作战】课程1+任务2+用定时器实现数码管从10到0的递减,步长为1

菜鸟
2024-06-25 14:31:25     打赏

 任务描述:

使用定时器中断实现数码管数值从10到0 步长为一递减

资源使用,定时器,GPIO

硬件原理

数码管工作原理:

`led数码管`(LED Segment Displays)由多个[发光二极管]封装在一起组成 `“8”字型`的器件,引线已在内部连接完成,

只需引出它们的各个笔划,`公共电极`。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。

这些段分别由字母 `a,b,c,d,e,f,g,dp`来表示。——百度百科


原理图

接线图

1718093333453.pngSysconfig配置引脚与TIMER

TIME0 中断

int TimerCnt,TmpVal;
void TIMER_0_INST_IRQHandler(void)

{
    switch (DL_Timer_getPendingInterrupt(TIMER_0_INST))
    {
    case DL_TIMER_IIDX_ZERO:
        TimerCnt++;
        if (TimerCnt >= 100)
        {
            TimerCnt = 0;
            TmpVal--;
            if (TmpVal < 0)
            {
                TmpVal = 10;
            }
        }
        break;
    default:
        break;
    }
}

数码管显示函数

void Disp_Data(uint16_t dataH, uint16_t dataL)
{
    uint16_t tempH, tempL;
    uint8_t num_q, num_b, num_s, num_g;
    tempL = dataL;
    num_q = tempL / 1000;
    num_b = tempL / 100 % 10;
    num_s = tempL / 10 % 10;
    num_g = tempL % 10;
    HC595_SEND_DATA(Disp_DX[num_q], 3);
    HC595_SEND_DATA(Disp_DX[num_b], 2);
    HC595_SEND_DATA(Disp_DX[num_s], 1);
    HC595_SEND_DATA(Disp_DX[num_g], 0);

    tempH = dataH;
    num_q = tempH / 1000;
    num_b = tempH / 100 % 10;
    num_s = tempH / 10 % 10;
    num_g = tempH % 10;
    HC595_SEND_DATA(Disp_DX[num_q], 7);
    HC595_SEND_DATA(Disp_DX[num_b], 6);
    HC595_SEND_DATA(Disp_DX[num_s], 5);
    HC595_SEND_DATA(Disp_DX[num_g], 4);
}

主函数

int main(void)
{
    SYSCFG_DL_init();
    uint16_t i=0,j=0;
    uint8_t val=0;
    TmpVal = 10;

    NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
    DL_TimerG_startCounter(TIMER_0_INST);  

    while (1) {      
      Disp_Data(0,TmpVal);
     
    }
}

实际测试效果




共1条 1/1 1 跳转至

回复

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