这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 【MSP焕新大作战】课程二+任务二+数码管显示【一起玩转TIMSPM0系列MCU

共3条 1/1 1 跳转至

【MSP焕新大作战】课程二+任务二+数码管显示【一起玩转TIMSPM0系列MCU】

菜鸟
2024-07-15 19:05:56     打赏

德州仪器课程二发帖:数码管的驱动原理、关键软件代码以及实现结果


一、硬件原理

  本课程的目标在于使用按键对数码管的显示进行按键控制,该部分代码使用了共阳极HC595驱动数码管,共阳极HC595驱动数码管共用VCC电源,因此在使用时候,应注意灌电流与拉电流的不同与区别。

  该数码管使用5个针脚进行数据输入与供电,5个针脚分别表示SCLK、CLK、DIO及VCC、GND,具体原理图如下所示:

 1.png      

  该数码在接入前,需要先去掉PA27、PA26、PA13的跳线帽,在进行关键代码之前,需要先把按键针脚设定为PA14针脚。

 fe286b1d91e4b14ed685735f050907e.jpg

  其中在TI-sysconfig配置中,应该先把按键配置为input,内置电阻设定为上拉电阻;另外将HC595数码管的三个针脚,设定为输出、标准模式,具体配置如下:

 图片3.png

图片4.png

二、关键软件代码  

  根据项目功能要求,本部分课程的关键代码做如下设计。首先对HC595及按键状态进行宏定义,然后编写5个功能函数,作为数码管数据输入的调用接口。在主程序代码的编写上,先设定按键监测,然后使用按键计数器对数码管的数字显示进行控制,最终实现课程锁应该达到的功能,具体代码如下:

    

#include "ti_msp_dl_config.h"



#define DELAY (16000000)

//宏定义HC595DIO打开

#define HC595_DIO_0 DL_GPIO_clearPins(GPIOA,27);//宏定义HC595DIO关闭

#define HC595_SCK_1 DL_GPIO_setPins(GPIOA,26);//宏定义HC595-SCK打开

#define HC595_SCK_0 DL_GPIO_clearPins(GPIOA,26);//宏定义HC595-SCK关闭

#define HC595_RCK_1 DL_GPIO_setPins(GPIOA,13);//宏定义HC595-RCK打开

#define HC595_DIO_1 DL_GPIO_setPins(GPIOA,27);

#define HC595_RCK_0 DL_GPIO_clearPins(GPIOA,13);//宏定义HC595-RCK关闭


uint8_t Display_DX[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

uint8_t Display_PX[ 8]={1,2,3,4,5,6,7,8};


void Display_Out()  //定义数码管点亮输出函数  PA13先清零再拉高;

{

    delay_cycles(2000);

    HC595_RCK_0;

    delay_cycles(2000);

    HC595_RCK_1;

}


void HC595_WriteData(uint8_t data) //定义数码管数据写入函数

{

    uint8_t i;

    for (i=0;i<8;i++)

    {

        if ((data & 0x80)>0)

        {

            HC595_DIO_1;

        }

        else

        {

            HC595_DIO_0;

        }


        data <<=1;


        delay_cycles(2000);

        HC595_SCK_0;

        delay_cycles(2000);

        HC595_SCK_1;

    }

}


void HC595_SEND_DATA(uint8_t dis_num,uint8_t dis_bit) //定义数码管发送数据函数

{

    HC595_WriteData(dis_num);

    HC595_WriteData(1<<dis_bit);

    Display_Out();

}


void Display_Data(uint16_t dataL,uint16_t dataH)   //定义数码管显示数据位函数

{

    uint16_t tempL,tempH;

    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(Display_DX[num_q],3);

    HC595_SEND_DATA(Display_DX[num_b],2);

    HC595_SEND_DATA(Display_DX[num_s],1);

    HC595_SEND_DATA(Display_DX[num_s],0);


    tempH=dataH;

    num_q=tempH/1000;

    num_b=tempH/100%10;

    num_s=tempH/10%10;

    num_g=tempH%10;

    HC595_SEND_DATA(Display_DX[num_q],7);

    HC595_SEND_DATA(Display_DX[num_b],6);

    HC595_SEND_DATA(Display_DX[num_s],5);

    HC595_SEND_DATA(Display_DX[num_s],4);

}



int main(void)

{

     SYSCFG_DL_init();

     delay_cycles(100000);

     while(1)

     {

        delay_cycles(2000000);

        Display_Data(1234,5678);

     }

}


三、实现效果

  在进行调试过程中,改进了一些宏定义的写法,同时对部分变量的定义进行了修正,最终完美实现了系统需要的达到的功能,通过手动按动按键,顺利实现数码管的数字输出。相关照片如下图所示:

tu5.png



高工
2024-07-15 19:15:46     打赏
2楼

感谢分享


专家
2024-07-15 19:21:48     打赏
3楼

可以可以


共3条 1/1 1 跳转至

回复

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