这程序有点问题,计时的

2019-03-24 19:05发布

#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar a,num,t,shi,fen,M1,M2;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//void display(uchar,uchar);void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{ //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }void T0_time() interrupt 1{ TH0=(65536-50000)/256;//重装初值 TL0=(65536-50000)%256;//重装初值 num++;  }void display(uchar miao1,uchar miao2) //显示子函数{ dula=1; P0=table[miao1]; //送段选数据,低、秒 dula=0; P0=0xff;   //消影 wela=1; P0=0xdf; wela=0; delay(1);  dula=1; P0=table[miao2]; //送段选数据,高、秒 dula=0; P0=0xff;   //消影 wela=1; P0=0xef; wela=0; delay(1);}void main(){ TMOD=0X01;//设置定时器0为方式1 TH0=(65536-50000)/256;//定时器0装初值,定时50ms TL0=(65536-50000)%256;//定时器0装初值,定时50ms EA=1; //开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0
/*开始为0*/  dula=1; P0=0x3f; dula=0; P0=0xff; wela=1; P0=0xcf; wela=0;
while(1) //扫描、显示数码管 { if(num==20) { num=0; t++; if(t==60) t=0; M2=t/10; M1=t%10; display(M1,M2); } }}

在6位数码管显示,用数码管的最后两位计时,计到59,问题是最后位的数码管很暗而且是一秒闪一下。而我独立显示最后一位数码管就不会这样 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
我意狂醉
1楼-- · 2019-03-25 02:16
我改了的你自己运行看看  
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar a,num,t,shi,fen,M1,M2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

void delay(uint z)  
{
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void T0_time() interrupt 1
{
        TH0=(65536-50000)/256;//重装初值
        TL0=(65536-50000)%256;//重装初值
        num++;
                if(num==20)
                        {
                                num=0;
                                t++;
                                if(t==60)
                                t=0;
                                M2=t/10;
                                M1=t%10;
                               
                        }       

}
void display(uchar miao1,uchar miao2) //显示子函数
{
        dula=1;
        P0=table[miao1];//送段选数据,低、秒
        dula=0;
        P0=0xff;   //消影
        wela=1;
        P0=0xdf;
        wela=0;
        delay(1);
         
        dula=1;
        P0=table[miao2];//送段选数据,高、秒
        dula=0;
        P0=0xff;   //消影
        wela=1;
        P0=0xef;
        wela=0;
        delay(1);
}
void main()
{
        TMOD=0X01;//设置定时器0为方式1
        TH0=(65536-50000)/256;//定时器0装初值,定时50ms
        TL0=(65536-50000)%256;//定时器0装初值,定时50ms
        EA=1; //开总中断
        ET0=1;//开定时器0中断
        TR0=1;//启动定时器0
       
       
        /*开始为0*/
        dula=1;
        P0=0x3f;
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xcf;
        wela=0;


        while(1)//扫描、显示数码管
        {
       
                        display(M1,M2);
                       
               
        }
}
wt418995874
2楼-- · 2019-03-25 05:50
对,谢谢。知道了。

一周热门 更多>