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

📄 p296_s1.c

📁 msp430开发版程序
💻 C
字号:
//矩阵式键盘 P296
//示例程序如下:

//本例修改为采用中断方式处理,
//书上代码留给用户自己研究

/*
将16个按键的电路板接到P1口上
将8路的发光二极管电路板接到P2口上观看运行效果
*/

#include  <msp430x14x.h>

#define  uint unsigned int
#define  uchar unsigned char

//键值编码表
const uchar KeyCode[16]=
{
//0->key17
0xE7,
//1->key18
0xD7,
//2->key19
0xB7,
//3->key20
0x77,
//4->key21
0xEB,
//5->key22
0xED,
//6->key23
0xDB,
//7->key24
0xDD,
//8->key25
0xBB,
//9->key26
0xBD,
//10->key27
0x7B,
//11->key28
0x7D,
//12->key29
0xEE,
//13->key30
0xDE,
//14->key31
0xBE,
//15->key32
0x7E
};
uchar KeyValue=0xFF;

//ms粗略延时
delayms(uint delaytimes)
{
	uint i,j;
	for(i=0;i<delaytimes;i++)
	{
		for(j=0;j<1000;j++);
	}
}

//端口1中断处理程序
#pragma vector=PORT1_VECTOR
__interrupt void Port1INT(void)
{
  	uchar i;
	uchar colpos=0x70;	//列位置
	uchar keytemp=0xff;

	for(i=255;i>0;i--);	//延时,消除抖动	
	
	for(i=0;i<4;i++)	//扫描4列
	{
	  	colpos &= 0xf0;	//保持P1.4~P1.7为输出,屏蔽P1.0~P1.3
		P1OUT=colpos;	//输出列
		_NOP();//延时
		_NOP();
		keytemp=P1IN & 0x0f;	//获取值,屏蔽P1.4~P1.7
		keytemp |= colpos;//得到行列值,P1.0~1.3为行值,P1.4~P1.7为列值
		if((keytemp&0x0f)!=0x0f) KeyValue=keytemp;	//判断是否有按键按下
		colpos>>=1;	//右移一位,进行下一列扫描
		colpos|=0x80;//高位补1,因为是低输出有效,右移时高位是补0的
	}
	P1OUT=0x00;//恢复原来的值,使下次按键按下时能产生中断
	
	P1IFG=0x00;//清除中断标志位
}

void main()
{
  	uint i;
	
	WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
//初始化端口	
	P1DIR=0xF0;//P1.4 P1.5 P1.6 P1.7设置为输出
	P1OUT=0x00;//使按键按下时能产生中断
	P1IE=0x0F;//P1.0 P1.1 P1.2 P1.3中断允许
	P1IES=0x0F;//P1.0 P1.1 P1.2 P1.3下降沿触发中断
	P2DIR=0xFF;//P2口所有引脚设置为输出方向
	P2OUT=0xFF;//熄灭所有LED
//初始化时钟	
	BCSCTL1=RSEL2+RSEL1+RSEL0;//XT2开启 LFXT1工作在低频模式 ACLK不分频 最高的标称频率
	DCOCTL=DCO2+DCO1+DCO0;//DCO为最高频率
	do
	{
		IFG1&=~OFIFG;//清除振荡器失效标志
		for(i=255;i>0;i--);
	}while(IFG1&OFIFG);//判断XT2是否起振
	BCSCTL2=SELM1+SELS;//MCLK SMCLK时钟源为TX2CLK不分频
	
	_EINT();//打开中断
	while(1)
	{
	  	for(i=0;i<16;i++)
		{			
			if(KeyValue==KeyCode[i])
			{
			  	KeyValue = 0xff;
			  	P2OUT=KeyCode[i];
				delayms(1000);
			}			
		}
		P2OUT=0XFF;
		delayms(10);
	}
}

⌨️ 快捷键说明

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