查看: 265|回复: 0
打印 上一主题 下一主题

【MSP430F149学习】12按键​输入

[复制链接] qrcode

22

主题

39

帖子

104

积分

注册会员

Rank: 2

积分
104
楼主
跳转到指定楼层
发表于 2015-12-6 04:22 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


【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学习】汇总贴



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表