微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 会有鬼影,请问怎么去

会有鬼影,请问怎么去

时间:10-02 整理:3721RD 点击:
#include <REGX52.H>
#include "xs.h"
#include "dsq.h"
#include "ys.h"
#include "aj.h"
sbit dula=P2^6;
sbit wela=P2^7;
sbit fm=P2^3;
code table[]={                         //数字
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
char num2,fm1,fmgai,gai,num;           //变量
char miao,fen,shi,fmmiao,fmfen,fmshi;        //时间变量

void display(char fmmiao,char fmfen,char fmshi,char miao,char fen,char shi)                                //显示子函数
{
        if(fm1==1)
        {               
                dula=1;
                if(num==1&&fmgai==3)                  //判断num是否为1,且闹钟显示时按键1是否按了3下。
                {
                        P0=0x00;
                }
                else                                                        //否则输出这个。
                {
                        P0=table[fmmiao%10];
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xdf;
                wela=0;
                delayms(1);
       
                dula=1;
                if(num==1&&fmgai==3)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[fmmiao/10];
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xef;
                wela=0;
                delayms(1);
       
                dula=1;
                if(num==1&&fmgai==2)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[fmfen%10]|0x80;
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xf7;
                wela=0;
                delayms(1);
       
                dula=1;
                if(num==1&&fmgai==2)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[fmfen/10];
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfb;
                wela=0;
                delayms(1);
       
       
                dula=1;
                if(num==1&&fmgai==1)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[fmshi%10]|0x80;
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
                delayms(1);
       
                dula=1;
                if(num==1&&fmgai==1)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[fmshi/10];
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfe;
                wela=0;
                delayms(1);
        }
        else
        {
                dula=1;
                if(num==1&&gai==3)                                           //判断num是否为1,且正常显示时按键1是否按了3下。
                {
                        P0=0x00;                                                         
                }
                else
                {                                          
                        P0=table[miao%10];                                  //否则输出这个。
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xdf;
                wela=0;
                delayms(1);
       
                dula=1;
                if(num==1&&gai==3)
                {
                        P0=0x00;
                }
                else
                {                                          
                        P0=table[miao/10];
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xef;
                wela=0;
                delayms(1);
       
       
                dula=1;
                if(num==1&&gai==2)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[fen%10]|0x80;
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xf7;
                wela=0;
                delayms(1);
       
                dula=1;
                if(num==1&&gai==2)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[fen/10];
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfb;
                wela=0;
                delayms(1);
       
       
                dula=1;
                if(num==1&&gai==1)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[shi%10]|0x80;
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfd;
                wela=0;
                delayms(1);
       
                dula=1;
                if(num==1&&gai==1)
                {
                        P0=0x00;
                }
                else
                {
                        P0=table[shi/10];
                }
                dula=0;
                P0=0xff;
                wela=1;
                P0=0xfe;
                wela=0;
                delayms(1);
        }
       
}
void T1_time()interrupt 3
{       
                getkey();                                                //按键调用
                TH1=(65536-45872)/256;                        //重装初值
                TL1=(65536-45872)%256;
                num2++;
                num++;
                if(num==5)
                {
                        num=0;
                        num=~num;                                                   //num取反
                }
       
                if(num2==20)                                                        //num2到20为1秒        ,num2归0重新计数
                {
                        num2=0;
                        miao++;
                        if(miao==60)
                        {                                         
                                miao=0;                                                 //秒到60归0,分加1
                                fen++;                                               
                        }
                               
               
                        if(fen==60)
                        {                                                                //分到60归0,时加1
                                fen=0;
                                shi++;
                        }
                       
                       
                        if(shi==24)
                        {
                                shi=0;                                          //时到24归0
                        }
                               
                }
                if(shi==fmshi&&fen==fmfen&&miao==fmmiao)                 //判断闹钟时间是否与现在时间相等
                {
                        fm = ~fm;
                }
       
}

你这调用的是什么的显示器LED还是1602

你这个应该是数码管吧  数码管时间没调好才会有鬼影

最好在刷新下一位数码管时把本位数码管的引脚设置成相同的电平,也就是关掉本位显示,然后在设置下一位显示,就可以避免鬼影

记得当年 常用的一个词 叫做 消影

显示里不能用for 语句吗,搞那么长   。。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top