//共阴数码管74HC164串行驱动
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DAT=P3^7; //模拟串口数据发送端
sbit CLK=P3^4;//模拟时钟控制端
sbit k1=P3^6;
uint count,flag,flag1;
uint m,i;
uint t,tt;
uint a,b,s1;
uchar code tab[]={0xdf,0x45,0xaf,0xed,0x75,0xf9,0xfb,//.0-.9
0x4d,0xff,0xfd};
uchar code tab1[]={0xde,0x44,0xae,0xec,0x74,0xf8,0xfa, // 0-9
0x4c,0xfe,0xfd};
uchar code tab2[]={0xde,0x7e,0x3a,0xd6,0x32,0x64,0x70,0x26,0xaa,0xac,
0xae,0x64,0xae,0x8e};//0,A,F,U,X,Y,Z,Z+1.Z+2
void sendbyte(uchar byte)
{
uchar num,c;
num=tab2[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar b,uchar a)
{
sendbyte(a);
delay(58);
sendbyte(b);
}
void keyscan()/*键盘扫描程序*/
{
if(k1==0)
{
delay(20);
if(k1==0)
{
s1++;
if(s1==1)
{
while(1)
{
display(1,2);
delay(500);
sendbyte(tab2[10]);
delay(58);
sendbyte(tab2[10]);
delay(500);
tt++;
if(tt<=20)
{
if(s1==2)
{
s1=0;
tt=0;
while(1)
{
display(2,3);
delay(500);
sendbyte(tab2[10]);
delay(58);
sendbyte(tab2[10]);
delay(500);
tt++;
if(tt==20)
{
while(1)
{
tt=0;
display(3,2);
}
}
}
}
}
if(tt==20)
{
while(1)
{
tt=0;
flag=0;
display(2,1);
}
}
}
}
}
}
}
void main()
{
display(0,1);
while(1)
{
keyscan();
}
}
这个程序是实现按键控制数码管的闪烁显示。按键控制程序里面,在while循环里面实现数字闪烁20次后就稳定下来,我想在闪烁20次之间用按键控制闪烁数字的变化。也就是说如果刚才第一次按按键时闪烁“AF”,那么在按一下就闪烁"UF,可是UF就不出来,一直都是AF,就是红色的程序执行不了。我想我的红色的程序应该可以执行的啊,但是仿真时不执行。有空的帮我看看啦,谢谢了。 |