这段动态扫描的程序哪里出错

[复制链接]
2373|7
 楼主| 栩栩如生 发表于 2011-9-7 18:47 | 显示全部楼层 |阅读模式
想动态扫描显示87654321,但是运行后,在学习板上却显示87654329,大家瞧瞧是怎么回事。
/*数码管动态扫描显示87654321*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar n1,n2,t;
uchar code tabledu[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code tablewe[]={
0,0x01,0x02,0x03,0x04,
0x05,0x06,0x07};
void init();
void main()
{
    init();         //初始化
    while(1)
        {
         
          if(t==1)
          {
            t=0;
                n1--;
                if(n1==1)
                n1=9;
                P2=tabledu[n1];           //送段选
                P1=tablewe[n2];           //送位选
                n2++;
                if(n2==8)
                n2=0;
          }
        }
}
/*初始化子程序*/
void init()
{
    n1=9;
    TMOD=0x01;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
/* 定时器中断子程序 */
void timer0() interrupt 1
{
           TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        t++;
}
}
司徒老鹰 发表于 2011-9-7 18:59 | 显示全部楼层
n1--;  
if(n1==1)
      n1=9;
       P2=tabledu[n1];   
所以显示完2就n--
n为1后变为9了,就显示9了
改成
if(n1==0)
      n1=8;
       P2=tabledu[n1];   
试试
 楼主| 栩栩如生 发表于 2011-9-7 19:02 | 显示全部楼层
改了,但不行,显示的全是8。
supernan 发表于 2011-9-7 19:05 | 显示全部楼层
中间那个if条件后最后加上{} ,看着有点别扭
dingy 发表于 2011-9-7 19:12 | 显示全部楼层
if(t==1)
          {
            t=0;

                P2=tabledu[n1-1];           //送段选
                P1=tablewe[n2];           //送位选
                n2++;
                if(n2==8)
                n2=0;
                n1--;
                if(n1==0)
                n1=9;
          }


你的循环方式还是得修改一下 有些麻烦
llljh 发表于 2011-9-7 19:16 | 显示全部楼层
这是简单的边界问题
还是自己解决吧
不能什么问题都问
 楼主| 栩栩如生 发表于 2011-9-7 19:20 | 显示全部楼层
O(∩_∩)O谢谢各位大虾指导!
 楼主| 栩栩如生 发表于 2011-9-7 19:24 | 显示全部楼层
结贴了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

310

主题

2657

帖子

0

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