大家帮我看一下这个程序,哪里有问题,怎么才能实现,和麻烦帮我修改一下。

大家帮我看一下这个程序,哪里有问题,怎么才能实现,和麻烦帮我修改一下。#include<msp430f5529.h>#defineucharunsignedchar#de... 大家帮我看一下这个程序,哪里有问题,怎么才能实现,和麻烦帮我修改一下。
#include<msp430f5529.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
void key_scan()
{
uchar temp=0xfe;
P4DIR |=0xfe;
P4OUT =0xfe;
if((P4IN & 0xf0)!=0xf0)
{
delay(10);
if((P4IN & 0xf0)!=0xf0)
{
temp=temp & P4IN;
switch(temp)
{
case 0xee:P1OUT=0x01;break;
case 0xde:P1OUT=0x00;break;
case 0xbe:P1OUT=0x01;break;
case 0x7e:P1OUT=0x00;break;
}
}
}
}
void main()
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |=0x01;
P1OUT =0;
while(1)
{
key_scan();
}
}
展开
 我来答
ge_zhe
2013-04-25 · TA获得超过861个赞
知道小有建树答主
回答量:424
采纳率:100%
帮助的人:430万
展开全部
你的程序是循环运行
key_scan();此程序中:

P1.0输出状态显示时间在delay(10);句。而此句前P4OUT =0xfe;将P1.0变成了0.即使按键按下(P4IN & 0xf0)!=0xf0)时仍能再运行key_scan()-P4OUT =0xfe;,这样P1.0始终为0.应将
if ((P4IN & 0xf0)!=0xf0)改为while ((P4IN & 0xf0)!=0xf0),另外P4IN低四位始终被读取,总是e不变吗?好象与程序运行无关
temp=temp & P4IN; temp后四位 总是e吗?

按下面改改看:

void key_scan()
{
uchar temp=0xfe;
P4DIR |=0xfe;
P4OUT =0xfe;
if((P4IN & 0xf0)!=0xf0)
{
delay(10);
while ((P4IN & 0xf0)!=0xf0) //这句
{
temp=P4IN&0xf0 //这句
switch(temp)
{
case 0xe0P1OUT=0x01;break;
case 0xd0P1OUT=0x00;break;
case 0xb0P1OUT=0x01;break;
case 0x70P1OUT=0x00;break;
default:break;
}
}
}
}
追问

还是不行啊,

C1,C2,C3,C4接到P4的高四位,

R4接到P4的低四位的任一端口S1,S2,S3,S4都没有用。

只有把R4真正接到GND才有用。

追答
R1~R4,C1~C4是接P4口吗?那R1~R4平时是悬空什么也不接,定成输入时电平不稳定,肯定不行。R1~R4都是设成输出,读输入时要把它屏蔽掉。
将R1-R4改接至S4\S8\S12\S16对应脚,S1~S16读取键码可对应1~16.程序如下:

void key_scan()
{
uchar key_code=0;//定义键码没键按下为0.

uchar temp,temp1;
uchar i,j;

P4DIR =0xf;
P4OUT=0x0f;
if((P4IN & 0xf0)!=0xf0)
{
delay(10);
if ((P4IN & 0xf0)!=0xf0)
{
temp=P4IN&0xf0 ;
temp1=0x01;

for(i=0;i>1;
}

temp1=temp1>>1;

}
}

}

没有验证,就是这个路子。
百度网友3fe025987
2013-04-25 · TA获得超过1874个赞
知道小有建树答主
回答量:1055
采纳率:62%
帮助的人:539万
展开全部
状态机按键扫描。
说明问题呀。
追问
问题按键按下时led灯没反应
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式