打印

按键功能一直调不出来,郁闷(见代码)

[复制链接]
1688|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fanny309|  楼主 | 2008-11-20 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
只是想测试下按键

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int
uchar eo;
uchar key;
uchar input;
sbit wdi=P1^7;
sbit led1=P1^4;
sbit led2=P1^5;

void main ()
{
 //P1=0x0F;
 P1=0X00;
 eo=P1&0x08;
 while(1)
 {
   if(eo==0X08)
   { 
    input=P1&0x07;
    switch(input)
    {
     case 0: key=8;led1=1;break;
     case 1: key=7;led1=0;break;
     case 2: key=6;led1=1;break;
     case 3: key=5;led1=0;break;
     case 4: key=4;led2=1;break;
     case 5: key=3;led2=0;break;
     case 6: key=2;led2=1;break;
     case 7: key=1;led2=0;break;
     default :break;
    }
   }
   wdi=!wdi;
 }
}

单片机为AT89C55WD

现在是按键无反应

请大侠指教

相关帖子

沙发
starlite_jason| | 2008-11-20 10:42 | 只看该作者

P1=0X00;

P1都设置成0了,读什么进来都是0咯

使用特权

评论回复
板凳
fanny309|  楼主 | 2008-11-20 10:54 | 只看该作者

那是初始值呀!开始设为0x0f,也一样

使用特权

评论回复
地板
gjg191| | 2008-11-20 11:17 | 只看该作者

o

if(eo==0X08) 这里eo有可能永远不会等与0x08 ,eo=P1&0x08;这句应该在while(1) 里

使用特权

评论回复
5
isbit| | 2008-11-20 13:58 | 只看该作者

-记住--读之前,赋1 ---

使用特权

评论回复
6
lxlfriend| | 2008-11-20 15:14 | 只看该作者

同意4楼的

使用特权

评论回复
7
fanny309|  楼主 | 2008-11-20 15:15 | 只看该作者

我的PI.0~P1.3是要读入的,P1.4,P1.5输出,

那P1是不是要赋予0x0f???

使用特权

评论回复
8
fanny309|  楼主 | 2008-11-20 15:44 | 只看该作者

4楼的是对的,但是

改了下,能出结果

但是可以告诉我为什么放外面不行呢?

使用特权

评论回复
9
lxlfriend| | 2008-11-20 16:21 | 只看该作者

进大循环之前及以后eo的值一直是0x00

按照原来程序:
P1=0X00;
eo=P1&0x08;
while(1)
...............
eo=0x00&0x08=0x00;

之后你一直没有给它赋新值,所以一直是0x00

使用特权

评论回复
10
fanny309|  楼主 | 2008-11-20 16:34 | 只看该作者

懂了,谢谢,不过

关于读之前赋1 的问题,我没有给P1口赋任何值,即屏蔽掉P1=0x0f这句(当然P1=0X00也没加上去),也能出结果
why?不是说读前定要赋1的吗?

使用特权

评论回复
11
twz8858877| | 2008-11-20 16:43 | 只看该作者

51的io上电默认为高

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

30

帖子

0

粉丝