蓝桥杯 2017年省赛

main.c

#include <stc15.h>
#include  "sys.h"


bit flag500ms=0;
int hour=0x23;
int minute=0x59; 
int second=0x50;
int hour0=0x00; int minute0=0x00;int second0=0x00;
int time_flag[]={0,0,0,0,0,0};

bit flag_back=0;bit flag_led=0;

void main()
{
	All_Init();
	EA=1;
	Timer0Init();
	Timer1Init();
	Write_Ds1302_Byte( 0x00,7);
	Write_Ds1302_Byte( 0x80,second);
	Write_Ds1302_Byte( 0x82,minute);
	Write_Ds1302_Byte( 0x84,hour);
	
	
	while(1)
	{
		
		if(flag_back!=flag500ms&&Time_Option==0)
		{
					
				second=Read_Ds1302_Byte(0x81);
				minute=Read_Ds1302_Byte(0x83);
				hour=Read_Ds1302_Byte(0x85);
				
				time_flag[0]=hour/16*10+hour%16;
				time_flag[1]=minute/16*10+minute%16;
				time_flag[2]=second/16*10+second%16;
		
				flag_back=flag500ms;

		}
		if((hour==hour0)&&(minute==minute0)&&(second==second0) )
		{
			flag_led=1;
   	}
	
	

}
}

sys.c

#include "sys.h"


void All_Init()
{
	P2=(P2&0x1f)|0x80;
	P0=0xff;
	P2=(P2&0x1f)|0xa0;
	P0=0x00;
	P2=(P2&0x1f)|0xc0;
	P0=0x00;
}

void Timer0Init(void)		//1ms @11.0592MHz
{
	AUXR &= 0x7F;		
	TMOD &= 0xF0;		
	TL0 = 0x66;		
	TH0 = 0xFC;	
	TF0 = 0;		
	TR0 = 1;	
	ET0=1;
}

void Timer0() interrupt 1
{	
	static u16 T0c0=0,T0c1=0;
	
	
	if(T0c0==500&&Time_Option==0)
	{
//		second=Read_Ds1302_Byte(0x81);
//		minute=Read_Ds1302_Byte(0x83);
//		hour=Read_Ds1302_Byte(0x85);
		
//		time_flag[0]=hour/16*10+hour%16;
//		time_flag[1]=minute/16*10+minute%16;
//		time_flag[2]=second/16*10+second%16;
//		
		T0c0=0;
	}
	if(T0c1>=500)
	{
	flag500ms=~flag500ms;
		T0c1=0;
	}
	
	
	T0c0++;
  T0c1++;
	Smg_Show();
	Smg_Scan();
	Key_Scan();
  Key_Press();
	

}

void Timer1Init(void)		//10ms @11.0592MHz
{
	AUXR &= 0xBF;		
	TMOD &= 0x0F;		
	TL1 = 0x00;		
	TH1 = 0xDC;	
	TF1 = 0;		
	TR1 = 1;	
  ET1=1;	
}

void Timer1() interrupt 3
{
  static	u16 T1c0;
	static i=0;
	
	if(T1c0>50)
	{
		if(flag_led==1)
		{
			if(i%2==0)
				Led_work(0xfe);
			else
				Led_work(0xff);
			
			if(i==10)
			{
				Led_work(0xff);
				
				flag_led=0;

				i=0;
			}
			i++;
		}

		T1c0=0;
	}
	
	T1c0++;

}

key.c

#include "sys.h"

u8 Time_Option=0;
u8 Clock_Option=0;
bit 	flag_temp=0;

sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;

u8 KeySta[]={1,1,1,1};
//u8 keystu[]={0xff,0xff,0xff,0xff};
u8 keyback[]={1,1,1,1};



void Key_Scan()
{
	u8 i;
	static u8 keybuff[]={0xff,0xff,0xff,0xff};
	
		keybuff[0]=(keybuff[0]<<1)|s7;
		keybuff[1]=(keybuff[1]<<1)|s6;
		keybuff[2]=(keybuff[2]<<1)|s5;
		keybuff[3]=(keybuff[3]<<1)|s4;
	
	for(i=0;i<4;i++)
	{
		if(keybuff[i]==0x00)
		{
			KeySta[i]=0;  //anxia
		}
		else if(keybuff[i]==0xff)
		{
			KeySta[i]=1;
		}
		else;
	

	}
}
void Key_Press()
{	
	
	u8 i;
	for(i=0;i<4;i++)
	{
		if(KeySta[i]!=keyback[i])
		{
			if(keyback[i]!=1)
			{
				keydrive(i);
			}
			keyback[i]=KeySta[i];

		}

	}

	if((Time_Option==0)&&(Clock_Option==0))
	{
		if(keyback[0]==0)
		{
//			if(//Get_18B20Temp())
//			{
//				flag_temp=1;

//			}
			
		}
		else
			flag_temp=0;
			
	}
}

void keydrive(u8 key)
{
	if(key==3&&Clock_Option==0)
	{
		Time_Option++;
		if(Time_Option>3)
		{
			Time_Option=0;
			Write_Ds1302_Byte( 0x80,second);
			Write_Ds1302_Byte( 0x82,minute);
			Write_Ds1302_Byte( 0x84,hour);
		}

	}
	else if(key==2&&Time_Option==0)
	{
		Clock_Option++;
		if(Clock_Option>3)
		{
			Clock_Option=0;
		}
	}
	else if(key==1)
	{
		
		if(Time_Option==1)
			time_flag[0]++;
		else if(Time_Option==2)
			time_flag[1]++;
		else if(Time_Option==3)
			time_flag[2]++;
		else if(Clock_Option==1)
			time_flag[3]++;
		else if(Clock_Option==2)
			time_flag[4]++;
		else if(Clock_Option==3)
			time_flag[5]++;
		
		if(time_flag[0]>23)
			time_flag[0]=0;
		else if(time_flag[1]>59)
			time_flag[1]=0;
		else if(time_flag[2]>59)
			time_flag[2]=0;
		else if(time_flag[3]>23)
			time_flag[3]=0;
		else if(time_flag[4]>59)
			time_flag[4]=0;
		else if(time_flag[5]>59)
			time_flag[5]=0;
	
	}
	else if(key==0)
	{
		
		if(Time_Option==1)
			time_flag[0]--;
		else if(Time_Option==2)
			time_flag[1]--;
		else if(Time_Option==3)
			time_flag[2]--;
		else if(Clock_Option==1)
			time_flag[3]--;
		else if(Clock_Option==2)
			time_flag[4]--;
		else if(Clock_Option==3)
			time_flag[5]--;
		
		if(time_flag[0]<0)
			time_flag[0]=23;
		else if(time_flag[1]<0)
			time_flag[1]=59;
		else if(time_flag[2]<0)
			time_flag[2]=59;
		else if(time_flag[3]<0)
			time_flag[3]=59;
		else if(time_flag[4]<0)
			time_flag[4]=59;
		else if(time_flag[5]<0)
			time_flag[5]=59;
	
	}
	if(Time_Option!=0)
	{
		hour=time_flag[0]/10*16+time_flag[0]%10;
		minute=time_flag[1]/10*16+time_flag[1]%10;
		second=time_flag[2]/10*16+time_flag[2]%10;
	}
	else if(Clock_Option!=0)
	{
		hour0=time_flag[3]/10*16+time_flag[3]%10;
		minute0=time_flag[4]/10*16+time_flag[4]%10;
		second0=time_flag[5]/10*16+time_flag[5]%10;
	}


}






	
	






smg.c

#include "sys.h"

u8 duanma[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
										0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,
										0xff, 0xbf};
u8 show[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

u8 smg1;smg2,smg3,smg4,smg5,smg6,smg7,smg8;

void Smg_Scan()
{
	static u8 i=0;
	
	P2=(P2&0x1f)|0xc0;
	P0=0x01<<i;
	
	P2=(P2&0x1f)|0xe0;
	P0=0xff;
	P0=show[i];
	
	P2=P2&0x1f;     //
	i++;
	i&=0x07;
}

void Smg_Show()
{
	
	if(Time_Option==0&&Clock_Option==0)
	{
		smg1=(Read_Ds1302_Byte(0x85))/16;
		smg2=(Read_Ds1302_Byte(0x85))%16;
		smg3=17;
		smg4=(Read_Ds1302_Byte(0x83))/16;
		smg5=(Read_Ds1302_Byte(0x83))%16;
		smg6=17;
		smg7=(Read_Ds1302_Byte(0x81))/16;
		smg8=(Read_Ds1302_Byte(0x81))%16;

	}
	else if(Time_Option==1)
	{
		if(flag500ms==1)
		{
			smg1=hour/16;
			smg2=hour%16;
			smg3=17;
			smg4=minute/16;
			smg5=minute%16;
			smg6=17;
			smg7=second/16;
			smg8=second%16;
		}
		else
		{
			smg1=16;
			smg2=16;
			smg3=17;
			smg4=minute/16;
			smg5=minute%16;
			smg6=17;
			smg7=second/16;
			smg8=second%16;
		}
	}
		else if(Time_Option==2)
	{
		if(flag500ms==1)
		{
			smg1=hour/16;
			smg2=hour%16;
			smg3=17;
			smg4=minute/16;
			smg5=minute%16;
			smg6=17;
			smg7=second/16;
			smg8=second%16;
		}
		else
		{
			smg1=hour/16;
			smg2=hour%16;
			smg3=17;
			smg4=16;
			smg5=16;
			smg6=17;
			smg7=second/16;
			smg8=second%16;
		}
	}
		else if(Time_Option==3)
	{
		if(flag500ms==1)
		{
			smg1=hour/16;
			smg2=hour%16;
			smg3=17;
			smg4=minute/16;
			smg5=minute%16;
			smg6=17;
			smg7=second/16;
			smg8=second%16;
		}
		else
		{
			smg1=hour/16;
			smg2=hour%16;
			smg3=17;
			smg4=minute/16;
			smg5=minute%16;
			smg6=17;
			smg7=16;
			smg8=16;
		}
	}
	
		else if(Clock_Option==1)
		{
			if(flag500ms==1)
		{
			smg1=hour0/16;
			smg2=hour0%16;
			smg3=17;
			smg4=minute0/16;
			smg5=minute0%16;
			smg6=17;
			smg7=second0/16;
			smg8=second0%16;
		}
		else
		{
			smg1=16;
			smg2=16;
			smg3=17;
			smg4=minute0/16;
			smg5=minute0%16;
			smg6=17;
			smg7=second0/16;
			smg8=second0%16;
		}
		}
		else if(Clock_Option==2)
		{
			if(flag500ms==1)
		{
			smg1=hour0/16;
			smg2=hour0%16;
			smg3=17;
			smg4=minute0/16;
			smg5=minute0%16;
			smg6=17;
			smg7=second0/16;
			smg8=second0%16;
		}
		else
		{
		smg1=hour0/16;
			smg2=hour0%16;
			smg3=17;
			smg4=16;
			smg5=16;
			smg6=17;
			smg7=second0/16;
			smg8=second0%16;
		}
		}
		else if(Clock_Option==3)
		{
			if(flag500ms==1)
		{
			smg1=hour0/16;
			smg2=hour0%16;
			smg3=17;
			smg4=minute0/16;
			smg5=minute0%16;
			smg6=17;
			smg7=second0/16;
			smg8=second0%16;
		}
		else
		{
			smg1=hour0/16;
			smg2=hour0%16;
			smg3=17;
			smg4=minute0/16;
			smg5=minute0%16;
			smg6=17;
			smg7=16;
			smg8=16;
		}
		}
		
		if(flag_temp==1)
		{
//			smg3=temp/100;
//			smg2=(temp%100)/10;
//			smg1=temp/10;

    }
	
	show[0]=duanma[smg1];
	show[1]=duanma[smg2];
	show[2]=duanma[smg3];
	show[3]=duanma[smg4];
	show[4]=duanma[smg5];
	show[5]=duanma[smg6];
	show[6]=duanma[smg7];
	show[7]=duanma[smg8];
	
}

void Led_work(u8 dat)
{
	P2=(P2&0x1f)|0x80;
			P0=dat;
			P2=(P2&0x1f);

}


ds1302

/*
  ³ÌÐò˵Ã÷: DS1302Çý¶¯³ÌÐò
  Èí¼þ»·¾³: Keil uVision 4.10 
  Ó²¼þ»·¾³: CT107µ¥Æ¬»ú×ÛºÏʵѵƽ̨ 8051£¬12MHz
  ÈÕ    ÆÚ: 2011-8-9
*/

#include <stc15.h>
#include <intrins.h>

sbit SCK=P1^7;		
sbit SDA=P2^3;		
sbit RST = P1^3;   // DS1302¸´Î»												

void Write_Ds1302(unsigned  char temp) 
{
	unsigned char i;
	for (i=0;i<8;i++)     	
	{ 
		SCK=0;
		SDA=temp&0x01;
		temp>>=1; 
		SCK=1;
	}
	SDA=1}   

void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1; 	_nop_();  
 	Write_Ds1302(address);	
 	Write_Ds1302(dat);		
 	RST=0; 
}

unsigned char Read_Ds1302_Byte ( unsigned char address )
{
 	unsigned char i,temp=0x00;
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1;	_nop_();
 	Write_Ds1302(address);
 	for (i=0;i<8;i++) 	
 	{		
		SCK=0;
		temp>>=1;	
 		if(SDA)
 		temp|=0x80;	
 		SCK=1;
	} 
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
	SCK=1;	_nop_();
	SDA=0;	_nop_();
	SDA=1;	_nop_();
  
	return (temp);			
}

ds1302.h

#ifndef __DS1302_H
#define __DS1302_H

void Write_Ds1302(unsigned char temp);
void Write_Ds1302_Byte( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302_Byte( unsigned char address );
#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值