0
点赞
收藏
分享

微信扫一扫

51电子时钟代码错了求更改

小a草 2022-04-07 阅读 65

老师布置个作业,做到最后时钟的“分”和“秒”能更改,“时”改不了,求支援!!!

可能时哪个地方置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
举报

相关推荐

0 条评论