⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyin.c

📁 Lpc2103的小程序
💻 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 + -