[DemoCode下载] 【赛元95F】+3.定时器闪烁LED小练

[复制链接]
944|4
 楼主| xyz549040622 发表于 2020-4-1 16:46 | 显示全部楼层 |阅读模式
本帖最后由 xyz549040622 于 2020-4-1 16:49 编辑

1.使用定时器0进行LED的闪烁,定时器配置为1ms
2.每500ms闪烁一次LED
  1. #include "SC95F861x_C.h"

  2. /*---------------------------------------------------------------------
  3. // 宏定义
  4. ----------------------------------------------------------------------*/

  5. #define LED        P40
  6. /*---------------------------------------------------------------------
  7. // 函数申明
  8. ----------------------------------------------------------------------*/
  9. void ClockInit(void);
  10. void GpioInit(void);
  11. void delay_ms(unsigned int ms);
  12. void Timer0Init(void);

  13. /*---------------------------------------------------------------------
  14. // 函数: void main(void)
  15. // 描述: 主函数
  16. // 参数: non
  17. // 返回: none.
  18. // 版本: VER1.0
  19. // 日期:
  20. // 备注:
  21. ----------------------------------------------------------------------*/
  22. void main(void)
  23. {
  24.         ClockInit();
  25.         GpioInit();
  26.         Timer0Init();
  27.         EA = 1;
  28.         while(1)
  29.         {        
  30.         }
  31. }

  32. /*---------------------------------------------------------------------
  33. // 函数: void ClockInit(void)
  34. // 描述: 时钟初始化
  35. // 参数: non
  36. // 返回: none.
  37. // 版本: VER1.0
  38. // 日期:
  39. // 备注:
  40. ----------------------------------------------------------------------*/
  41. void ClockInit(void)
  42. {
  43. //上电默认使用HRC32Mhz作为Fhrc,可以用编程软件进行配置分频输出为Fsys,也可以用程序进行配置,这里用编程软件配置,方便
  44. }

  45. /*---------------------------------------------------------------------
  46. // 函数: void ClockInit(void)
  47. // 描述: 时钟初始化
  48. // 参数: non
  49. // 返回: none.
  50. // 版本: VER1.0
  51. // 日期:
  52. // 备注:
  53. ----------------------------------------------------------------------*/
  54. void GpioInit(void)
  55. {        
  56.         //芯片为SC95F8617,则不用调用宏定义。
  57.         P4CON |= 0x01;  //设置P40为强推挽模式
  58.         P4PH  |= 0x01;        //P40上拉电阻打开
  59. }

  60. //========================================================================
  61. // 函数: void Timer0Init(void)
  62. // 描述: 定时器0的初始化,1ms定时
  63. // 参数: none
  64. // 返回: none.
  65. // 版本: VER1.0
  66. // 日期:
  67. // 备注:
  68. //========================================================================
  69. void Timer0Init(void)
  70. {
  71.         TMCON |= 0X01;    //Timer0选择时钟Fsys

  72.         TMOD &= 0xFB;//选择定时器0为定时模式
  73.         TMOD |= 0x01;//选择定时器0工作为模式1,16位定时器,不自动装载   
  74.         
  75.         TL0 = (65536 - 32000)%256;    //溢出时间:时钟为Fsys,则32000*(1/Fsys)=1ms;
  76.         TH0 = (65536 - 32000)/256;
  77.         TF0 = 0;//清除定时器0
  78.         ET0 = 1;//使能定时器0中断
  79.         TR0 = 1;//定时器0开始计时
  80.         
  81. }
  82. //========================================================================
  83. // 函数: void timer0() interrupt 1
  84. // 描述: 定时器0中断函数
  85. // 参数: none
  86. // 返回: none.
  87. // 版本: VER1.0
  88. // 日期:
  89. // 备注:
  90. //========================================================================
  91. void timer0() interrupt 1
  92. {
  93.         static unsigned int LedCounts = 0;
  94.   TL0 = (65536 - 32000)%256;
  95.         TH0 = (65536 - 32000)/256;
  96.         LedCounts++;
  97.         if(LedCounts == 500)
  98.         {
  99.                 LedCounts = 0;
  100.                 LED = ~LED;        //LED进行500ms的闪烁        
  101.         }
  102. }



  103. //========================================================================
  104. // 函数: void  delay_ms(unsigned int ms ms)
  105. // 描述: 延时函数。主频32M,使用STC软件生成
  106. // 参数: ms,要延时的ms数, 这里只支持1~65536ms.
  107. // 返回: none.
  108. // 版本: VER1.0
  109. // 日期:
  110. // 备注:
  111. //========================================================================
  112. void  delay_ms(unsigned int ms)//@32MHz
  113. {
  114.     unsigned char i,j;
  115.     unsigned int N;
  116.                 for(N = 0; N < ms;N++)
  117.                 {
  118.                         i = 32;
  119.                         j = 29;
  120.                         do
  121.                         {
  122.                                 while (--j);
  123.                         } while (--i);
  124.                 }
  125. }


qwe123zxc 发表于 2020-4-1 20:02 来自手机 | 显示全部楼层
同一按键如何实现长按短按

评论

knk
很容易的,单击,双击,长按,都可以实现  发表于 2020-4-1 22:00
 楼主| xyz549040622 发表于 2020-4-1 21:49 | 显示全部楼层
qwe123zxc 发表于 2020-4-1 20:02
同一按键如何实现长按短按

定时器配合,用状态机检测。
598330983 发表于 2020-4-5 19:12 | 显示全部楼层
操作非常6.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部