各位大佬,为什么每次我加到十以上,十位就会闪烁一下就黑了,k1按键按一次+1,k2按一次减一,k3清零,k4定时器每秒+1。
请问怎么更改,能不能给下改正之后的代码,不怎么懂单片机。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint num=0;
uint shi;
uint ge;
uint i=0;
unsigned char code LedChar[10]={0x3F,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f,0X67};
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--); //延迟一毫秒
}
void init()
{
TMOD=0X01;
TH0=0X4C;
TL0=0X00;
EA=1;
ET0=1;
TR0=1;
}
void display()
{
P0=0X00;
if(num<10)
{
LSA=0;LSB=0;LSC=0;
P0=LedChar[num];
}
if(num>=10)
{
shi=num/10;
ge=num%10;
LSA=1;LSB=0;LSC=0;
P0=LedChar[shi];
delay(40);
LSA=0;LSB=0;LSC=0;
P0=LedChar[ge];
delay(40);
}
}
void main()
{
while(1)
{
if(num==0)
{
LSA=0;LSB=0;LSC=0;
P0=LedChar[0];
delay(5);
LSA=1;LSB=0;LSC=0;
P0=LedChar[0];
delay(5);
}
if(k1==0)
{
delay(1);
if(k1==0)
{
num++;
display();
}
while(!k1);
}
if(k2==0)
{
delay(1);
if(k2==0)
{
num--;
display();
}
while(!k2);
}
if(k3==0)
{
delay(1);
if(k3==0)
{
LSA=0;LSB=0;LSC=0;
P0=LedChar[0];
delay(5);
LSA=1;LSB=0;LSC=0;
P0=LedChar[0];
delay(5);
}
while(!k3);
}
if(k4==0)
{
delay(1);
if(k4==0)
{
init();
}
while(!k4);
}
}
}
void time() interrupt 1
{
TH0=0X4C;
TL0=0X00;
i++;
if(i==20)
{
num++;
i=0;
display();
}
}
|