打印

求助:单片机数码管显示问题

[复制链接]
1442|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lanse海洋|  楼主 | 2008-5-3 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
uchar a,shu,bai,shi,ge;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void display(uchar bai,uchar shi,uchar ge);
void init();
void delay(uchar z);
void main()
{
    init();
    while(1)
    {
        if(a==20)
        {
            a=0;
            shu++;
            if(shu==101)
                shu=0;
                bai=shu/100;
                shi=shu%100/10;
                ge=shu%10;
        }
        display(bai,shi,ge);
    }
    
}
void init()
{
    shu=0;
    TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    EA=1;
    ET0=1;
    TR0=1;
}
void timer() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    a++;
}
void display(uchar bai,uchar shi,uchar ge)
{
    duan=1;
    P0=table[bai];
    duan=0;
    P0=0xff;//消隐
    wei=1;
    P0=0xfe;
    wei=0;
    delay(5);

    duan=1;
    P0=table[shi];
    duan=0;
    P0=0xff;//消隐
    wei=1;
    P0=0xfd;
    wei=0;
    delay(5);

    duan=1;
    P0=table[ge];
    duan=0;
    P0=0xff;//消隐
    wei=1;
    P0=0xfb;
    wei=0;
    delay(5);
}
void delay(uchar z)
{
    uchar x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
我认为它应该每隔一秒动态显示1-100之间的数,可不知道它显示是从0-100.

相关帖子

沙发
stycx| | 2008-5-3 22:46 | 只看该作者

是你叫它显示从0-100的

if(shu==101)
                shu=0;
                bai=shu/100;
                shi=shu%100/10;
                ge=shu%10;
        }
        display(bai,shi,ge);
....

void init()
{
    shu=0;
.....

使用特权

评论回复
板凳
lanse海洋|  楼主 | 2008-5-4 10:04 | 只看该作者

在if(shu=101)语句前已经shu++了

            a=0;
            shu++;  //shu自加1
            if(shu==101)
                shu=0;
                bai=shu/100;
                shi=shu%100/10;
                ge=shu%10;
        这时已经是1了呀.然后调用
        display(bai,shi,ge);再然后
        P0=table[ge];再再然后
        uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

P0口应是table[1],0x06数码管显示1,不知道为何显示是0

使用特权

评论回复
地板
dld2| | 2008-5-4 10:12 | 只看该作者

呵呵

        if(a==20)
        {
            a=0;
            shu++;
            if(shu==101)
                shu=0;
                bai=shu/100;
                shi=shu%100/10;
                ge=shu%10;
            
            display(bai,shi,ge);
        }
        

把display放在if的括号里面

使用特权

评论回复
5
lanse海洋|  楼主 | 2008-5-4 10:46 | 只看该作者

正如dld2所说问题解决了.非常感谢!

使用特权

评论回复
6
t.jm| | 2008-5-4 17:08 | 只看该作者

解决了?有等到101S吗?

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝