蓝桥杯 2018省赛

main`

#include "sys.h"


u8 KeySta[]={1,1,1,1};
u8 KeyBack[]={1,1,1,1};
//u8 Mode_Led=0;
u8 Mode_Option=0;



sbit S4= P3^3;
sbit S5= P3^2;
sbit S6= P3^1;
sbit S7= P3^0;

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;
		if(Keybuff[i]==0xff)
			KeySta[i]=1;
	}

//  for(i=0;i<4;i++)
//	{
//		if(KeySta[i]==0)
//			return i;
//	}

}
void KeyPress()
{
	u8 i;
	for(i=0;i<4;i++)
	{
		if(KeySta[i]!=KeyBack[i])
		{
			if(KeyBack[i]!=1)
			{
				KeyDrive(i);

			}
			KeyBack[i]=KeySta[i];	
		}

		}
		if(Mode_Option==0)
		{
			if(KeySta[3]==0)
				display_pwm=1;
			else
				display_pwm=0;
		}

	}

void KeyDrive(u8 key)
{
	if(key==0)
	{
		if(TR1==0)
		{
			TR1=1;
		}	
		else
		{
			TR1=0;
		}

		
	}
	else if(key==1)
	{
		Mode_Option++;
		if(Mode_Option>=3)
			Mode_Option=0;

	}
	else if(key==2)
	{
		if(Mode_Option==1)
		{
			Mode_Led++;
		  if(Mode_Led>=4)
			  Mode_Led=4;

		}
		else if(Mode_Option==2)
		{
			time_led[Mode_Led]++;
			if(time_led[Mode_Led]>=12)
				time_led[Mode_Led]=12;

		}

	}
else if(key == 3)
	{
		if(Mode_Option == 1)
		{
			Mode_Led --;
			if(Mode_Led <= 1)				
				Mode_Led = 1;
		}
		
		else if(Mode_Option == 2)
		{
			time_led[Mode_Led] --;
			if(time_led[Mode_Led] <= 4)		
				time_led[Mode_Led] = 4;
		}
	}


}	
//void Mode()
//{

//	if(Mode_Led==1)
//	{
//		P2=(P2&0x1f)|0x80;
//	//	P0=_cror_(0x01,1);
//    P0=0xaa;
//	}
//	if(Mode_Led==2)
//	{
//			P2=(P2&0x1f)|0x80;
//	//	P0=_cror_(0x01,1);
//    P0=0xff;
//	}

//}
	

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;
	P2=P2&0x1f;

}

void Timer0_Init()
{
	TMOD|=0x01;
	TF0=0;
	TR0=1;
	ET0=1;
}

void Timer0() interrupt 1
{
	static u16 T0c1=0,T0c2=0;
	static u8 index=0,e2_addr=0x00;
	TH0=(65535-2000)/256;
	TL0=(65535-2000)%256;
		T0c2++;
	
	if(Mode_Option>0)
	{
		T0c1++;
		if(T0c1>=400)
		{
			T0c1=0;
			flag_800ms=~flag_800ms;
		}
	}
		if((T0c2%5==0)&&(T0c2<30))
		{
			switch(index)
			{
				case 0:Write_E2PROM(0x00,time_led[e2_addr]);break;
				case 1:Write_E2PROM(0x01,time_led[e2_addr]);break;
				case 2:Write_E2PROM(0x02,time_led[e2_addr]);break;
				case 3:Write_E2PROM(0x03,time_led[e2_addr]);break;
        case 4:Write_E2PROM(0x04,time_led[e2_addr]);break;
				default:break;
			}
			index ++;
			e2_addr++;
			
			if(index>=5)
			{
				index=0;
				e2_addr =0;
			}

		}
		else if(T0c2>=30)
		{
			T0c2=0;
			pwm= Read_AIN(0x03);

		}
		
			
			

	Key_Scan();
	SaoMiao();
	smg_show();
}

void Timer1_Init()
{
	TMOD=0x10;
	TF1=0;
	ET1=1;
	TR1=1;

}
void Timer1() interrupt 3
{
	static mback=0;
	static u16 temp;
	static u8 index;
	u8 light,dat;
	static u16 T1c0,T1c1;
	
	TH1=(65535-1000)/256;
	TL1=(65535-1000)%256;
	
	T1c0++; T1c1++;
	
	T1c1=T1c1&0x0f;
	light=pwm*pwm;
	temp=100*time_led[Mode_Led];
	
	if(T1c0>=temp)
	{
		T1c0=0;
		if(Mode_Led==1)
	{
			if(Mode_Led!=mback)
			{
				dat=0x7f;
				mback=Mode_Led;
			}
			dat=_crol_(dat,1);
	}
	if(Mode_Led==2)
	{
			if(Mode_Led!=mback)
			{
				dat=0xfe;
				mback=Mode_Led;
			}
			dat=_cror_(dat,1);
	}
	if(Mode_Led==3)
	{
			if(Mode_Led!=mback)
			{
				index=0;
				mback=Mode_Led;
			}
			switch(index)
			{
				case 0: dat = 0x7e; break;		//0111 1110
				case 1: dat = 0xbd; break;		//1011 1101
				case 2: dat = 0xdb; break;
				case 3: dat = 0xe7; break;
				default : break;
			}
			index ++;
			index &= 0x03;

	}
	if(Mode_Led==4)
	{
			if(Mode_Led!=mback)
			{
				index=0;
				mback=Mode_Led;
			}
			switch(index)
			{
			case 0: dat = 0xe7; break;		//1110 0111
				case 1: dat = 0xdb; break;		//1011 1101
				case 2: dat = 0xbd; break;
				case 3: dat = 0x7e; break;
				default : break;
			}
			index ++;
			index &= 0x03;

	}
}
	if(light>T1c1)
	{
		LED_work(dat);
	}
	else
	{
		LED_work(0xff);
	}


	}
	

key.c

#include "sys.h"


u8 KeySta[]={1,1,1,1};
u8 KeyBack[]={1,1,1,1};
//u8 Mode_Led=0;
u8 Mode_Option=0;



sbit S4= P3^3;
sbit S5= P3^2;
sbit S6= P3^1;
sbit S7= P3^0;

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;
		if(Keybuff[i]==0xff)
			KeySta[i]=1;
	}

//  for(i=0;i<4;i++)
//	{
//		if(KeySta[i]==0)
//			return i;
//	}

}
void KeyPress()
{
	u8 i;
	for(i=0;i<4;i++)
	{
		if(KeySta[i]!=KeyBack[i])
		{
			if(KeyBack[i]!=1)
			{
				KeyDrive(i);

			}
			KeyBack[i]=KeySta[i];	
		}

		}
		if(Mode_Option==0)
		{
			if(KeySta[3]==0)
				display_pwm=1;
			else
				display_pwm=0;
		}

	}

void KeyDrive(u8 key)
{
	if(key==0)
	{
		if(TR1==0)
		{
			TR1=1;
		}	
		else
		{
			TR1=0;
		}

		
	}
	else if(key==1)
	{
		Mode_Option++;
		if(Mode_Option>=3)
			Mode_Option=0;

	}
	else if(key==2)
	{
		if(Mode_Option==1)
		{
			Mode_Led++;
		  if(Mode_Led>=4)
			  Mode_Led=4;

		}
		else if(Mode_Option==2)
		{
			time_led[Mode_Led]++;
			if(time_led[Mode_Led]>=12)
				time_led[Mode_Led]=12;

		}

	}
else if(key == 3)
	{
		if(Mode_Option == 1)
		{
			Mode_Led --;
			if(Mode_Led <= 1)				
				Mode_Led = 1;
		}
		
		else if(Mode_Option == 2)
		{
			time_led[Mode_Led] --;
			if(time_led[Mode_Led] <= 4)		
				time_led[Mode_Led] = 4;
		}
	}


}	
//void Mode()
//{

//	if(Mode_Led==1)
//	{
//		P2=(P2&0x1f)|0x80;
//	//	P0=_cror_(0x01,1);
//    P0=0xaa;
//	}
//	if(Mode_Led==2)
//	{
//			P2=(P2&0x1f)|0x80;
//	//	P0=_cror_(0x01,1);
//    P0=0xff;
//	}

//}
	

smg.c

#include "sys.h"

u8 Nixie[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
										0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,
										0xff, 0xbf}; //0-15&off&-

u8 WeiMa[]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
u8 Nixiebuff[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};

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

//u8 Mode_Led;

void SaoMiao()
{
	static u8 i=0;
	P2=(P2&0x1f)|0xc0;  // open weima
	P0=0x01<<i;
	
	P2=(P2&0x1f)|0xe0;
	P0=0xff;
	P0=Nixiebuff[i];
	
	i++;
	i&=0x07;

}

void smg_show()
{
	if(Mode_Option==0)
	{
		if(display_pwm==0)
			smg1=smg2=smg3=smg4=smg5=smg6=smg7=smg8=16;
		else
		{
			smg1=smg2=smg3=smg4=smg5=smg6=16;
			smg7=17;
			smg8=pwm%10;
		}
	}
	else if(Mode_Option == 1)
	{
		if(flag_800ms == 1)		
		{
			smg1 = 17;
			smg2 = Mode_Led % 10;
			smg3 = 17;
			smg4 = 16;
			smg5 = time_led[Mode_Led] / 10;
			smg6 = time_led[Mode_Led] % 10;
			smg7 = 0;
			smg8 = 0;
		}
		else				
		{
			smg1 = 16;
			smg2 = 16;
			smg3 = 16;
			smg4 = 16;
			smg5 = time_led[Mode_Led] / 10;
			smg6 = time_led[Mode_Led] % 10;
			smg7 = 0;
			smg8 = 0;
		}
	}
	else if(Mode_Option == 2)
	{
		if(flag_800ms == 1)		
		{
			smg1 = 17;
			smg2 = Mode_Led % 10;
			smg3 = 17;
			smg4 = 16;
			smg5 = time_led[Mode_Led] / 10;
			smg6 = time_led[Mode_Led] % 10;
			smg7 = 0;
			smg8 = 0;
		}
		else				
		{
			smg1 = 17;
			smg2 = Mode_Led % 10;
			smg3 = 17;
			smg4 = 16;
			smg5 = 16;
			smg6 = 16;
			smg7 = 16;
			smg8 = 16;
		}
	}
 
	Nixiebuff[0] = Nixie[smg1];
	Nixiebuff[1] = Nixie[smg2];
	Nixiebuff[2] = Nixie[smg3];
	Nixiebuff[3] = Nixie[smg4];
	Nixiebuff[4] = Nixie[smg5];
	Nixiebuff[5] = Nixie[smg6];
	Nixiebuff[6] = Nixie[smg7];
	Nixiebuff[7] = Nixie[smg8];



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

}



iic


#include "sys.h"

#define DELAY_TIME 5

#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1

//×ÜÏßÒý½Å¶¨Òå
sbit SDA = P2^1;  /* Êý¾ÝÏß */
sbit SCL = P2^0;  /* ʱÖÓÏß */

void IIC_Delay(unsigned char i)
{
    do{_nop_();}
    while(i--);        
}
//×ÜÏßÆô¶¯Ìõ¼þ
void IIC_Start(void)
{
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;	
}

//×ÜÏßÍ£Ö¹Ìõ¼þ
void IIC_Stop(void)
{
    SDA = 0;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//·¢ËÍÓ¦´ð
void IIC_SendAck(bit ackbit)
{
    SCL = 0;
    SDA = ackbit;  					// 0£ºÓ¦´ð£¬1£º·ÇÓ¦´ð
    IIC_Delay(DELAY_TIME);
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SCL = 0; 
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//µÈ´ýÓ¦´ð
bit IIC_WaitAck(void)
{
    bit ackbit;
	
    SCL  = 1;
    IIC_Delay(DELAY_TIME);
    ackbit = SDA;
    SCL = 0;
    IIC_Delay(DELAY_TIME);
    return ackbit;
}

//ͨ¹ýI2C×ÜÏß·¢ËÍÊý¾Ý
void IIC_SendByte(unsigned char byt)
{
    unsigned char i;

    for(i=0; i<8; i++)
    {
        SCL  = 0;
        IIC_Delay(DELAY_TIME);
        if(byt & 0x80) SDA  = 1;
        else SDA  = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 1;
        byt <<= 1;
        IIC_Delay(DELAY_TIME);
    }
    SCL  = 0;  
}

//´ÓI2C×ÜÏßÉϽÓÊÕÊý¾Ý
unsigned char IIC_RecByte(void)
{
    unsigned char i, da;
    for(i=0; i<8; i++)
    {   
    	SCL = 1;
	IIC_Delay(DELAY_TIME);
	da <<= 1;
	if(SDA) da |= 1;
	SCL = 0;
	IIC_Delay(DELAY_TIME);
    }
    return da;    
}


unsigned char Read_AIN(unsigned char chn)
{
	unsigned char dat,val,ad_pwm;
	EA=0;
	IIC_Start();
	IIC_SendByte(0x90);
	IIC_WaitAck();
	IIC_SendByte(chn);
	IIC_WaitAck();
	IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0x91);
	IIC_WaitAck();
	dat=IIC_RecByte(); 
	IIC_SendAck(1);
	IIC_Stop();
	val=(dat*40)/255;
	if((val>=30)&&(val<=40))
		ad_pwm=4;
	else if((val>=20)&&(val<30))
		ad_pwm=3;
	else if((val>=10)&&(val<20))
		ad_pwm=2;
	else if((val>=0)&&(val<10))
		ad_pwm=1;
	
	EA=1;
	return ad_pwm;
	
}
void Write_E2PROM(unsigned char add,unsigned char dat)
{
	EA=0;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
	IIC_Delay(5);
	EA=1;
	
}
unsigned char Read_E2PROM(unsigned char add)
{
	
	unsigned char d;
	IIC_Start();
	IIC_SendByte(0xa0);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_Stop();
	
	IIC_Start();
	IIC_SendByte(0xa1);
	IIC_WaitAck();
	d=IIC_RecByte();
	IIC_SendAck(1);
	IIC_Stop();
	return d;


}

iic.h

#ifndef _IIC_H_
#define _IIC_H_
void IIC_Start(void); 
void IIC_Stop(void);  
bit IIC_WaitAck(void);  
void IIC_SendAck(bit ackbit); 
void IIC_SendByte(unsigned char byt); 
unsigned char IIC_RecByte(void); 
unsigned char Read_AIN(unsigned char chn);
void Write_E2PROM(unsigned char add,unsigned char dat);
unsigned char Read_E2PROM(unsigned char add);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值