这是我们的代码 ,但目前状况就是按下
开发板上1.1口按键可以触发中断开始键盘扫描,但是按4乘4按键后再按下开发板上2.2口的按键确认输入完毕,但一直获取不到键值在数码管上显示,哭哭,求助,希望大家能帮忙看下代码帮我们找找原因,谢谢啦!~
#include <msp430f5529.h>
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管字码表0~9
unsigned int a,b=0;
void init(void)
{
P3DIR = 0XFF;//P3 segment port
P6DIR = 0X0e;//P6.1~6.3 digit ports
P4DIR = 0X06;//P4.2 P4.1 latch enable of HC573,P4.2 位选锁存,P4.1段选锁存
return;
}
void digsel(unsigned char dig)//位选信号,P6.1~P6.3对应dig=0~2
{
P4OUT |= BIT2;
P6OUT = (~(BIT1 << dig)) & P6OUT;
P4OUT ^= BIT2;
return;
}
void hscan_init()
{
//行输入 上拉
P2DIR&=~(BIT0+BIT2+BIT3);
P2OUT |= BIT0+BIT2+BIT3;
P2REN |= BIT0+BIT2+BIT3;
//列输出
P2DIR |= BIT4+BIT5+BIT6+BIT7;
P2OUT &=~(BIT4+BIT5+BIT6+BIT7);
}
void lscan_init()
{
//列输入 上拉
P2DIR &=~(BIT4+BIT5+BIT6+BIT7);
P2OUT |= BIT4+BIT5+BIT6+BIT7;
P2REN |= BIT4+BIT5+BIT6+BIT7;
//行输出
P2DIR |= BIT0+BIT2+BIT3;
P2OUT &=~(BIT0+BIT2+BIT3);
}
void keyscan()
{
unsigned char H,L;
H=0;L=0;
hscan_init();
H=P2IN&(BIT0+BIT2+BIT3);
lscan_init();
L=P2IN&(BIT4+BIT5+BIT6+BIT7);
switch(H)
{
case 12:H=0; break; //00001100 第0行
case 9:H=1; break; //00001001第1行
case 5:H=2; break; //00000101第2行
default: H=16;break; //00001111
}
switch(L)
{
case 224:L=0; break;//11100000 第0列
case 208:L=1; break;//11010000 第1列
case 176:L=2; break; //10110000 第2列
case 112:L=3; break; //01110000 第3列
default: L=16;break;
一周热门 更多>