[DemoCode下载] 【赛元95F】第2步:按键测试

[复制链接]
1358|0
 楼主| gaoyang9992006 发表于 2020-3-22 16:59 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2020-3-26 15:29 编辑
  1. /*
  2. SC95F8617,GPIO输入输出例子,利用P11输出闪灯,P10作为按钮
  3. 按下按钮可以调节闪烁的频率.
  4. GPIO说明
  5. PxCON=0x00;设置为高阻输入模式
  6. PxCON=0xFF;设置为推挽输出模式
  7. PxPH = 0xFF;设置上拉电阻
  8. */
  9. #include"SC95F861X.H"
  10. #include"stdio.h"

  11. #define LED P11
  12. #define Button_PIN P10
  13. unsigned int x=50000;

  14. /*
  15. ---------IO输出测试代码---------
  16. */

  17. void delay(void);
  18. void GPIO_Init(void);
  19. void Timer0_Init(void);
  20. void Blink(void);
  21. void key(void);
  22. /*
  23. ---------主函数---------
  24. */
  25. void main(void)
  26. {
  27.         GPIO_Init();
  28.         Timer0_Init();

  29.         while(1)
  30.         {
  31.                 Blink();
  32.                 key();
  33.         }
  34. }

  35. void delay(void)
  36. {
  37. //设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz
  38.         int i=320;
  39.         TR0=1;
  40.         while(i--)
  41.         {
  42.                 TL0 = (65536 - x)%256;    //时钟为Fsys,则溢出时间=50000*(1/Fsys);
  43.                 TH0 = (65536 - x)/256;
  44.                 while(TF0==0);
  45.                 TF0=0;
  46.         }
  47.         TR0=0;
  48. }

  49. void GPIO_Init(void)
  50. {

  51. //P10设置为输入上拉,P11设置为输出        
  52.         P1CON=BIT1;
  53.         P1PH =BIT0;
  54. }
  55. void Timer0_Init(void)
  56. {
  57. /*
  58.         TCON,定时器控制寄存器,    |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-|
  59.         
  60.         TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00|
  61.         模式0:13位定时器计数器模式
  62.         模式1:16位定时器计数器模式
  63.         模式2:8位自动重载模式
  64.         模式3:两个8位定时器计数器模式
  65. */
  66. //设置定时器0工作模式1        
  67.         TMOD        |=        BIT0;
  68. //设置定时器0时钟源不分频,32MHz;默认是12分频        
  69.         TMCON        |=        BIT0;
  70. }

  71. void Blink(void)
  72. {
  73.         LED=~LED;
  74.         delay();
  75. }
  76. void key()
  77. {
  78.         if(Button_PIN==0)
  79.         {

  80.                 while(Button_PIN==0);
  81.                 if(Button_PIN==1)
  82.                         {
  83.                                 x=x-5000;
  84.                                 if(x==0)
  85.                                 x=50000;
  86.                         }
  87.         }
  88. }
试了一下,可以进行十级闪烁速度调整。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

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