打印

新手求教另一种让两个以上数码管同时亮的方法

[复制链接]
5695|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
greg_da|  楼主 | 2010-7-17 18:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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

相关帖子

沙发
duojinian| | 2010-7-18 09:02 | 只看该作者
扫描函数,包含在按钮延时确认函数中即可。
例如:
有按钮按下?   否 -> 扫描显示

扫描显示
右按钮按下?  否 -> 扫描显示

处理按钮

使用特权

评论回复
板凳
greg_da|  楼主 | 2010-7-18 14:50 | 只看该作者
谢谢你啊,不过还是有些不明白啊
第一步中,否定之后,扫描显示是扫描哪些东西? 而且这个单片机控制那些数码管亮时是一个一个控制的,无法同时打开多个数码管。这块我觉得挺棘手的。

使用特权

评论回复
地板
greg_da|  楼主 | 2010-7-18 14:50 | 只看该作者
[
谢谢你啊,不过还是有些不明白啊
第一步中,否定之后,扫描显示是扫描哪些东西? 而且这个单片机控制那些数码管亮时是一个一个控制的,无法同时打开多个数码管。这块我觉得挺棘手的。

使用特权

评论回复
5
jianguoid| | 2010-7-24 11:34 | 只看该作者
是一个个控制的,如果速度购快,人眼分辨不出来,比如5ms点亮一位,人眼看了就像同时点亮的

使用特权

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

本版积分规则

0

主题

9

帖子

1

粉丝