合泰杯——合泰单片机工程3之按键输入
前言
按键输入的例程中我采用的是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
这里的输入输出寄存器是
上拉设置寄存器是
所以来看.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;
}
有设置了一个按键扫描函数,如果有按键按下会返回1,没有则返回0。
二、主函数
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;
}
}
}
主函数是通过按键扫描函数不断的循环检查是否有按键按下,如果有按键按下的话LED1会进行亮灯。而LED2则是不断地闪烁检查系统是否正常运行。
三、 怎么添加头文件和.c文件?
总结
相应的工程文件在这里[添加链接描述]。
链接:https://pan.baidu.com/s/1NeoJCCUVHLKtMR8X1fi19Q
提取码:1111
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V2的分享