[合泰杯HT32讨论区] 合泰单片机工程之按键输入

[复制链接]
667|10
 楼主| kzlzqi 发表于 2023-2-26 16:01 | 显示全部楼层 |阅读模式
按键输入的例程中我采用的是stm32的代码编辑方式,即通过预处理来编辑模块头文件和相应的.c文件,用的时候再去主函数中进行调用即可。这样代码编辑起来就比较有逻辑一点,且没有那么多堆在一起。 按键输入使用的引脚是PA1,要设置为输入模式,还要设置为上拉模式,拉高为高电平状态,保证PA1处于一个高电平状态。只要通过按键来改变它的电平状态。PS.按键的一端连接PA1,另一端是连接GND的,也就是接地。
提示:以下是本篇文章正文内容,下面案例可供参考

一、按键函数
先来看头文件

  1. #ifndef __KEY_H
  2. #define __KEY_H       

  3. #include "HT66F2390.h"
  4. #include "delay.h"

  5. #define key _pa1     
  6. #define keyc _pac1       //输入输出模式选择寄存器
  7. #define keyPU _papu1     //设置为上拉模式,保证是高电平


  8. void key_Init(void);
  9. int key_Scan(void);
  10. #endif


评论

———————————————— 版权声明:本文为CSDN博主「yijianpeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/newpeopie/article/details/113716884  发表于 2023-2-26 16:02
 楼主| kzlzqi 发表于 2023-2-26 16:02 | 显示全部楼层
这里的输入输出寄存器是

 楼主| kzlzqi 发表于 2023-2-26 16:03 | 显示全部楼层
上拉设置寄存器是


 楼主| kzlzqi 发表于 2023-2-26 16:03 | 显示全部楼层
所以来看.c文件
  1. #include "key.h"
  2. /*

  3. 按键初始化函数
  4. 设置按键IO口为pa0
  5. 且为上拉模式,保证有稳定的高电平
  6. 引脚的设置,进入头文件中更改
  7. */
  8. void key_Init(void)   
  9. {
  10.         keyc =1;   //设置为输入模式
  11.         keyPU = 1; //PxPUn寄存器设置为上拉模式               
  12. }

  13. int key_Scan(void)  //按键扫描函数
  14. {
  15.         if(key == 0)
  16.         {
  17.                 delay_ms(10);  //去抖动
  18.                 if (key == 0)
  19.                         return 1;
  20.                 else
  21.                         return 0;
  22.                 while(!key);  //检测按键是否松开
  23.         }
  24.         else
  25.                 return 0;
  26. }
 楼主| kzlzqi 发表于 2023-2-26 16:03 | 显示全部楼层
有设置了一个按键扫描函数,如果有按键按下会返回1,没有则返回0。
 楼主| kzlzqi 发表于 2023-2-26 16:04 | 显示全部楼层
主函数
main.c):
  1. #include "HT66F2390.h"
  2. #include "delay.h"
  3. #include "led.h"
  4. #include "key.h"


  5. void main()
  6. {
  7.         int n=0,t=0;
  8.         LED_Init();    //LED初始化
  9.         key_Init();      //按键初始化
  10.         while(1)
  11.         {
  12.                 if (key_Scan())  //按键按下
  13.                 {
  14.                         n++;
  15.                         n %= 2;   //n =n%2   n = 1~2
  16.                 }
  17.                 switch(n)
  18.                 {
  19.                         case 1: LED1 = 0; //灭
  20.                                 break ;
  21.                         case 0: LED1 =1;  //亮
  22.                                 break ;
  23.                 }
  24.                 delay_ms(10);
  25.                 t++;
  26.                 if(t ==100)
  27.                 {
  28.                         t=0;
  29.                         LED2 = ~LED2;           
  30.                 }
  31.         }
  32. }
 楼主| kzlzqi 发表于 2023-2-26 16:05 | 显示全部楼层
主函数是通过按键扫描函数不断的循环检查是否有按键按下,如果有按键按下的话LED1会进行亮灯。而LED2则是不断地闪烁检查系统是否正常运行。
 楼主| kzlzqi 发表于 2023-2-26 16:05 | 显示全部楼层
怎么添加头文件和.c文件?




 楼主| kzlzqi 发表于 2023-2-26 16:05 | 显示全部楼层
 楼主| kzlzqi 发表于 2023-2-26 16:06 | 显示全部楼层
总结
相应的工程文件在这里[添加链接描述]。
链接:https://pan.baidu.com/s/1NeoJCCUVHLKtMR8X1fi19Q
提取码:1111
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

996

帖子

2

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