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

📄 p292_s1.c

📁 msp430开发版程序
💻 C
字号:
//例1 单键输入式键盘 P292
//MSP430的P1.0、P1.1、P1.2、P1.3分别和3个按键连线。其中上拉电阻保证了按键断开时,P1.0、P1.1、P1.2、P1.3有确定的高电平。
//在编写软件时,通常采用查询的方法。但MSP430系列单片机的I/O口线本身具有中断能力,例如端口P2或P1,因此也可以采用中断方式。但为了使得程序具有更好的可移植性,这里介绍一下
//查询方法的实现。

/*
将8路的按键电路板接到P1口上观看运行效果
将8路的发光二极管电路板接到P2口上观看运行效果
为了便于说明问题,本实例修改了书本的代码,使之更容易理解
按下P1.0~P1.3对应的按键,同时点亮P2.0~P2.3的LED
*/

#include  <msp430x14x.h>

#define	NO_KEY	0x0f
#define	KEY_K1	0x0e
#define	KEY_K2	0x0d
#define	KEY_K3	0x0b
#define	KEY_K4	0x07

void Delayus(unsigned int DelayTimes)
{
	unsigned int i;
	for(i=0;i<DelayTimes;i++)
	{
		_NOP();
	}
}

unsigned char GetKey(void)
{
	unsigned char cKeyBuffer;
	unsigned char cKey;
	cKeyBuffer = P1IN & 0x0f;	//按键输入,屏蔽P1.4~P1.7的干扰
	if(cKeyBuffer != NO_KEY)	//有按键按下
	{
		Delayus(1000);	//延时1000us,粗略的延时
		cKey = P1IN & 0x0f;	//按键输入,屏蔽P1.4~P1.7的干扰
		if(cKey == cKeyBuffer)	//同一按键
		{
			return cKey;
		}
		else return NO_KEY;	//按键抖动,不做处理
	}
	else return NO_KEY;	//没有按键按下
}

void main(void)
{
  	unsigned char keyval=0;
//   初始化端口  
  	P1DIR = 0X00;	// P1作为输入
	P2DIR = 0X0f;	// P2作为输出
	P2OUT = 0X0f;	//熄灭所以的LED
	while(1)
	{
	  	keyval = GetKey();	//获取按键值
		switch (keyval)		//判断按键值
		{
			case NO_KEY:	//无按键按下,熄灭所有的LED
				P2OUT = 0xff;
				break;	
			case KEY_K1:	//K1的处理
			  	P2OUT &=~BIT0;	//点亮P2.0对应的LED 
			  	break;
			case KEY_K2:	//K2的处理		
			  	P2OUT &=~BIT1;	//点亮P2.1对应的LED 
				break;
			case KEY_K3:	//K3的处理			
			  	P2OUT &=~BIT2;	//点亮P2.2对应的LED 
				break;				
			case KEY_K4:	//K4的处理			
			  	P2OUT &=~BIT3;	//点亮P2.3对应的LED 
				break;				
			default :		//其它情况,不做处理
			  	P2OUT = 0xff;	
		  		break;
		}	
		Delayus(50000);	//延时,便于看到LED点亮的效果
	}	
}

⌨️ 快捷键说明

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