C51四位数码管动态扫描让其中一位闪烁

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
case 0xeb:outnum=1;break;
case 0xdb:outnum=5;break;
case 0xbb:outnum=9;break;
case 0x7b:outnum=13;break;
default:P2=0xfd;
temp=P2;
switch(temp)
{
case 0xed:outnum=2;break;
uchar miao,fen,shi,flagjia,flagjian;
bit flag_1s;
uchar code wela[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar dula[8]={0,0,1,1,2,2,3,3};
void delay(uint z);
{flagjia=0;fen++;
if(fen>60)
fen=0;
}
if(flagjian==1)
{flagjian=0;
if(fen<1)
fen=1;
fen--;
}
break;
case 3: if(flagjia==1)
{flagjia=0;shi++;
if(shi>12)
shi=1;
}
if(flagjian==1)
flagtj++;
if(flagtj>3)
flagtj=0;
}
if(jia==0)
delay(100);
if(jia==0)
{while(!jia);
flagjia=1;
}
if(jian==0)
delay(100);
if(jian==0)
{while(!jian);
flagjian=1;
}
if(flagtj!=0)
display();
flashflag=~flashflag;
}
//8位数码管动态显示时间,可调节,
//调节时间时,调节的数闪烁显示;
//比较两种闪烁的方法;
//2011。3。6
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
P0=table[dula[i]];break;
case 2:
if(i>2&&i<5)
{if(flag_1s==1)
P0=0xff;
else
P0=table[dula[i]];}
else
P0=table[dula[i]];break;
case 3:
if(i>=0&&i<2)
{if(flag_1s==1)
sbit tiaojie=P1^0;
sbit jia=P1^1;
sbit jian=P1^2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0xbf};
uchar a,b,num1,num2,flag100ms,flag1s,flagtj;
dula[4]=fen%10;
dula[3]=fen/10;
dula[2]=0x0a;
dula[1]=shi%10;
dula[0]=shi/10;
for(i=0;i<8;i++)
{
switch(flagtj)
{
case 1 : n=6;
break;
case 2 : n=3;
break;
case 3 : n=0;
switch(temp)
{
case 0xe7:flashbit=1;break;
case 0xd7:flashbit=2;break;
case 0xb7:flashbit=3;break;
case 0x77:flashbit=4;break;
default :P2=0xfb;
temp=P2;
switch(temp)
{
if(flashflag==1&&flashbit==1)
{
P0=0xff;
}
else {P0=num[dbuf[0]];}
P1=0x01;
delayus(20);
P1=0x00;
if(flashflag==1&&flashbit==2)
{
P0=0xff;
}
else {P0=num[dbuf[1]];}
思路说明:将显示程序放入定时器中断,设定一闪烁标志位。定时时间为2MS,定时时间到则将标志位取反,同时也可以将按键扫描程序放入该定时器,则在视觉上可以看到要求位的闪烁。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
case 0xbe:outnum=11;break;
case 0x7e:outnum=15;break;
default:break;
}
}
}
}
}
}
/*if(!key1)
{
delayus(50);
if(!key1)
{
outnum=5;
while(!key1);
delayus(50);
}
} */
}
void main()
case 0xdd:outnum=6;break;
case 0xbd:outnum=10;break;
case 0x7d:outnum=14;break;
default:P2=0xfe;
temp=P2;
switch(temp)
{
case 0xee:outnum=3;break;
case 0xde:outnum=7;break;
{
TMOD=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void delayus(uint z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display()
}
else {P0=num[dbuf[3]];}
P1=0x08;
delayus(20);
P1=0x00;
}
void keynum()
{
uchar temp;
P2=0x0f;
if(P2!=0xf0)
{
delayus(10);
if(P2!=0xf0)
{
P2=0xf7;
delayus(10);
temp=P2;
{flagjian=0;
if(shi<1)
shi=1;
shi--;
}
break;
}பைடு நூலகம்
}
//===============
{
setint();
while(1)
{
dbuf[0]=outnum/10;
dbuf[1]=outnum%10;
dbuf[2]=2;
dbuf[3]=3;
}
}
void timer1() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
keynum();
P2=wela[i];
delay(5);
P0=0xff;
}
/*第二种显示的方法。相对来说比较代码长些
for(i=0;i<8;i++)
{
switch(flagtj)
{
case 1:
if(i>5&&i<8)
{if(flag_1s==1)
P0=0xff;
else
P0=table[dula[i]];}
else
uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar dbuf[4];
uchar outnum;
bit flashflag=0;
uchar flashbit=0;
sbit key1=P3^2;
void setint()
break;
default:break;
}
if(flagtj!=0)
if((n==i)||(n+1==i))
{if(flag_1s==1)
P0=0xff;
else
P0=table[dula[i]];}
else
P0=table[dula[i]];
if(flagtj==0)
P0=table[dula[i]];
P1=0x02;
delayus(20);
P1=0x00;
if(flashflag==1&&flashbit==3)
{
P0=0xff;
}
else {P0=num[dbuf[2]];}
P1=0x04;
delayus(20);
P1=0x00;
if(flashflag==1&&flashbit==4)
{
P0=0xff;
if(miao==60)
{miao=0,fen++;}
if(fen==60)
{fen=0,shi++;
if(shi>12)
shi=1;}
}
//====================
void disp()
{uchar i,n;
dula[7]=miao%10;
dula[6]=miao/10;
dula[5]=0x0a;
{
uint x;
uchar y;
for(x=0;x<z;x++)
for(y=0;y<112;y++);
}
//===========================
void keyscan()
{
if(tiaojie==0)
delay(100);
if(tiaojie==0)
{while(!tiaojie);
ET0=1;
EA=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
a++;
if(a==10)
{flag100ms=1;}
if(a==100)
{a=0,flag1s=1,miao++;flag_1s=~flag_1s;}
void intc();
void keyscan();
void disp();
void main()
{intc();
while(1)
{
keyscan();
disp();
}
}
//================
void intc()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
switch(flagtj)
{ case 1: if(flagjia==1)
{flagjia=0;miao++;
if(miao>60)
miao=0;
}
if(flagjian==1)
{flagjian=0;
if(miao<1)
miao=1;
miao--;
}
break;
case 2: if(flagjia==1)
P0=0xff;
else
P0=table[dula[i]];}
else
P0=table[dula[i]];break;
case 0:
P0=table[dula[i]];break;
}
P2=wela[i];
delay(10);
P0=0xff;
}
*/
}
//=====================
void delay(uint z)
相关文档
最新文档