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

共8条 1/1 1 跳转至

【TIMSPM0MCU焕新大作战】+课程2任务1+数码管递减显示数字

高工
2024-07-29 00:20:32     打赏

这节任务是用定时器中断实现数码管数值的递减。

数码管.jpg


借用网上的原理图,模块是共阳极,74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。8位数码管模块一共五个接口,还是使用PA26、PA13、PA27接口,具体接线如下所示。

3V3  --VCC

PA26--SCLK

PA13--RCLK

PA27--DIO

GND--GND

按照连接图连接开发板和数码管模块

led连接.jpg

然后通过syscfg工具配置定时器。

time1.JPGranhou

然后再配置GPIO口,和点灯类似,不再重复。

主代码如下:


  1. #include "ti_msp_dl_config.h"  

  2. #include <math.h>  

  3. #define NUM_MAXLENGTH 8  

  4. #define delay_us 32  

  5. typedef struct{  

  6.     uint32_t Num_start;  

  7.     uint8_t  Num_polarity;  

  8.     uint8_t  polarity_flag;  

  9.     uint8_t  func_mode;

  10.     uint8_t  stopwatch_status;

  11. }LED_Segment_Mode;  

  12. LED_Segment_Mode LS_Mode;  

  13. uint8_t Num_List[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf};  

  14. int32_t Num_Decrease=1;  

  15.   

  16. void HC595_CLKRisingEdge_Config(GPIO_Regs* PORTx,uint32_t PINx,uint32_t t1,uint32_t t2){  

  17.         DL_GPIO_clearPins(PORTx, PINx);  

  18.         delay_cycles(delay_us*t1);  

  19.         DL_GPIO_setPins(PORTx, PINx);  

  20.         delay_cycles(delay_us*t2);  

  21. }  

  22. void LED_Segment_WriteByte(uint8_t byte){  

  23.     for(uint8_t i=1;i<=8;i++){  

  24.         if(byte&0x80){  

  25.             DL_GPIO_setPins(PORT_HC595_PORT,PORT_HC595_PIN_HC595_DIO_PIN);  

  26.         }  

  27.         else  

  28.         {  

  29.             DL_GPIO_clearPins(PORT_HC595_PORT,PORT_HC595_PIN_HC595_DIO_PIN);  

  30.         }  

  31.         HC595_CLKRisingEdge_Config(PORT_HC595_PORT,PORT_HC595_PIN_HC595_SCLK_PIN,2,2);  

  32.         byte<<=1;  

  33.     }  

  34.   

  35. }  


  36. void LED_Segment_Display_Num_One(uint8_t Num_one,uint8_t index){  

  37. //    switch(Num_one){  

  38. //    case 0:  

  39. //        break;  

  40. //    }  

  41.     LED_Segment_WriteByte(Num_List[Num_one]);  

  42.     LED_Segment_WriteByte(1<<index);  

  43.     HC595_CLKRisingEdge_Config(PORT_HC595_PORT,PORT_HC595_PIN_HC595_RCLK_PIN,2,2);  

  44. }  


  45. void LED_Segment_Display_point(uint8_t Num_one,uint8_t index){  

  46. //    switch(Num_one){  

  47. //    case 0:  

  48. //        break;  

  49. //    }  

  50.     LED_Segment_WriteByte(Num_one);  

  51.     LED_Segment_WriteByte(1<<index);  

  52.     HC595_CLKRisingEdge_Config(PORT_HC595_PORT,PORT_HC595_PIN_HC595_RCLK_PIN,2,2);  

  53. }  


  54. void Num_LED_Segment_Process(uint32_t Num){  

  55.     uint8_t num_lsb=0;  

  56.     uint8_t i;  

  57.     for(i=0;i<NUM_MAXLENGTH;i++)  

  58.     {  

  59.         num_lsb=Num%10;  

  60.         Num/=10;  

  61.         LED_Segment_Display_Num_One(num_lsb,i);  

  62.         if(Num==0)break;  

  63.     }  

  64.   

  65.     if(LS_Mode.Num_polarity==0){  

  66.         LED_Segment_WriteByte(0xbf);  

  67.         LED_Segment_WriteByte(0x01<<(i+1));  

  68.         HC595_CLKRisingEdge_Config(PORT_HC595_PORT,PORT_HC595_PIN_HC595_RCLK_PIN,2,2);  

  69.     }  

  70. }  

  71.   

  72.   

  73. int main(void)  

  74. {  

  75.     SYSCFG_DL_init();  

  76.     NVIC_SetPriority(TIMER_0_INST_INT_IRQN, 2);  

  77.     NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);  

  78.     DL_TimerG_startCounter(TIMER_0_INST);  

  79. //  

  80.     NVIC_SetPriority(TIMER_1_INST_INT_IRQN, 1);  

  81.     NVIC_EnableIRQ(TIMER_1_INST_INT_IRQN);  

  82.     DL_TimerG_startCounter(TIMER_1_INST);  

  83.   

  84.     NVIC_SetPriority(GPIO_MULTIPLE_GPIOA_INT_IRQN, 0);  

  85.     NVIC_EnableIRQ(GPIO_MULTIPLE_GPIOA_INT_IRQN);  

  86.   

  87.     LS_Mode.Num_start=10;  

  88.     LS_Mode.polarity_flag=1;  

  89.     LS_Mode.Num_polarity=1;//默认显示正数  

  90.     LS_Mode.func_mode=0;  

  91.     LS_Mode.stopwatch_status=0;  

  92.     while (1) {  

  93.         delay_cycles(10);  

  94. //        LED_Segment_Display_Num_One(0x7f,0x01<<5);  

  95. //        LED_Segment_Display_point(0x7f,5);  

  96. //        Num_LED_Segment_Process_Float(0.356,2);  

  97.     }  

  98. }  

  99. void TIMER_0_INST_IRQHandler(void)  

  100. {  

  101.     switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST))  

  102.     {  

  103.         case DL_TIMER_IIDX_ZERO:  

  104.             Num_LED_Segment_Process(Num_Decrease);  

  105.             break;  

  106.         default:  

  107.             break;  

  108.     }  

  109. }  

  110. void TIMER_1_INST_IRQHandler(void)  

  111. {  

  112.     switch (DL_TimerG_getPendingInterrupt(TIMER_1_INST)) {  

  113.         case DL_TIMER_IIDX_ZERO:  

  114. //            DL_GPIO_togglePins(GPIO_LEDS_PORT,GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_TEST_PIN);  

  115.             if(LS_Mode.func_mode==0){  

  116.                 if(LS_Mode.polarity_flag==1){  

  117.                     Num_Decrease--;  

  118.                     if(Num_Decrease<0)  

  119.                     Num_Decrease=LS_Mode.Num_start;  

  120.                 }  

  121.     //            else  

  122.     //            {  

  123.     //  

  124.     //                if(LS_Mode.Num_polarity==1){  

  125.     //                    Num_Decrease--;  

  126.     //                    if(Num_Decrease<0)  

  127.     //                        LS_Mode.Num_polarity=0;  

  128.     //                }  

  129.     //                else{  

  130.     //                    Num_Decrease++;  

  131.     //                    if(Num_Decrease==LS_Mode.Num_start)  

  132.     //                        LS_Mode.Num_polarity=1;  

  133.     //                }  

  134.     //            }  

  135.             }  

  136.             else  

  137.             {  

  138.                 if(LS_Mode.stopwatch_status==0)  

  139.                     Num_Decrease=0;  

  140.                 else if(LS_Mode.stopwatch_status==1)  

  141.                     Num_Decrease++;  

  142.                 else  

  143.                 {  

  144.                 }  

  145.             }  

  146.             break;  

  147.         default:  

  148.             break;  

  149.     }  

  150. }  

  151. void GROUP1_IRQHandler(void)  

  152. {  

  153.     switch (DL_GPIO_getPendingInterrupt(PORT_Key2_PORT)) {  

  154.         case PORT_Key2_PIN_Key2_IIDX:  

  155.   

  156.             switch(LS_Mode.stopwatch_status){  

  157.   

  158.             case 0:  

  159.                 LS_Mode.stopwatch_status++;  

  160.                 break;  

  161.             case 1:  

  162.                 LS_Mode.stopwatch_status++;  

  163.                 break;  

  164.             case 2:  

  165.                 LS_Mode.stopwatch_status=0;  

  166.                 break;  

  167.             default:  

  168.                 LS_Mode.stopwatch_status=0;  

  169.             break;  

  170.             }  

  171.          break;  

  172.          case PORT_Key1_PIN_Key1_IIDX:  

  173.              DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);  

  174.              if(LS_Mode.func_mode==0)  

  175.              {  

  176.                  Num_Decrease=0;  

  177.                  LS_Mode.stopwatch_status=0;  

  178.                  LS_Mode.func_mode++;  

  179.   

  180.              }  

  181.              else if(LS_Mode.func_mode==1)  

  182.              {  

  183.                  LS_Mode.func_mode--;  

  184.                  Num_Decrease=LS_Mode.Num_start;  

  185.              }  

  186.              else  

  187.              {  

  188.                  LS_Mode.func_mode=0;  

  189.                  Num_Decrease=LS_Mode.Num_start;  

  190.              }  

  191.          break;  

  192.          default:  

  193. //             DL_GPIO_togglePins(GPIO_LEDS_PORT, GPIO_LEDS_USER_LED_1_PIN);  

  194.              break;  

  195.     }  

  196. }  

编译下载运行,结果如下:

8.JPG4.JPG2.JPG






专家
2024-07-29 08:09:01     打赏
2楼

不错啊,感谢分享


高工
2024-07-29 11:26:16     打赏
3楼

不错啊,感谢分享


专家
2024-07-29 20:49:30     打赏
4楼

谢谢分享


高工
2024-07-29 20:51:47     打赏
5楼

谢谢分享


专家
2024-07-29 20:56:20     打赏
6楼

谢谢分享


助工
2024-08-05 09:43:56     打赏
7楼

感谢分享


菜鸟
2024-08-30 17:51:58     打赏
8楼

谢谢楼主分享。


共8条 1/1 1 跳转至

回复

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