msp430 矩阵按键 +LED显示

2019-03-24 08:31发布

矩阵按键连接P2口 LED灯P1口,但是程序有问题,按键没反应,然后L2 L3 L4 灯不亮,其余都亮,在线等
#include <MSP430x14x.h>

#define uchar unsigned char

#define uint unsigned int

#define CLR_Led1 P1OUT&=~BIT4;

#define SET_Led1 P1OUT|=BIT4;

#define CLR_Led2 P1OUT&=~BIT5;

#define SET_Led2 P1OUT|=BIT5;

#define CLR_Led3 P1OUT&=~BIT6;

#define SET_Led3 P1OUT|=BIT6;

#define CLR_Led4 P1OUT&=~BIT7;

#define SET_Led4 P1OUT|=BIT7;

uchar GetKey();

void Delay1ms(uint);

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

uchar key,disp;

P1DIR=0xff;

// P1OUT=0x00;//全亮

P1OUT=0xf0;//全灭

while (1)

{

// key='2';

key=GetKey();

if(key>=0x30 && key<=0x39)

{ disp=key-0x30;

Delay1ms(3);

}

if (key=='F')

{P1OUT |=0xf0;// 灭灯

disp=0xf0;//清零

//break;

continue;

}

P1OUT&=0xf0;//

// key=key|0xf0;

P1OUT|=disp;

CLR_Led1;

Delay1ms(30);

SET_Led1;

}

}

uchar GetKey()

{

P2DIR=0x0f;

P2OUT=0x0e;//扫描第一行

_NOP();_NOP();

//P1DIR &=0x0f;//读列

if((P2IN & 0xf0)== 0xe0)return'0';

if((P2IN & 0xf0)== 0xd0)return'1';

if((P2IN & 0xf0)== 0xb0)return'2';

if((P2IN & 0xf0)== 0x70)return'3';

P2DIR=0x0f;

P2OUT=0x0d;//扫描第二行

_NOP();_NOP();

P2DIR &=0x0f;//读列

if((P2IN & 0xf0)== 0xe0)return'4';

if((P2IN & 0xf0)== 0xd0)return'5';

if((P2IN & 0xf0)== 0xb0)return'6';

if((P2IN & 0xf0)== 0x70)return'7';

P2DIR=0xff;

P2OUT=0xfb;//扫描第三行

_NOP();_NOP();

P2DIR &=0x0f;//读列

if((P2IN & 0xf0)== 0xe0)return'8';

if((P2IN & 0xf0)== 0xd0)return'9';

if((P2IN & 0xf0)== 0xb0)return'A';

if((P2IN & 0xf0)== 0x70)return'B';

P2DIR=0xff;

P2OUT=0xf7;//扫描第四行

_NOP();_NOP();

P2DIR &=0x0f;//读列

if((P2IN & 0xf0)== 0xe0)return'C';

if((P2IN & 0xf0)== 0xd0)return'D';

if((P2IN & 0xf0)== 0xb0)return'E';

if((P2IN & 0xf0)== 0x70)return'F';

return 0;//

}

void Delay1ms(unsigned int count)

{

unsigned int i,j;

for(i=0;i<count;i++)

for(j=0;j<120;j++);

}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
qwerghf
2019-03-24 15:09
< 配置一下时钟,感觉延时太短,仿真器调试一下,看看按键GetKey()返回数据是否可以得到

一周热门 更多>

相关问题

    相关文章