MSP430单片机 矩阵键盘与数码管实验(附原理图)
/*************************************************************
*MSP430单片机矩阵键盘与数码管实验
*功能:用共阳极数码管显示按键的键值
*适用:MSP430各系列单片机
*by:duyunfu1987
*************************************************************/
#include "msp430x44x.h"
#define ROW P2OUT //矩阵键盘的行宏定义
#define COL P2IN //矩阵键盘的列宏定义
#define DPYOUT P3OUT //数码管输出口宏定义
unsigned char keyval; //键值
//共“阳”极数码管的码表
unsigned char LED7CA[] ={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,
~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71,0xff};
/*******************************************************
*函数名称:keyscan()
*功 能:扫描4*3矩阵键盘,并返回键值
*出口参数:若有按键则返回键值,若无按键返回15
*4*3矩阵键盘: 0 1 2 3
* 4 5 6 7
* 8 9 A b
*******************************************************/
unsigned char keyscan()
{
int i=0;
unsigned char key=0;
ROW = 0x8f; //先置三行输出低电平
if((COL & 0x0f)!= 0x0f) //是否有按键
{
do i++;
while(i<3000); //消抖动延时
ROW = 0xbf; //扫描第一行
if((COL & 0x0f)== 0x0f)
{ ROW = 0xdf; //扫描第二行
if((COL & 0x0f)== 0x0f)
{ ROW = 0xef; //扫描第三行
if((COL & 0x0f)== 0x0f)
key = 15;
else key = ~((ROW & 0XF0)|(COL & 0X0F));
}
else key = ~((ROW & 0XF0)|(COL & 0X0F));
}
else key = ~((ROW & 0XF0)|(COL & 0X0F));
if(key != 15)
switch(key) //获取有效地键值
{ case 0x48: key=0; break;
case 0x44: key=1; break;
case 0x42: key=2; break;
case 0x41: key=3; break;
case 0x28: key=4; break;
case 0x24: key=5; break;
case 0x22: key=6; break;
case 0x21: key=7; break;
case 0x18: key=8; break;
case 0x14: key=9; break;
case 0x12: key=10;break;
case 0x11: key=11;break;
default: key=15;
}
}
else key = 15;
keyval=key;
return key;
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P3DIR |= 0xff;
P3OUT = 0xff; //共阳极数码管输出口初始化
P2DIR |= BIT4 +BIT5+BIT6; //先配置矩阵键盘的行(输出)
//P2.6 第一行,P2.5 第二行,P2.4 第三行
//P2.3 第一列,P2.2 第二列,P2.1 第三列,P2.0 第四列
keyval=16;
while(1)
{ keyscan();
if(keyval != 15 && keyval<17)
DPYOUT = LED7CA[keyval];//数码管显示键值
}
}
本文档为【MSP430单片机_矩阵键盘与数码管实验(附原理图)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。