| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 978 人关注过本帖
标题:新手求教:为什么这个键盘程序只能控制一个数码管亮
只看楼主 加入收藏
gregda
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-7-17
收藏
 问题点数:0 回复次数:6 
新手求教:为什么这个键盘程序只能控制一个数码管亮
#include<reg52.h>
#include<intrins.h>
#define uint  unsigned int
#define uchar unsigned char
uchar aa=0,bb,temp,num;
uchar code table[10]=         
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};    //亮什么
uchar code W[8]= {0,1,2,3,4,5,6,7};                     //谁亮
void delay(uint x);                                
void main()
{   
     P0=0x00;                                          //先把所有数码管灯熄灭
     while(1)
     {
        P1=0xfe;      //控制第一列按键让第三个数码显示相应数字,出现问题:在后面有控制第二列按键的程序
        temp=P1;      //如果先按下第一列的某一按键,则之后在按第二列的就没用,只保留第一列出现的数字。
        temp=temp&0xf0; //同理,先按下第二列效果同上。想请教一下大家,这个应该怎么改才                  
        while(temp!=0xf0)  //能在按下第一列后,显示相应的数字,并且在按下第二列的数字后,也显示  
           {               //相应的数字,且两个数字皆保留呢?
            delay(5);
            temp=P1;
            temp=temp&0xf0;
          while(temp!=0xf0)   
            {
                temp=P1;
                switch(temp)
                    {
                        case 0xee:num=1;
                            break;
                        case 0xde:num=5;
                            break;
                        case 0xbe:num=3;
                            break;
                        case 0x7e:num=4;
                              break;
                    }
                P2=W[2];
                P0=table[num];
             }
        }
        P1=0xfd;                                 /*这一段控制第二列按键
        temp=P1;                                    让第四个数码管亮*/
        temp=temp&0xf0;
        while(temp!=0xf0)   
           {   
            delay(5);
            temp=P1;
            temp=temp&0xf0;
          while(temp!=0xf0)   
            {
                temp=P1;
                switch(temp)
                    {
                        case 0xed:num=1;
                            break;
                        case 0xdd:num=5;
                            break;
                        case 0xbd:num=3;
                            break;
                        case 0x7d:num=4;
                              break;
                    }
                P2=W[3];
                P0=table[num];
             }
        }            
     }
}
void delay(uint x)
{
    uint i,j;
    for(i=500;i>0;i--);
    for(j=x;j>0;j--);
}

HOT-51原理图.pdf (334.39 KB)
            
 
搜索更多相关主题的帖子: 数码管 键盘 
2010-07-17 16:54
huama007
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-7-28
收藏
得分:0 
一开始的P0口改成P1试一下看看!
2010-08-02 12:13
轻舞飞扬中
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-8-4
收藏
得分:0 
你怎么没有松手检测呢,加一个后再写后面的显示函数。P2=W[2]是什么意思,貌似不对吧
2010-08-04 17:14
小卡06
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-6-9
收藏
得分:0 
学习一下
2010-08-06 13:01
daqihao
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-8-13
收藏
得分:0 
少了按键松开检测
2010-08-13 10:46
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
JNB K, $
2010-09-08 23:06
河南机专
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-10-7
收藏
得分:0 
,学习一下
2010-10-09 08:12
快速回复:新手求教:为什么这个键盘程序只能控制一个数码管亮
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015720 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved