标题: 51定时器计数 显示数字是乱的 [打印本页]

作者: gbk    时间: 2016-12-13 21:06
标题: 51定时器计数 显示数字是乱的
10ms精确度,0-999计数,按键暂停,松开计数。为什么显示数字是乱的。请指教


#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar code table[]=
{0x00,0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,};

uchar num;

sbit dula=P2^6;
sbit wela=P2^7;

uchar keyscr();

void delay(uint z)
{
        uint x,y;
        for(x=0;x<z;x++)
                for(y=0;y<110;y++);
}

void display(uchar shu)
{
        uchar bai,shi,ge;
        bai=shu/100;
        shi=shu%100/10;
        ge=shu%100%10;
        
        dula=1;
        P0=table[bai];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delay(1);
        
        dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay(1);
        
        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(1);        
}

void init()
{
        EA=1;
        ET0=1;
        TMOD=0X01;
        TH0=(65536-9174)/256;
        TL0=(65536-9174)%256;
        TR0=1;
}

void main()
{
        init();
        while(1)
        {
                if(keyscr()==0)
                {
                        TR0=1;
                        display(num);
                }
                else
                {
                        TR0=0;
                        display(num);
                }
        }
}

void timer() interrupt 1
{
        TH0=(65536-9174)/256;
        TL0=(65536-9174)%256;
        num++;
        if(num==1000)
                num=0;        
}

uchar keyscr()
{
        uchar temp;
        uchar flag=0;
        temp=P3;
        temp=temp&0xf0;
        if(temp==0xf0)
                flag=0;
        else
                flag=1;        
        return flag;        
}


作者: xht9951    时间: 2016-12-14 22:43
你看看你的数码管是共阳的还是共阴的?它位的段码值是不一样的
作者: new_51    时间: 2016-12-15 06:56
动态扫描的延时
作者: 我你是大好人    时间: 2016-12-15 20:38
认真思考,搜索一下
作者: 小狮子SAIDY    时间: 2016-12-16 10:16
动态扫描的延时
作者: bnn7538251    时间: 2016-12-16 12:54
很有用 谢谢啦
作者: liuzhaoxin1020    时间: 2016-12-16 13:40
按键的消抖处理的不好
作者: gbk    时间: 2017-1-3 19:46
liuzhaoxin1020 发表于 2016-12-16 13:40
按键的消抖处理的不好

不按键时顺时显示到150就又重新计数了
作者: 姜学海966    时间: 2017-1-3 20:44
应该是硬件的问题
作者: sxx148368852    时间: 2017-1-3 20:58
好人一生平安




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1