|
10黑币
我在隔壁论坛搬了一个资料来,做出来发现数码管的十位,也就是分的十位没有消隐,并且按键调整分的时候应该是个位数加1,而十位也在跟着加1,走时也是,22过了就是33,直到99,然后一分钟后又显示00,作为小时的LED也不进位。。以下是程序和原理图,我不太会修改程序,也不是硬件的问题,麻烦各位帮我提点意见,谢谢!
#include <reg51.h>
unsigned char code table[]=
{0x88,0x9f,0xc4,0x85,0x93,0xa1,0xa0,0x8f,0x80,0x81} ;
sbit SMG_s = P2^1; //??????????(??)
sbit SMG_g = P2^0; //??????????(??)
//???,,LED,,?????,?????,??,
sbit LED1 = P0^0; //???
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;
sbit LED5 = P0^4;
sbit LED6 = P0^5;
sbit LED7 = P0^6;
sbit LED8 = P0^7;
sbit LED9 = P2^7;
sbit LED10 = P2^6;
sbit LED11 = P2^5;
sbit LED12 = P2^4;
sbit DP = P1^7;
sbit S = P3^2; //??,,,?????,,,12??
sbit F = P3^3; //??,,,?????,,,60??
unsigned char time=0,shi=0,fen=0,miao=0,DP1;
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x4C;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
////////////????
void delay(unsigned int z)
{
unsigned x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void jianceanjian()
{
if(S==0)
{
delay(5);
if(S==0)
{
shi++;
while(S==0);
}
}
if(F==0)
{
delay(5);
if(F==0)
{
fen++;
while(F==0);
}
}
}
void display(char x1,char x2)
{
SMG_s=1;
delay(1);
SMG_g=0;
P1=table[x1];
DP=DP1;
delay(5);
SMG_s=0;
delay(1);
SMG_g=1;
P1=table[x2];
DP=DP1;
delay(5);//???????????
}
void qingkongshi()
{
P0=0XFF;
LED9=1;
LED10=1;
LED11=1;
LED12=1;
}
void main(void)
{
InitTimer0();//定时50ms
while(1)
{
jianceanjian();
if(fen>59)
{
fen=0;
shi++;
}
if(shi>11)
{
shi=0;
}
qingkongshi();
switch(shi)
{
case 1:LED1=0; break;
case 2:LED2=0; break;
case 3:LED3=0; break;
case 4:LED4=0; break;
case 5:LED5=0; break;
case 6:LED6=0; break;
case 7:LED7=0; break;
case 8:LED8=0; break;
case 9:LED9=0; break;
case 10:LED10=0; break;
case 11:LED11=0; break;
case 0:LED12=0; break;
}
display(fen%10,fen/10);
}
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x4C;
TL0 = 0x00;
time++;
if(time>19)
{
time=0;
miao++;
if(miao>59)
{
miao=0;
fen++;
}
DP1=~DP1;
}
}
file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/1006381187/QQ/WinTemp/RichOle/1598%7DAMIGW3_]I%60576Z26(A.png
|
|