[51单片机] 求问:数码管654321变成432165

[复制链接]
1745|3
 楼主| zhaocanzhaoxu 发表于 2014-3-12 21:33 | 显示全部楼层 |阅读模式
本帖最后由 zhaocanzhaoxu 于 2014-3-12 21:47 编辑

用定时器0实现6个数码管动态显示654321。

出现错误:6个数码管第一轮显示完654321后,开始变成432165,,216543。

程序如下:
#include<reg52.h>
#include<intrins.h>
char code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};  //0到F的数码管显示
char temp,num,a;
sbit dula=P2^6;         //段选
sbit wela=P2^7;         //位选
void init();
void main()
{
        init();
        TR0=1;
        while(1);
        
}
void init()
{
        EA=1,ET0=1;
        TMOD=0X01;
        TH0=15536/256,TL0=15536%256; //50MS

        num=6;
        temp=0xfe;

}
void time0() interrupt 1
{
        TH0=15536/256,TL0=15536%256; //50MS
        a++;
        if(a==10)
        {
                wela=1;
                P0=temp;
                wela=0;
                P0=0;
                temp=_crol_(temp,1);
                if(temp==0xbf)
                        temp=0xfe;
        
                dula=1;
                P0=table[num];
                dula=0;
                P0=0;
                num--;
                if(num==0)
                        num=6;
               

                a=0;
        }
}
ilikepanda007 发表于 2014-3-12 22:02 | 显示全部楼层
书上看到的,中断服务程序太复杂,下次中断来了程序还没执行完,那程序就跑飞了,试试吧显示程序放到主函数
coody 发表于 2014-3-12 22:10 | 显示全部楼层
换COM驱动顺序
 楼主| zhaocanzhaoxu 发表于 2014-3-12 23:07 | 显示全部楼层
我自己找到问题了,是temp变量定义为char型时,if(temp==0xbf)一直为false,不知道为什么,把temp改成uchar就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

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