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

📄 main.c

📁 好东西一起分享 键盘显示和控制 关于显示和控制的键盘板子
💻 C
字号:
#include "config.h"

#define   BEEP		(1<<7)			// P0.7控制蜂鸣器,低电平鸣叫
#define   KEY		(0x3F<<16)		// P0.16~P0.21分别接KEY1~KEY6
#define	  LED       (0xFF<<18)		// P1.18~P1.23分别控制LED1~LED6

unsigned long	  	KEY_N;          //按键号寄存器


void  WaitKey(void)
{  	uint32  i;

   	while(1)
   	{  	// 等待KEY1按下(即等待KEY1对应的口线为低电平,若为高电平则一直循环等待)
   		// 通过IO0PIN读取P0.0~P0.31口的电平值,屏蔽其它位后判断P0.7是否为低电平。
   		while( (IO0PIN&KEY) ==KEY);
   	
      	for(i=0; i<50000; i++);				// 软件延时,去抖动(根据系统时钟调整)
      	
      	// 判断KEY1是否仍为低电平,若是表明按键有效,否则表明是假按键
      	if((IO0PIN&KEY) !=KEY) break;	
   	}
    KEY_N=(IO0PIN&KEY);
}

/*
******************************************************************************************
** 函数名称 : DelayNS()
** 函数功能 : 长软件延时。
** 入口参数 : dly		延时控制值,值越大延时越长
** 出口参数 : 无
******************************************************************************************
*/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<50000; i++);
}



const uint32 LED_DISP[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
						 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,
						 0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,
						 0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
						 0x18,0x3c,0x7e,0xff,0x7e,0x3c,0x18,0x00,
						 0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81,0x00};
						 
						 
void leddisp(uint32 one)
{
	uint8
						 
/*
******************************************************************************************
** 名称 : main()
** 功能 : 初始化GPIO,然后等待KEY1按键,若有按键则控制蜂鸣器响一声。
******************************************************************************************
*/
int main (void)
{	uint8 i;
	// 由于LPC2131的P0口的I/O与其它功能复用,比如P0.7与PWM2、SSEL0、EINT2复用,
   	// 所以要先设置管脚连接。把口线设置为GPIO功能时,才能进行I/O控制。
	PINSEL0 = 0x00000000;	// 设置P0.0~P0.15为GPIO功能
	PINSEL1 = 0x00000000;	// 设置P0.16~P0.31为GPIO功能
	PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO
	
	IO0DIR  = BEEP;			// 设置BEEP控制口P0.7为输出模式,(P0的)其它I/O为输入模式
	IO0SET  = BEEP;			// 控制BEEP(P0.7)输出高电平1
	IO1DIR  = LED;			// 设置LED控制口为输出
	IO1SET  = LED;			// 熄灭LED

	while(1)
	{	WaitKey();			// 等待KEY1按键
		switch(KEY_N)
		{
			case 0x003E0000:
			{
	    		// 控制蜂鸣器响第一声
				IO0CLR =  BEEP;		// 控制BEEP(P0.7)输出低电平0,蜂鸣器响
				DelayNS(20);
				IO0SET =  BEEP;		// 控制BEEP(P0.7)输出高电平1,蜂鸣器不响
				DelayNS(20);
				//KEY1控制流水线花样
				for (i=0;i<8;i++)
					{
						IO1SET=~((LED_DISP[i])<<18);
						DelayNS(20);
						IO1CLR=((LED_DISP[i])<<18);
						DelayNS(20);
					}
			}
			break;
			case 0x3D0000:
			{
	    		// 控制蜂鸣器响第一声
				IO0CLR =  BEEP;		// 控制BEEP(P0.7)输出低电平0,蜂鸣器响
				DelayNS(20);
				IO0SET =  BEEP;		// 控制BEEP(P0.7)输出高电平1,蜂鸣器不响
				DelayNS(20);
				//KEY2控制流水线花样
				for (i=8;i<16;i++)
					{
						IO1SET=~((LED_DISP[i])<<18);
						DelayNS(20);
						IO1CLR=((LED_DISP[i])<<18);
						DelayNS(20);
					}
			}
			break;
			case 0x3B0000:
			{
	    		// 控制蜂鸣器响第一声
				IO0CLR =  BEEP;		// 控制BEEP(P0.7)输出低电平0,蜂鸣器响
				DelayNS(20);
				IO0SET =  BEEP;		// 控制BEEP(P0.7)输出高电平1,蜂鸣器不响
				DelayNS(20);
				//KEY3控制流水线花样
				for (i=16;i<24;i++)
					{
						IO1SET=~((LED_DISP[i])<<18);
						DelayNS(20);
						IO1CLR=((LED_DISP[i])<<18);
						DelayNS(20);
					}
			}
			break;
			case 0x370000:
			{
	    		// 控制蜂鸣器响第一声
				IO0CLR =  BEEP;		// 控制BEEP(P0.7)输出低电平0,蜂鸣器响
				DelayNS(20);
				IO0SET =  BEEP;		// 控制BEEP(P0.7)输出高电平1,蜂鸣器不响
				DelayNS(20);
				//KEY4控制流水线花样
				for (i=24;i<32;i++)
					{
						IO1SET=~((LED_DISP[i])<<18);
						DelayNS(20);
						IO1CLR=((LED_DISP[i])<<18);
						DelayNS(20);
					}
			}	
			break;
			case 0x2F0000:
			{
	    		IO0CLR =  BEEP;		// 控制BEEP(P0.7)输出低电平0,蜂鸣器响
				DelayNS(20);
				IO0SET =  BEEP;		// 控制BEEP(P0.7)输出高电平1,蜂鸣器不响
				DelayNS(20);
				//KEY5控制流水线花样
				for (i=32;i<40;i++)
					{
						IO1SET=~((LED_DISP[i])<<18);
						DelayNS(20);
						IO1CLR=((LED_DISP[i])<<18);
						DelayNS(20);
					}
			}	
			break;
			case 0x1F0000:
			{
	  	  		IO0CLR =  BEEP;		// 控制BEEP(P0.7)输出低电平0,蜂鸣器响
				DelayNS(20);
				IO0SET =  BEEP;		// 控制BEEP(P0.7)输出高电平1,蜂鸣器不响
				DelayNS(20);
				//KEY6控制流水线花样
				for (i=40;i<48;i++)
					{
						IO1SET=~((LED_DISP[i])<<18);
						DelayNS(20);
						IO1CLR=((LED_DISP[i])<<18);
						DelayNS(20);
					}
			}
			break;
		};	
	}
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -