购置了一个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--);
}
此帖出自
小平头技术问答
一周热门 更多>