📄 keyin.c
字号:
/*************************************** Copyright (c) *************************************************
*
* POLAR STAR
* 北天星国际贸易(深圳)有限公司
* http://www.po-star.com
*
* 文 件 名: Keyin.c
* 文件描述:键盘输入。当检测到有按键输入时,对相应的发光二极管进行取反控制。
* 使用I/O口输入方式对按键进行扫描。
*
* 说 明:1.去掉跳线器JP10中RI1的连接
* 2.将跳线器JP1的KEY1,KEY2短接及跳线器JP2的LED1,LED2短接;
*
********************************************************************************************************/
#include "config.h"
#define LED1CON 1<<18 // P0.18引脚控制LED1,低电平点亮
#define LED2CON 1<<17 // P0.17引脚控制LED2,低电平点亮
#define KEY1 1<<16 // P0.16引脚连接KEY1
#define KEY2 1<<15 // P0.15引脚连接KEY2
/********************************************************************************************************
*
* 函数名称:WaitKey()
*
* 功能描述:等待一个有效按键,返回对应指示灯的值。本函数有去抖功能。
*
* 入口参数:无
* 出口参数:LedStat
*
* 全局变量: 无
* 调用模块: 无
*
********************************************************************************************************/
uint32 WaitKey(void)
{
uint32 tmp,PinIn,LedStat;
while(1)
{
do
{
PinIn = IOPIN; // 读到IO状态
PinIn = ~PinIn & (KEY1|KEY2); // 获得键码
}
while( PinIn!=0 ); // 等待KEY1键按下
for(tmp=0; tmp<50000; tmp++); // 延时去抖
PinIn = IOPIN;
PinIn = ~PinIn & (KEY1|KEY2);
if(PinIn != 0) break; // 键值有效时,准备输出值
// 否则重新扫描按键状态
}
if(PinIn == KEY1) // 得到指示值
{
LedStat = LED1CON; // KEY1按下时,对LED1操作
}
else if(PinIn == KEY2)
{
LedStat = LED2CON; // KEY2按下时,对LED2操作
}
else
{
LedStat = LED1CON|LED2CON; //否则,两个同时操作
}
do // 等待KEY1键放开
{
PinIn = IOPIN;
PinIn = ~PinIn & (KEY1|KEY2);
}
while(PinIn != 0); // 等待KEY1键放开
return LedStat; // 返回操作LED内容
}
/********************************************************************************************************
*
* 函数名称:main()
*
* 功能描述:读按键,控制LED闪烁
*
* 入口参数:无
* 出口参数:无
*
* 全局变量: 无
* 调用模块: 无
*
********************************************************************************************************/
int main(void)
{
uint32 LedCon;
PINSEL0 = 0x00000000; // 设置所有管脚连接GPIO
PINSEL1 = 0x00000000;
IO0DIR = LED1CON|LED2CON; // 设置LED控制口为输出,其它I/O为输入
LedCon = LED1CON|LED2CON; // 设置LED的初始状态
while(1)
{
if((IOSET & LedCon) == 0) // 相应LED控制取反(开关)操作
IOSET = LedCon; // 灭灯
else
IOCLR = LedCon; // 亮灯
LedCon = WaitKey(); // 获得指示端口值
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -