这个仿真如何加入一个时钟芯片 并让时钟芯片起效
unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //用一维数组定义0-9、横杠、全灭
unsigned char num[10]={2,0,0,8,0,1,1,6,6,8} ;
unsigned char a[6];
unsigned char second=0,minute=0,hour=12;
unsigned char minute1=0,hour1=0,zdbs=0;
unsigned char b[6]={0x7f,0xbf,0xdf,0xf7,0xfb,0xfd}; //扫描
unsigned char k=0;
unsigned int temp; // 记录1000毫秒为1秒的变量
unsigned char M,S_flag; //M是模式,更新时间的4种模式加上正常模式 S_flag闪烁标志
sbit K1=P3^0; //设置键
sbit K2=P3^1; //增加键
sbit K3=P3^2; //减少键
sbit BEEP=P1^3; //蜂鸣器报警
void delay(unsigned n) //0.2毫秒
{
int x,y;
for(x=0;x<n;x++)
for(y=0;y<24;y++);
}
void init() //定时器初始化
{
M=0;
S_flag=0; //闪烁标志位
TMOD=0x10; //定时器1以方式1定时
TH1=0xfc;
TL1=0x18;
EA=1; //打开总中断
ET1=1; //允许定时器1中断
TR1=1; //开启定时器1 (开始定时计数)
}
void time1() interrupt 3 //定时器1中断函数
{
TH1=0xfc; //定时1ms
TL1=0x18;
temp++;
if(temp==1000) //配合定时器定时1s
{ temp=0;
second++;
}
if(second==60)
{ second=0;
if(minute<59)
minute++;
else { minute=0;
hour++;
hour%=24;
}
}
if((hour1==hour&&minute1==minute&&second<10)||(zdbs==minute&&second<1)) //闹钟时间到
{
BEEP=0;
}
else {BEEP=1;}
if(temp%250==0) //每250ms
S_flag=!S_flag; //闪烁标志位取反
if(k==6) k=0;
P0=a[k];
P2=b[k++];
delay(3);
P2=0xff;
//BEEP=1;
}
void display() //显示函数
{
switch(M)
{
case 0:
{
a[0]=led[hour/10]; //秒
a[1]=led[hour%10]|0x80;
a[2]=led[minute/10]; //分
a[3]=led[minute%10]|0x80;
a[4]=led[second/10]; //时
a[5]=led[second%10];
}break;
case 1:
{
if(S_flag==1)
{
a[0]=led[hour/10];
a[1]=led[hour%10]|0x80;
}
else
{
a[0]=led[11];
a[1]=led[11];
}
a[2]=led[minute/10];
a[3]=led[minute%10]|0x80;
a[4]=led[second/10];
a[5]=led[second%10];
}break;
case 2:
{
a[0]=led[hour/10];
a[1]=led[hour%10]|0x80;
if(S_flag==1)
{
a[2]=led[minute/10];
a[3]=led[minute%10]|0x80;
}
else
{
a[2]=led[11];
a[3]=led[11];
}
a[4]=led[second/10];
a[5]=led[second%10];
}break;
case 3:
{
if(S_flag==1)
{
a[0]=led[hour1/10];
a[1]=led[hour1%10]|0x80;
}
else
{
a[0]=led[11];
a[1]=led[11];
}
a[2]=led[minute1/10];
a[3]=led[minute1%10]|0x80;
a[4]=led[11];
a[5]=led[11];
}break;
case 4:
{
a[0]=led[hour1/10];
a[1]=led[hour1%10]|0x80;
if(S_flag==1)
{
a[2]=led[minute1/10];
a[3]=led[minute1%10]|0x80;
}
else
{
a[2]=led[11];
a[3]=led[11];
}
a[4]=led[11];
a[5]=led[11];
}
}
}
void key_prc() //按键
{
if(K1==0)
{
delay(10); //延时去抖
if(K1==0) //按K1进行模式切换
{ M++;
if(M==5)
M=0;
}
while(!K1);//等待按键释放
}
if(M!=0)
{
switch(M)
{
case 1: //模式1——调时
{
if(K2==0)
{
delay(10); //延时去抖
if(K2==0) //加键按下
{
if(hour<23) hour++;
else hour=0;
}
while(!K2); //等待按键释放
}
if(K3==0)
{
delay(10);
if(K3==0)
{
if(hour> 0) hour--;
else hour=23;
}
while(!K3);
}
} break;
case 2: //模式2——调分
{
if(K2==0)
{
delay(10);
if(K2==0)
{
if(minute<59) minute++;
else minute=0;
}
while(!K2);
}
if(K3==0)
{
delay(10);
if(K3==0)
{
if(minute>0) minute--;
else minute=59;
}
while(!K3);
}
} break;
case 3: //模式3——闹钟调时
{
if(K2==0)
{
delay(10);
if(K2==0)
{
if(hour1<23)
hour1++;
else hour1=0;
}
while(!K2);
}
if(K3==0)
{
delay(10);
if(K3==0)
{
if(hour1>0)
hour1--;
else hour1=23;
}
while(!K3);
}
} break;
case 4: //模式4——闹钟调分
{
if(K2==0)
{
delay(10);
if(K2==0)
{
if(minute1<59)
minute1++;
else minute1=0;
}
while(!K2);
}
if(K3==0)
{
delay(10); //延时去抖
if(K3==0) //减键按下
{ if(minute1>0)
minute1--;
else minute1=59;
}
while(!K3);
}
} break;
}
}
}
void main()
{
BEEP=1;
init();
while(1)
{
key_prc();
display();
}
}
谢谢各位大神了 我真的很急啊
你的显示函数有问题,本来程序显示乱码!改如下才正常显示,void display() //显示函数
{
switch(M)
{
case 0:
{
P0=a[0]=led[hour/10]; //秒
P2=b[1];
delay(10);
P0=a[1]=led[hour%10]|0x80;
P2=b[2];
delay(10);
P0=a[2]=led[minute/10]; //分
P2=b[3];
delay(10);
P0=a[3]=led[minute%10]|0x80;
P2=b[4];
delay(10);
P0=a[4]=led[second/10]; //时
P2=b[5];
delay(10);
P0=a[5]=led[second%10];
P2=b[6];
delay(10);
}break;
case 1:
{
if(S_flag==1)
{
P0=a[0]=led[hour/10];
P2=b[1];
delay(10);
P0=a[1]=led[hour%10]|0x80;
P2=b[2];
delay(10);
}
else
{
P0=a[0]=led[11];
P2=b[1];
delay(10);
P0=a[1]=led[11];
P2=b[2];
delay(10);
}
P0=a[2]=led[minute/10];
P2=b[3];
delay(10);
P0=a[3]=led[minute%10]|0x80;
P2=b[4];
delay(10);
P0=a[4]=led[second/10];
P2=b[5];
delay(10);
P0=a[5]=led[second%10];
P2=b[6];
delay(10);
}break;
case 2:
{
P0=a[0]=led[hour/10];
P2=b[1];
delay(10);
P0=a[1]=led[hour%10]|0x80;
P2=b[2];
delay(10);
if(S_flag==1)
{
P0=a[2]=led[minute/10];
P2=b[3];
delay(10);
P0=a[3]=led[minute%10]|0x80;
P2=b[4];
delay(10);
}
else
{
P0=a[2]=led[11];
P2=b[3];
delay(10);
P0=a[3]=led[11];
P2=b[4];
delay(10);
}
P0=a[4]=led[second/10];
P2=b[5];
delay(10);
P0=a[5]=led[second%10];
P2=b[6];
delay(10);
}break;
case 3:
{
if(S_flag==1)
{
P0=a[0]=led[hour1/10];
P2=b[1];
delay(10);
P0=a[1]=led[hour1%10]|0x80;
P2=b[2];
delay(10);
}
else
{
P0=a[0]=led[11];
P2=b[1];
delay(10);
P0=a[1]=led[11];
P2=b[2];
delay(10);
}
P0=a[2]=led[minute1/10];
P2=b[3];
delay(10);
P0=a[3]=led[minute1%10]|0x80;
P2=b[4];
delay(10);
P0=a[4]=led[11];
P2=b[5];
delay(10);
P0=a[5]=led[11];
P2=b[6];
delay(10);
}break;
case 4:
{
P0=a[0]=led[hour1/10];
P2=b[1];
delay(10);
P0=a[1]=led[hour1%10]|0x80;
P2=b[2];
delay(10);
if(S_flag==1)
{
P0=a[2]=led[minute1/10];
P2=b[3];
delay(10);
P0=a[3]=led[minute1%10]|0x80;
P2=b[4];
delay(10);
}
else
{
P0=a[2]=led[11];
P2=b[3];
delay(10);
a[3]=led[11];
P2=b[4];
delay(10);
}
P0=a[4]=led[11];
P2=b[5];
delay(10);
P0=a[5]=led[11];
P2=b[6];
delay(10);
}
}
}
从电路看,单片机还有空余的引脚,如何加时钟芯片,在于你选的时钟芯片,根据芯片连接引脚,再编写对应的程序就可以了