这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » TI » 【MSP焕新大作战】+课程2+任务1+定时器递减

共3条 1/1 1 跳转至

【MSP焕新大作战】+课程2+任务1+定时器递减

菜鸟
2024-07-14 16:17:42     打赏

一、功能需求

    使用定时器中断,实现数码管显示数值的从10到0的递减递减步长为1s

二、数码管驱动原理

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);

按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

 

单位数码管有十个管脚,其中有8根是用来点亮a,b,c,d,e,f,dp 共8个发光二极管(原理中有介绍),3,8两个管脚为公共COM脚,它们相连通且作用相同,可接任意一根。

共阴, 共阳:

数码管2.PNG

接线图:

 595接线图.PNG

、软件原理

硬件连接上使用3个GPIO口作为输出,1个数据位输出,2个为时钟输出(因为时钟和锁存输出时钟)。供电使用开发板上的3v3,共5根线其接法如下图

image.png

image.png

由于要求定时从10减到0,这里我采用定时器去更新数码管的显示内容,定时1s,num自减,定时器配置如下:

1717072842640683.png

驱动显示函数:

  1. uint8_t  LED_0F[] =   

  2. {// 0   1   2      3 4    5   6      7 8    9   A      b C    d    E    F    -    

  3.     0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf,0xff  

  4. };  

  5. // 全局变量  

  6. uint8_t  LED[8]={0,1,17,17,17,17,17,17};  //用于LED的8位显示缓存  

  7. void LED8_Display (void)  

  8. {  

  9.     uint8_t  *led_table;          // 查表指针  

  10.     uint8_t  i;  

  11.     //显示第1位  

  12.     led_table = LED_0F + LED[0];  

  13.     i = *led_table;  

  14.   

  15.     LED_OUT(i);           

  16.     LED_OUT(0x01);        

  17.   

  18.     RCLK_RESET;  

  19.     RCLK_SET;  

  20.     //显示第2位  

  21.     led_table = LED_0F + LED[1];  

  22.     i = *led_table;  

  23.   

  24.     LED_OUT(i);       

  25.     LED_OUT(0x02);        

  26.   

  27.     RCLK_RESET;  

  28.     RCLK_SET;  

  29.     //显示第3位  

  30.     led_table = LED_0F + LED[2];  

  31.     i = *led_table;  

  32.   

  33.     LED_OUT(i);           

  34.     LED_OUT(0x04);    

  35.   

  36.     RCLK_RESET;  

  37.     RCLK_SET;  

  38.     //显示第4位  

  39.     led_table = LED_0F + LED[3];  

  40.     i = *led_table;  

  41.   

  42.     LED_OUT(i);           

  43.     LED_OUT(0x08);        

  44.   

  45.     RCLK_RESET;  

  46.     RCLK_SET;  

  47.     //显示第5位  

  48.     led_table = LED_0F + LED[4];  

  49.     i = *led_table;  

  50.   

  51.     LED_OUT(i);           

  52.     LED_OUT(0x10);    

  53.   

  54.     RCLK_RESET;  

  55.     RCLK_SET;  

  56.     //显示第6位  

  57.     led_table = LED_0F + LED[5];  

  58.     i = *led_table;  

  59.   

  60.     LED_OUT(i);           

  61.     LED_OUT(0x20);    

  62.   

  63.     RCLK_RESET;  

  64.     RCLK_SET;  

  65.     //显示第7位  

  66.     led_table = LED_0F + LED[6];  

  67.     i = *led_table;  

  68.   

  69.     LED_OUT(i);           

  70.     LED_OUT(0x40);    

  71.   

  72.     RCLK_RESET;  

  73.     RCLK_SET;  

  74.     //显示第8位  

  75.     led_table = LED_0F + LED[7];  

  76.     i = *led_table;  

  77.   

  78.     LED_OUT(i);       

  79.     LED_OUT(0x80);    

  80.   

  81.     RCLK_RESET;  

  82.     RCLK_SET;  

  83. }  

  84.   

  85. void LED_OUT(uint8_t  X)  

  86. {  

  87.     uint8_t  i;  

  88.     for(i=8;i>=1;i--)  

  89.     {  

  90.         if (X&0x80)   

  91.         {  

  92.             DIO_SET;   

  93.         }  

  94.         else   

  95.         {  

  96.             DIO_RESET;  

  97.         }  

  98.         X<<=1;  

  99.         SCLK_RESET;  

  100.         SCLK_SET;  

  101.     }  

  102. }  

主函数:

  1. #include "ti_msp_dl_config.h"  

  2. #include "HC595.h"  

  3. #include "Delay.h"  

  4.   

  5. int8_t num=10;  

  6. int main(void)  

  7. {  

  8.     SYSCFG_DL_init();  

  9.         NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);  

  10.         DL_TimerG_startCounter(TIMER_0_INST);  

  11.     while (1) {  

  12.             LED8_Display ();  

  13.     }  

  14. }  

  15.   

  16. //定时实现10到0递减  

  17. void TIMER_0_INST_IRQHandler(void)  

  18. {  

  19.       num--;  

  20.         if(num<0)num=10;  

  21.         LED[1]=num/10;  

  22.         LED[0]=num%10;  

  23.         if(LED[1]==0)LED[1]=17;  

  24.         DL_GPIO_togglePins(GPIO_LED_PORT,GPIO_LED_LED1_PIN);  

  25. }  

效果

image.png


高工
2024-07-14 17:04:47     打赏
2楼

谢谢分享


高工
2024-07-16 08:02:18     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

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