[经验分享] 【GD32E231 DIY大赛】4.实现60秒定时

ddllxxrr   2019-5-25 06:00 楼主
由于,这次大赛本人用自已搭线来先实验再画图的思想。 这个差点腰折,因为我没有用数码管芯片来管理数码管。我的这次设计思想是“简单,实用”。 也就是在日常生活中我要用它来真正的定时,从而必免饭糊了,蒸长了之类。 每个数码管直接同管脚连接。这差一点使我失去信心做下去。 然而昨天晚上我试了一下居然可以显示,我把上次频率调快了一倍,显示的居然不错。 IMG_20190525_054416.jpg 以下是和管脚直接驱动的显示函数:
  1. void display(unsigned char i)
  2. {
  3. switch(i)
  4. {
  5. case 1:
  6. gpio_bit_reset(GPIOB,GPIO_PIN_10);
  7. gpio_bit_set(GPIOB,GPIO_PIN_11);
  8. gpio_bit_set(GPIOB,GPIO_PIN_13);
  9. gpio_bit_reset(GPIOB,GPIO_PIN_14);
  10. gpio_bit_reset(GPIOB,GPIO_PIN_15);
  11. gpio_bit_reset(GPIOB,GPIO_PIN_12);
  12. gpio_bit_reset(GPIOB,GPIO_PIN_0);
  13. gpio_bit_reset(GPIOB,GPIO_PIN_1);
  14. break;
  15. case 2:
  16. gpio_bit_set(GPIOB,GPIO_PIN_10);
  17. gpio_bit_set(GPIOB,GPIO_PIN_11);
  18. gpio_bit_reset(GPIOB,GPIO_PIN_13);
  19. gpio_bit_set(GPIOB,GPIO_PIN_14);
  20. gpio_bit_set(GPIOB,GPIO_PIN_15);
  21. gpio_bit_reset(GPIOB,GPIO_PIN_12);
  22. gpio_bit_set(GPIOB,GPIO_PIN_0);
  23. gpio_bit_reset(GPIOB,GPIO_PIN_1);
  24. break;
  25. case 3:
  26. gpio_bit_set(GPIOB,GPIO_PIN_10);
  27. gpio_bit_set(GPIOB,GPIO_PIN_11);
  28. gpio_bit_set(GPIOB,GPIO_PIN_13);
  29. gpio_bit_set(GPIOB,GPIO_PIN_14);
  30. gpio_bit_reset(GPIOB,GPIO_PIN_15);
  31. gpio_bit_reset(GPIOB,GPIO_PIN_12);
  32. gpio_bit_set(GPIOB,GPIO_PIN_0);
  33. gpio_bit_reset(GPIOB,GPIO_PIN_1);
  34. break;
  35. case 4:
  36. gpio_bit_reset(GPIOB,GPIO_PIN_10);
  37. gpio_bit_set(GPIOB,GPIO_PIN_11);
  38. gpio_bit_set(GPIOB,GPIO_PIN_13);
  39. gpio_bit_reset(GPIOB,GPIO_PIN_14);
  40. gpio_bit_reset(GPIOB,GPIO_PIN_15);
  41. gpio_bit_set(GPIOB,GPIO_PIN_12);
  42. gpio_bit_set(GPIOB,GPIO_PIN_0);
  43. gpio_bit_reset(GPIOB,GPIO_PIN_1);
  44. break;
  45. case 5:
  46. gpio_bit_set(GPIOB,GPIO_PIN_10);
  47. gpio_bit_reset(GPIOB,GPIO_PIN_11);
  48. gpio_bit_set(GPIOB,GPIO_PIN_13);
  49. gpio_bit_set(GPIOB,GPIO_PIN_14);
  50. gpio_bit_reset(GPIOB,GPIO_PIN_15);
  51. gpio_bit_set(GPIOB,GPIO_PIN_12);
  52. gpio_bit_set(GPIOB,GPIO_PIN_0);
  53. gpio_bit_reset(GPIOB,GPIO_PIN_1);
  54. break;
  55. case 6:
  56. gpio_bit_set(GPIOB,GPIO_PIN_10);
  57. gpio_bit_reset(GPIOB,GPIO_PIN_11);
  58. gpio_bit_set(GPIOB,GPIO_PIN_13);
  59. gpio_bit_set(GPIOB,GPIO_PIN_14);
  60. gpio_bit_set(GPIOB,GPIO_PIN_15);
  61. gpio_bit_set(GPIOB,GPIO_PIN_12);
  62. gpio_bit_set(GPIOB,GPIO_PIN_0);
  63. gpio_bit_set(GPIOB,GPIO_PIN_1);
  64. break;
  65. case 7:
  66. gpio_bit_set(GPIOB,GPIO_PIN_10);
  67. gpio_bit_set(GPIOB,GPIO_PIN_11);
  68. gpio_bit_set(GPIOB,GPIO_PIN_13);
  69. gpio_bit_reset(GPIOB,GPIO_PIN_14);
  70. gpio_bit_reset(GPIOB,GPIO_PIN_15);
  71. gpio_bit_reset(GPIOB,GPIO_PIN_12);
  72. gpio_bit_reset(GPIOB,GPIO_PIN_0);
  73. gpio_bit_reset(GPIOB,GPIO_PIN_1);
  74. break;
  75. case 8:
  76. gpio_bit_set(GPIOB,GPIO_PIN_10);
  77. gpio_bit_set(GPIOB,GPIO_PIN_11);
  78. gpio_bit_set(GPIOB,GPIO_PIN_13);
  79. gpio_bit_set(GPIOB,GPIO_PIN_14);
  80. gpio_bit_set(GPIOB,GPIO_PIN_15);
  81. gpio_bit_set(GPIOB,GPIO_PIN_12);
  82. gpio_bit_set(GPIOB,GPIO_PIN_0);
  83. gpio_bit_set(GPIOB,GPIO_PIN_1);
  84. break;
  85. case 9:
  86. gpio_bit_set(GPIOB,GPIO_PIN_10);
  87. gpio_bit_set(GPIOB,GPIO_PIN_11);
  88. gpio_bit_set(GPIOB,GPIO_PIN_13);
  89. gpio_bit_set(GPIOB,GPIO_PIN_14);
  90. gpio_bit_reset(GPIOB,GPIO_PIN_15);
  91. gpio_bit_set(GPIOB,GPIO_PIN_12);
  92. gpio_bit_set(GPIOB,GPIO_PIN_0);
  93. gpio_bit_set(GPIOB,GPIO_PIN_1);
  94. break;
  95. case 0:
  96. gpio_bit_set(GPIOB,GPIO_PIN_10);
  97. gpio_bit_set(GPIOB,GPIO_PIN_11);
  98. gpio_bit_set(GPIOB,GPIO_PIN_13);
  99. gpio_bit_set(GPIOB,GPIO_PIN_14);
  100. gpio_bit_set(GPIOB,GPIO_PIN_15);
  101. gpio_bit_set(GPIOB,GPIO_PIN_12);
  102. gpio_bit_reset(GPIOB,GPIO_PIN_0);
  103. gpio_bit_set(GPIOB,GPIO_PIN_1);
  104. break;
  105. default:
  106. break;
  107. }
  108. }
而秒定时用TIMER2
  1. void Timer2_Init(void)
  2. {
  3. timer_parameter_struct timer_initpara;
  4. rcu_periph_clock_enable(RCU_TIMER2);
  5. timer_deinit(TIMER2);
  6. /* TIMER configuration */
  7. timer_initpara.prescaler = 719;
  8. timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
  9. timer_initpara.counterdirection = TIMER_COUNTER_UP;
  10. timer_initpara.period = 99999; //2ms
  11. timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
  12. timer_initpara.repetitioncounter = 0;
  13. timer_init(TIMER2,&timer_initpara);
  14. timer_interrupt_enable(TIMER2, TIMER_INT_UP); /*Enable TIMER2*/
  15. nvic_irq_enable(TIMER2_IRQn, 0); //Set priority to 0(0-2)
  16. /* auto-reload preload enable */
  17. timer_auto_reload_shadow_enable(TIMER2);
  18. /* auto-reload preload enable */
  19. timer_enable(TIMER2);
  20. }
  21. /*The interrupt handler function of tmer2*/
  22. void TIMER2_IRQHandler(void)
  23. {
  24. if(RESET != timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP))
  25. {
  26. dd_flag = 1;
  27. }
  28. timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
  29. }
现在就差按键和报警了,等以后再分解。 本帖最后由 ddllxxrr 于 2019-5-25 06:17 编辑
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复评论 (1)

谢谢分享!
点赞  2019-5-27 08:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复