#include
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;
sbit shijia=P3^0;
sbit shijian=P3^1;
sbit fenjia=P3^2;
sbit fenjian=P3^3;
unsigned int ms=0,s=0,min=0,h=0;
unsigned char table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7e,0x39,0x5e,0x79,0x71};
void delay(unsigned int i)
{while(i--);}
void anjian()
{
if(shijia==0)
{h++;while(shijia!=1);}
if(shijian==0&&h>=1)
{h--;while(shijian!=1);}
if(fenjia==0)
{min++;while(fenjia!=1);}
if(fenjian==0&&min>=1)
{min--;while(fenjian!=1);}
}
void main()
{
unsigned char i=0;
while(1)
{
P2=0xff;
switch(i)
{
case 0:P0=table[ms/10%10];a=0;b=0;c=0;i++;break;
case 1:P0=table[ms/100%10];a=1;b=0;c=0;i++;break;
case 2:P0=table[s%10];a=0;b=1;c=0;i++;break;
case 3:P0=table[s/10];a=1;b=1;c=0;i++;break;
case 4:P0=table[min%10];a=0;b=0;c=1;i++;break;
case 5:P0=table[min/10];a=1;b=0;c=1;i++;break;
case 6:P0=table[h%10];a=0;b=1;c=1;i++;break;
case 7:P0=table[h/10];a=1;b=1;c=1;i=0;break;
}
ms++;
if(ms==1000)
{ms=0;
s++;}
if(s==60)
{s=0;
min++;}
if(min==60)
{min=0;
h++;}
if(h==24)
{h=0;}
anjian();
delay(50);
}
}
利用keil 5去实现时钟的仿真,问题出现在时的十位在仿真的时候显示的数字会一直跳。开始的时候不会维持在0的状态;
时的十位代码:case 7:P0=table[h/10];a=1;b=1;c=1;i=0;break;
不按也会跳?
看一下编译器输出信息。
在anjian函数里暂时注释掉和h相关的代码,也许是按键电平错误导致