【MSP430F149学习】12按键输入
准备工具:电脑;TS8900--MSP430F149开发板;USB线一根
开发环境:IAR EW for MSP430 V5.30
按键控制数码管显示
PxIN 输入寄存器
该寄存器是只读寄存器。只能通过读取该寄存器内容才能知道 Px 口的输入信号的状态。
读出此寄存器的内容中,只有 Px 口设为输入的数据位有效。
对于 Px 口设为输出的那些位,一般来说,PxIN.x = PxOUT .x
PxIN.x:端口输入的电平
0: 端口输入低电平
1: 端口输入高电平
操作:
unsigned char Temp;
P1DIR &=0x77; // P1.3 和 P1.7 输入
Temp = P1IN; // Temp 为在已定义的一变量,Temp 中只要第 7 位和第四位有效。
按键原理图 外接5.1K上拉电阻按键按下时输入低电平
硬件图 用跳帽短接 JP12
程序代码
/**********************************************
程序功能:按键控制数码管显示
***********************************************/
#include
typedef unsigned char uchar;
typedef unsigned int uint;
#define keyin (P1IN & 0x0f)
#define wei_h P5OUT|= BIT5
#define wei_l P5OUT&= ~BIT5
#define duan_l P6OUT &= ~BIT6
#define duan_h P6OUT |= BIT6
//数码管7位段码:0--f
uchar scandata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(void);
/********************主函数********************/
void main( void )
{
uchar temp,keyval = 0;
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF1OUT = 0XFF;
P2DIR = 0XFF2OUT = 0XFF;
P3DIR = 0XFF3OUT = 0XFF;
P4DIR = 0XFF4OUT = 0XFF;
P5DIR = 0XFF5OUT = 0XFF;
P6DIR = 0XFF6OUT = 0XFF;
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1DIR = 0xf0; // 设置P1.0~P.3为输入状态
P4DIR = 0xff; // 设置P4口为输出状态
P4DIR = 0xff; // 设置P4口输出高电平
P5DIR |= BIT5;
P5OUT |= BIT5;
P6DIR |= BIT6;
P6OUT |= BIT6;
while(1)
{
if(keyin != 0x0f) //如果有键被按下
{
delay(); //延时消抖
if(keyin != 0x0f) //再次检测按键状态
{
temp=keyin;
while(keyin != 0x0f); //等待按键被放开
switch(temp) //转换键值
{
case 0x0e:
keyval = 1;break;
case 0x0d:
keyval = 2;break;
case 0x0b:
keyval = 3;break;
case 0x07:
keyval = 4;break;
default:
keyval = 0;break;
}
P4OUT = scandata[keyval]; //用一位数码管显示
duan_h;
duan_l;
P4OUT = 0xFE;
wei_h;
wei_l;
}
}
}
}
/*******************************************
函数名称:delay
功 能:用于消抖的延时
参 数:无
返回值 :无
********************************************/
void delay(void)
{
uint tmp;
for(tmp = 12000;tmp > 0;tmp--);
}
下载运行效果
【MSP430F149学习】汇总贴
|