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

📄 hnr_s1.c

📁 msp430开发版程序
💻 C
字号:
//例1 单键输入式键盘 P292
//MSP430的P1.0、P1.1、P1.2分别和3个按键连线。其中上拉电阻保证了按键断开时,P1.0、P1.1、P1.2有确定的高电平。
//采用中断的方法实现

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

#include  <msp430x14x.h>

#define	NO_KEY	0x07
#define	KEY_K1	0x06
#define	KEY_K2	0x05
#define	KEY_K3	0x03

unsigned char keyonflag = 0x00;	//按键按下标志
unsigned char keyval = 0x00;	//按键值

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

void main(void)
{
  	WDTCTL = WDTPW + WDTHOLD;
//   初始化端口  
  	P1DIR = 0X00;	// P1作为输入
	P1IE = 0x07;	//P1.0~p1.2 作为按键中断
	P1IES = 0x07;	//下降沿中断
	P2DIR = 0X07;	// P2.0~P2.2作为输出
	P2OUT = 0X07;	//熄灭所以的LED
	_EINT();	//开启中断
	while(1)
	{
	  	if(keyonflag != 0x00)
		{
			keyonflag = 0x00;	//复位按键标志
			switch (keyval)		//判断按键值
			{
				case NO_KEY:	//无按键按下,熄灭所有的LED
					P2OUT = 0X07;
					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;				
				default :		//其它情况,不做处理
					break;
			}	
		}
		Delayus(50000);	//延时,便于看到LED点亮的效果
	}	
}

#pragma vector=PORT1_VECTOR
__interrupt void PORT1 (void)
{  
	unsigned char cKey;
	unsigned int i;
	
	for(i=0;i<1000;i++);	//去抖动延时
	
	cKey = P1IN & 0x07;	//只有P1.0~P1.2是输入,屏蔽其它引脚的干扰
	if(cKey != 0x07)	//有按键按下
	{
		keyonflag = 0x01;	//设置按键标志
		keyval = cKey;		//获取按键值
	}
	
  	P1IFG=0X00;	//清除中断标志
}

⌨️ 快捷键说明

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