会有鬼影,请问怎么去
时间: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;
}
}
#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 语句吗,搞那么长 。。