这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 一起玩转TIMSPM0系列任务二:定时器控制数码管从10到0的递减

共1条 1/1 1 跳转至

一起玩转TIMSPM0系列任务二:定时器控制数码管从10到0的递减

菜鸟
2024-07-14 18:03:48     打赏

一起玩转TI MSPM0系列 任务二:用定时器实现数码管从100的递减

驱动硬件前都要学习、理解目标硬件的驱动原理、与找到正确的原理图,确认IO、供电电压等信息后,才可以开始。


1、确认硬件

image.png

相似数码管模块原理图,元器件相同,但是与我们手上的实物不同。

由于74HC595是颗经典的老芯片,由很多制造商,不同厂商的引脚命名会有所不同,对照其他规格书后,确认SH_CP对应SCLK,ST_CP对应RCLK

数码管的可以理解为灯箱,由多个LED组成,按照共阴 或 共阳连接的不同,输出高低电平就可以点亮或者熄灭。


2、驱动原理

74HC595是一个串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在RCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

image.png

总的来说:

SH_CP(SCLK)模拟时钟,DS在上升沿写数据,ST_CPRCLK)拉高就是应用数据,点亮、熄灭对应数码管。


3、测试代码

①发送数据代码:

void HC595_WriteData(unsigned char data)
{
    unsigned char i;
    for(i=0;i<8;i++){
        if(data & 0x80){
            HC595_DAT(1);
        }else{
            HC595_DAT(0);
        }
        data <<= 1;
        HC595_CLK(0);
        delay_cycles(32);
        HC595_CLK(1);
        delay_cycles(32);
    }
}

0x80二进制数:10000000,再加上左移一位,就可以理解为,每次取最高位的0/1,按照0/1输出高/低电平。并且不断的以1微秒的间隔高低翻转SCLK,等待下次数据的位移,取值,控制DS脚输出。


②应用数据代码:

void Display_0ut()
{
    HC595_RCK(0);
    delay_cycles(32);
    HC595_RCK(1);
    delay_cycles(32);
}

在数据发送完成后,实现拉高RCLK,应用数据功能。


③显示数字接口:

void HC595_Send_Data(uint8_t dis_num,uint8_t dis_bit)
{
    HC595_WriteData(dis_num);
    HC595_WriteData(1<<dis_bit);
    Display_0ut();
}

除了发送数据、应用数据接口外,还有一个HC595_WriteData(1<<dis_bit);”命令是利用74HC595的特性,当8位数据写满后在发送数据就会传递到下一组数据上的特性,实现了切换显示位置的功能。

以上就完成了数码管数据的显示。


4、任务实现

4.1、配置定时器

如上图,选择客户配置、选择系统主时钟(32M),分频系数8,预分频256,向下计数,配置定时时间位1秒,使能定时器。image.png

如上图,选择客户配置、选择系统主时钟(32M),分频系数8,预分频256,向下计数,配置定时时间位1秒,使能定时器。

4.2、测试代码

定时器回调函数

void TIMER_0_INST_IRQHandler(void)
{
     switch(DL_TimerG_getPendingInterrupt(TIMER_0_INST)){
        case DL_TIMER_IIDX_ZERO:{
                realTemp--;
            }break;
 
        default:
            break;
        }
}

定时器回调中,不断递减该变量,实现倒计时。

以上任务2完成!




关键词: TI    

共1条 1/1 1 跳转至

回复

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