打印

数码管程序大神改个错

[复制链接]
1809|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
哼哼哈嘿|  楼主 | 2013-2-4 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个简单的秒表程序不知道哪里错了,数码管不能正确显示
求大神改错啊
#include<reg51.h>
code unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //字模0,1,2,3。。。
code unsigned char dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbF,0x7F};
static unsigned char counter;
void timer1()
{        
          TMOD = 0x10;
    TH1 = 0xB1;
    TL1 = 0xE0;
    TR1 = 1;
}
void refresh_led()
{
        unsigned char i,b[8];
                        b[0]=counter%10;
                        b[1]=counter%100/10;
                        b[2]=counter%1000/100;
                        b[3]=counter%10000/1000;
                        b[4]=counter%100000/10000;
                        b[5]=counter%1000000/100000;
                        b[6]=counter%10000000/1000000;
                        b[7]=counter%100000000/10000000;

        for(i=0;i<=8;i++)
                {

                        P1=dispbit[i];
                        P0=a[b[i]];
                }
}
main()
{
unsigned char m;
        timer1();
        while(1)
        {
       
                if(TF1==1)
                {
                    TH1 = 0xB1;
                    TL1 = 0xE0;
                    TF1 = 0;
                        m++;
                }
                if(m==50)
                {
                        counter++;
                        m=0;
                }
                refresh_led();
       
        }       
}

相关帖子

沙发
oayzw| | 2013-2-4 16:05 | 只看该作者
请先把注释写上吧,不要考大家了

使用特权

评论回复
板凳
21ID| | 2013-2-4 16:09 | 只看该作者
楼主在贴代码的时候最起码格式做做好吧

使用特权

评论回复
地板
tangkuan| | 2013-2-4 17:15 | 只看该作者
切换不同的数码管时,没有延时,另外计算那么多除法和求余,估计时间占用也是不少。
估计跑完refresh_led()函数,定时器早就溢出了。

使用特权

评论回复
5
huangxz| | 2013-2-4 22:35 | 只看该作者
我觉得在main里面先算好放在显示缓冲区里面,在定时器里面直接刷就是了,

使用特权

评论回复
6
哼哼哈嘿|  楼主 | 2013-2-5 00:02 | 只看该作者
tangkuan 发表于 2013-2-4 17:15
切换不同的数码管时,没有延时,另外计算那么多除法和求余,估计时间占用也是不少。
估计跑完refresh_led() ...

总有几个数码管是和个位数字一起跳动的

使用特权

评论回复
7
小营七郎| | 2013-2-5 10:55 | 只看该作者
一看就是和我一样的初学者。:lol

使用特权

评论回复
8
前功尽弃| | 2013-2-5 11:37 | 只看该作者
你的定时器中断函数呢

使用特权

评论回复
9
lengeux| | 2013-2-5 12:16 | 只看该作者
说几点问题:
第一,没有相应的硬件电路图。软件是与硬件相结合的。
第二,counter这个变量定义为unsigned char 型,范围0~255。而你分离各位的程序已经已经超出了它的范围。
第三,每位数码管显示时,没有相应的延时。

使用特权

评论回复
10
dqyubsh| | 2013-2-5 15:38 | 只看该作者
我猜你大概的想法是定时刷新,比如,1秒刷新1次。可这个程序看不出是定时刷新。你把定时器函数那累加到1秒,设置一个标记,然后主循环检查该标记,到了才刷,刷完之后清除该标记。

使用特权

评论回复
11
哼哼哈嘿|  楼主 | 2013-2-10 00:04 | 只看该作者
lengeux 发表于 2013-2-5 12:16
说几点问题:
第一,没有相应的硬件电路图。软件是与硬件相结合的。
第二,counter这个变量定义为unsigned  ...

谢谢

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝