微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这段程序的按键

这段程序的按键

时间:10-02 整理:3721RD 点击:
#include <msp430x14x.h>
#include "AD9850.h"
#define keyin    (P1IN & 0x0f)  //输出端口P1.0-P1.3的值
unsigned char KeyVal = 0;
void Delay(void);
unsigned int data[4]={300,1000,3000,10000};
void main(void)
{
     WDTCTL = WDTPW + WDTHOLD;
     P1IES = 0x0f;               // P1.0~P1.3选择下降沿中断
     P1IE = 0x0f;                // 打开中断使能
     P1DIR = BIT7;               //设置P1.0~P1.3为输入状态,P1.7为输出
     P1OUT = 0;                  //P1输出0
     P2DIR=0xff;                //P2作 输出
     P2OUT=0;                   //P2输出0
     P5DIR |=BIT0+BIT1;         //P5.0 , P5.1做输出
     _EINT();                    //打开全局中断控制位
     
     
     ad9850_Init_parrel();  //ad9850初始化(并口模式)
     ad9850_Reset_parrel(); //ad9850复位(并口模式)
     ad9850_Wr_parrel(0x00,60000); //w0频率
     while(1)
     {
        //ad9850_Wr_parrel(0x00,data[KeyVal-1]);
        P5OUT=KeyVal-1;
        switch(KeyVal)
        {
          case 1:
                 P2OUT=0x01;
                 break;
          case 2:
                 P2OUT=0x02;
                 break;
          case 3:
                 P2OUT=0x04;
                 break;
          case 4:
                 P2OUT=0x08;                 
                 break;
          default:
                 P2OUT=0;
        }
     }
}
/*
void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;
         
    ad9850_Init_serial();
    ad9850_Reset_serial();
    while(1)
    {
      ad9850_Wr_serial(0x00,1000);
    }
}
*/
/*******************************************
函数名称:Delay
功    能:用于消抖的延时
参    数:无
返回值  :无
********************************************/
void Delay(void)
{
    unsigned int tmp;
   
    for(tmp = 12000;tmp > 0;tmp--);
}
/*******************************************
函数名称:PORT1_ISR
功    能:P1端口的中断服务函数
参    数:无
返回值  :无
********************************************/
#pragma vector=PORT1_VECTOR
__interrupt void  PORT1_ISR(void)
{
    if(P1IFG & 0x0f)
    {
        switch(P1IFG)
        {
        case 0x01:
                    if(keyin == 0x0e)   //如果是第一个按键被按下
                    {
                        Delay();
                        if(keyin == 0x0e)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 1;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                    }
        case 0x02:
                    if(keyin == 0x0d)   //如果是第二个按键被按下
                    {
                        Delay();
                        if(keyin == 0x0d)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 2;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                    }
        case 0x04:
                    if(keyin == 0x0b)   //如果是第三个按键被按下
                    {
                        Delay();
                        if(keyin == 0x0b)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 3;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                    }
        case 0x08:
                    if(keyin == 0x07)   //如果是第四个按键被按下
                    {
                        Delay();
                        if(keyin == 0x07)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 4;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                    }
        default:
                    while(keyin != 0x0f);       //等待按键放开
                    //KeyVal = 0;
                    //LPM1_EXIT;
                    P1IFG = 0;
                    return;
        }
    }
}
这段程序的四个按键到底是哪几个端口?为什么我试了所有端口,都没作用、、、

应该是P1,但是试了不对啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top