新手求教~、~

2019-03-24 14:09发布

购置了一个MSP430F149、
本来想自己制作一个电容触控板的……
结果没做出来、不太看得明白TI提供的库文件、有时间再慢慢参悟。
所以改做了一个电容触控输出高低电平的、按下按键输出高电平。
外设做好了、单片机编程不知道什么地方出问题了、功能依然没实现……
请各位高手指点一下

第一段代码是随机子附赠的学习资料测试代码:

//测试说明:按动S1~S4三个按键,观察LED显示
#include <msp430x14x.h>

#define keyin    (P1IN & 0x0f)      //这个地方不太明白PxIN &0xXX的功能。


void delay(void);

/********************主函数********************/
void main( void )
{
    unsigned char temp;
   
    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
    //P1REN=0XFF;
   
    P1DIR = 0xf0;               //设置P1.0~P1.4为输入状态   
    P2DIR = 0xff;
    P2OUT = 0xff;
    while(1)
    {
        if(keyin != 0x0f)       //键值有改变
        {
            delay();            //延时消抖
            if(keyin != 0x0f)   //再次检测按键状态
            {   
                temp=keyin;
               
                while(keyin != 0x0f);   //等待按键被放开
                switch(temp)    //转换键值   
                {
                case 0x0e:
                            P2OUT = 0xfe;break;
                case 0x0d:
                            P2OUT = 0xfd;break;
                case 0x0b:
                            P2OUT = 0xfb;break;
                case 0x07:
                            P2OUT = 0xf7;break;
                default:
                            P2OUT = 0xff;break;
                }
                delay();delay();delay();delay();delay();delay();delay();delay();
            }
        }
    }
}
void delay(void)
{
    unsigned int tmp;
   
    for(tmp = 12000;tmp > 0;tmp--);
}
测试代码所测试的是I/O口低电平检测并输出,进行小改动后试图使其具备检测搞定平并输出的功能
几处注释小不明白的地方可能是导致程序失误的地方、望指明

#include <msp430x14x.h>

#define keyin    (P1IN & 0x00)    //个人理解改动表示后为初始状态为低电平后进行检测、望指正

void delay(void);

/********************主函数********************/
void main( void )
{
    unsigned char temp;
   
    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
    //P1REN=0XFF;
   
     P1DIR = 0xf0;               //设置P1.0~P1.4为输入状态
   //不明白为什么设置成这样后 P1.5 P1.7测得电压为3.27V P1.6 P1.8测得电压为0.01V 不是应该都为高电平3.3V输出么?   
    P2DIR = 0xff;
    P2OUT = 0xff;
    while(1)
    {
        if(keyin != 0x00)       //键值有改变
        {
            delay();            //延时消抖
            if(keyin != 0x00)   //再次检测按键状态
            {   
                temp=keyin;
               
                while(keyin != 0x00);   //等待按键被放开
                switch(temp)    //转换键值   
                {
                case 0x01:
                            P2OUT = 0xfe;break;
                case 0x02:
                            P2OUT = 0xfd;break;
                case 0x04:
                            P2OUT = 0xfb;break;
                case 0x08:
                            P2OUT = 0xf7;break;
                default:
                            P2OUT = 0xff;break;
                }
                delay();delay();delay();delay();delay();delay();delay();delay();
            }
        }
    }
}

void delay(void)
{
    unsigned int tmp;
   
    for(tmp = 12000;tmp > 0;tmp--);
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
shower.xu
1楼-- · 2019-03-24 23:41
 精彩回答 2  元偷偷看……
plan041
2楼-- · 2019-03-25 00:17
< :TI_MSP430_内容页_SA7 --> 不好意思、 之前考试一直没回复。
1.2的回答明白了、
可是3的情况  就是换成
    temp=keyin;
    P2OUT|=temp;
也是没有接受到信号、进而改变的。
虽然后来用中断完成了按键、可是还是不太明白这样为什么不行。
还是说、MSP430与C51是一样的、只能接受低电平变化的信号呢?
shower.xu
3楼-- · 2019-03-25 03:55
原帖由 plan041 于 2012-6-25 10:28 发表 不好意思、 之前考试一直没回复。 1.2的回答明白了、 可是3的情况 就是换成 temp=keyin; P2OUT|=temp; 也是没有接受到信号、进而改变的。 虽然后来用中断完成了按键、可是还是不太明白这样为什么不行 ...

普通IO口可以接受高低电平是肯定的,51都可以啊,你又不是用中断要选择上升或下降沿。你可以设个断点在这里P2OUT|=temp;  看看temp的值。还有啊,你要把你#define keyin (P1IN & 0x00) 这个修复过来才试啊。
plan041
4楼-- · 2019-03-25 05:27
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章