打印
[51单片机]

求问:数码管654321变成432165

[复制链接]
1412|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

粉丝