打印
[合泰杯HT32讨论区]

合泰单片机工程之按键输入

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

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

#ifndef __KEY_H
#define __KEY_H       

#include "HT66F2390.h"
#include "delay.h"

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


void key_Init(void);
int key_Scan(void);
#endif


使用特权

评论回复
评论
kzlzqi 2023-2-26 16:02 回复TA
———————————————— 版权声明:本文为CSDN博主「yijianpeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/newpeopie/article/details/113716884 

相关帖子

沙发
kzlzqi|  楼主 | 2023-2-26 16:02 | 只看该作者
这里的输入输出寄存器是

使用特权

评论回复
板凳
kzlzqi|  楼主 | 2023-2-26 16:03 | 只看该作者
上拉设置寄存器是


使用特权

评论回复
地板
kzlzqi|  楼主 | 2023-2-26 16:03 | 只看该作者
所以来看.c文件
#include "key.h"
/*

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

int key_Scan(void)  //按键扫描函数
{
        if(key == 0)
        {
                delay_ms(10);  //去抖动
                if (key == 0)
                        return 1;
                else
                        return 0;
                while(!key);  //检测按键是否松开
        }
        else
                return 0;
}

使用特权

评论回复
5
kzlzqi|  楼主 | 2023-2-26 16:03 | 只看该作者
有设置了一个按键扫描函数,如果有按键按下会返回1,没有则返回0。

使用特权

评论回复
6
kzlzqi|  楼主 | 2023-2-26 16:04 | 只看该作者
主函数
main.c):
#include "HT66F2390.h"
#include "delay.h"
#include "led.h"
#include "key.h"


void main()
{
        int n=0,t=0;
        LED_Init();    //LED初始化
        key_Init();      //按键初始化
        while(1)
        {
                if (key_Scan())  //按键按下
                {
                        n++;
                        n %= 2;   //n =n%2   n = 1~2
                }
                switch(n)
                {
                        case 1: LED1 = 0; //灭
                                break ;
                        case 0: LED1 =1;  //亮
                                break ;
                }
                delay_ms(10);
                t++;
                if(t ==100)
                {
                        t=0;
                        LED2 = ~LED2;           
                }
        }
}

使用特权

评论回复
7
kzlzqi|  楼主 | 2023-2-26 16:05 | 只看该作者
主函数是通过按键扫描函数不断的循环检查是否有按键按下,如果有按键按下的话LED1会进行亮灯。而LED2则是不断地闪烁检查系统是否正常运行。

使用特权

评论回复
8
kzlzqi|  楼主 | 2023-2-26 16:05 | 只看该作者
怎么添加头文件和.c文件?




使用特权

评论回复
9
kzlzqi|  楼主 | 2023-2-26 16:05 | 只看该作者

使用特权

评论回复
10
kzlzqi|  楼主 | 2023-2-26 16:06 | 只看该作者
总结
相应的工程文件在这里[添加链接描述]。
链接:https://pan.baidu.com/s/1NeoJCCUVHLKtMR8X1fi19Q
提取码:1111
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

797

帖子

2

粉丝