数码管程序大神改个错

[复制链接]
2543|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()函数,定时器早就溢出了。
huangxz 发表于 2013-2-4 22:35 | 显示全部楼层
我觉得在main里面先算好放在显示缓冲区里面,在定时器里面直接刷就是了,
 楼主| 哼哼哈嘿 发表于 2013-2-5 00:02 | 显示全部楼层
tangkuan 发表于 2013-2-4 17:15
切换不同的数码管时,没有延时,另外计算那么多除法和求余,估计时间占用也是不少。
估计跑完refresh_led() ...

总有几个数码管是和个位数字一起跳动的
小营七郎 发表于 2013-2-5 10:55 | 显示全部楼层
一看就是和我一样的初学者。:lol
前功尽弃 发表于 2013-2-5 11:37 | 显示全部楼层
你的定时器中断函数呢
lengeux 发表于 2013-2-5 12:16 | 显示全部楼层
说几点问题:
第一,没有相应的硬件电路图。软件是与硬件相结合的。
第二,counter这个变量定义为unsigned char 型,范围0~255。而你分离各位的程序已经已经超出了它的范围。
第三,每位数码管显示时,没有相应的延时。
dqyubsh 发表于 2013-2-5 15:38 | 显示全部楼层
我猜你大概的想法是定时刷新,比如,1秒刷新1次。可这个程序看不出是定时刷新。你把定时器函数那累加到1秒,设置一个标记,然后主循环检查该标记,到了才刷,刷完之后清除该标记。

 楼主| 哼哼哈嘿 发表于 2013-2-10 00:04 | 显示全部楼层
lengeux 发表于 2013-2-5 12:16
说几点问题:
第一,没有相应的硬件电路图。软件是与硬件相结合的。
第二,counter这个变量定义为unsigned  ...

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部