老师布置个作业,做到最后时钟的“分”和“秒”能更改,“时”改不了,求支援!!!
可能时哪个地方置0了一直,找不出来
代码如下:
主函数“main.c”
#include <STC15F2K60S2.H>
#include "display.h"
#include "main.h"
#include "key.h"
void IO_Init(void)
{
P0M1=P0M0=0x00;
P1M1=P1M0=0x00;
P2M1=P2M0=0x00;
P3M1=P3M0=0x00;
P4M1=P4M0=0x00;
P5M1=P5M0=0x00;
}
void main()
{
IO_Init();
Timer0Init();
Timer1Init();
while(1)
{
NB_display();
}
}
"key.c"
#include <STC15F2K60S2.H>
#include "main.h"
#include "key.h"
#include "delay.h"
unsigned char key()
{
static unsigned char key_flag=0;
if(key_flag==0&&(S4==0||S5==0||S6==0||S7==0))
{
Delay10ms();
if(S4==0||S5==0||S6==0||S7==0)
{
key_flag=1;
if(S4==0)return 0x04;
else if(S5==0)return 0x05;
else if(S6==0)return 0x06;
else if(S7==0)return 0x07;
}
}
if(S4==1&&S5==1&&S6==1&&S7==1)
{
key_flag=0;
}
return 0x00;
}
"delay.c"
#include "delay.h"
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
"display.c"
#include <STC15F2K60S2.H>
#include "intrins.h"
#include "key.h"
#include "delay.h"
#include "main.h"
#include "display.h"
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char sel[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//0xdf,0xfb第三和第六位的杠
//1111 1110 0xfe
//1111 1101 0xfd
//1111 1011 0xfb
//1111 0111 0xf7
unsigned int date[8]={0,0,10,0,0,10,0,0};
int miao=50;
int fen=59;
int shi=23;
unsigned int n=0;
unsigned int time_flag=0,led_flag=0,chixu=0;shan_flag=0;
void timer1()interrupt 3
{
display();
if(shan_flag==1)
{
time_flag++;
led_flag++;
chixu++;
if(time_flag==200)time_flag=0;
if(led_flag==40)led_flag=0;
if(chixu==600)chixu=0;
}
}
void display()
{
static unsigned char i=0;
P2=0Xff;
P0=table[date[i]];
P2=sel[i];
i++;
if(i==8)
{
i=0;
}
}
void GAI_SHI()
{
unsigned char key_value=0;
shan_flag=1;
ET0=0;
while(1)
{
key_value=key();
if(time_flag<100){niubi(1);}
if(time_flag>100){niubi(0);}
if(key_value==0x04){shi++;if(shi==24)shi=0;}
if(key_value==0x05){shi--;if(shi<0)shi=23;}
if((key_value==0x06)||(key_value==0x07)) break;
}
}
void GAI_FEN()
{
unsigned char key_value=0;
while(1)
{
key_value=key();
if(time_flag<100){niubi(2);}
if(time_flag>100){niubi(0);}
if(key_value==0x04){fen++;if(fen==60)fen=0;}
if(key_value==0x05){fen--;if(fen<0)fen=59;}
if((key_value==0x06)||(key_value==0x07)) break;
}
}
void GAI_MIAO()
{
unsigned char key_value=0;
while(1)
{
key_value=key();
if(time_flag<100){niubi(3);}
if(time_flag>100){niubi(0);}
if(key_value==0x04){miao++;if(miao==60)miao=0;}
if(key_value==0x05){miao--;if(miao<0)miao=59;}
if((key_value==0x06)||(key_value==0x07)) break;
}
ET0=1;shan_flag=0;
}
void NB_display()
{
unsigned int a=0,b=0,c=0,nz_shi=00,nz_fen=00,nz_miao=00;
unsigned char key_value=0;
while(1)
{
niubi(0);
key_value=key();
if(key_value==0x07)
{
shan_flag=1;
GAI_SHI();
GAI_FEN();
GAI_MIAO();
shan_flag=0;
}
if(key_value==0x06)
{
a=shi; b=fen; c=miao;
GAI_SHI();
GAI_FEN();
GAI_MIAO();
nz_shi=shi;
nz_fen=fen;
nz_miao=miao;
shi=a;
fen=b;
miao=c;
}
if((shi=nz_shi)&&(fen=nz_fen)&&(miao=nz_miao))
{
shan_flag=1;
chixu=0;
while(1)
{
key_value=key();
display();
if(led_flag<20)LED=0;
if(led_flag>20)LED=1;
if(chixu==500) break;
if((key_value==0x04)||(key_value==0x05)||(key_value==0x06)||(key_value==0x07)) break;
}
shan_flag=0;
LED=1;
}
}
}
void Timer0Init(void) //10毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0xDC; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
void Timer1Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xCD; //设置定时初始值
TH1 = 0xD4; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1=1;
}
void timer()interrupt 1
{
n++;
if(n==100)//当n=100时,等于1秒 10ms
{
n=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
}
}
void niubi(unsigned char xuan)
{
switch(xuan)
{
case 0:
{
date[0]=shi/10;
date[1]=shi%10;
date[2]=10;
date[3]=fen/10;
date[4]=fen%10;
date[5]=10;
date[6]=miao/10;
date[7]=miao%10;
}break;
case 1:
{
date[0]=11;
date[1]=11;
date[2]=10;
date[3]=fen/10;
date[4]=fen%10;
date[5]=10;
date[6]=miao/10;
date[7]=miao%10;
}break;
case 2:
{
date[0]=shi/10;
date[1]=shi%10;
date[2]=10;
date[3]=11;
date[4]=11;
date[5]=10;
date[6]=miao/10;
date[7]=miao%10;
}break;
case 3:
{
date[0]=shi/10;
date[1]=shi%10;
date[2]=10;
date[3]=fen/10;
date[4]=fen%10;
date[5]=10;
date[6]=11;
date[7]=11;
}break;
}
}
"main.h"
#ifndef __MAIN_H__
#define __MAIN_H__
void IO_Init(void);
#endif
"key.h"
#ifndef __KEY_H__
#define __KEY_H__
sbit S4=P1^4;
sbit S5=P1^5;
sbit S6=P1^6;
sbit S7=P1^7;
unsigned char key();
#endif
"delay.h"
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay10ms();
#endif
"display.h"
#ifndef __DISPLAY_H__
#define __DISPLAY_H__
sbit LED=P4^1;
void display();
void GAI_SHI();
void GAI_FEN();
void GAI_MIAO();
void NB_display();
void Timer0Init(void);
void Timer1Init(void);
void niubi(unsigned char xuan);
#endif