第十一届蓝桥杯单片机国赛代码

这篇博客主要分享了参与第十一届蓝桥杯单片机国赛的代码实现,包括main.c、main.h、IIC、OneWire及DS1302时钟模块的相关代码细节。
摘要由CSDN通过智能技术生成

 

 

main.c

#include "main.h"

unsigned char tab[24]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XC0&0X7F,0XF9&0X7F,0XA4&0X7F,0XB0&0X7F,0X99&0X7F,0X92&0X7F,0X82&0X7F,0XF8&0X7F,0X80&0X7F,0X90&0X7F,0XBF,0XFF,0X89,0X8E};
unsigned char dsbuff[8]={21,21,21,21,21,21,21,21};

unsigned char com;
unsigned int temperature;//温度
unsigned int rb3;//rb3 adc
unsigned int time_para_value,temp_para_value,led_para_value;
unsigned int time_para = 17,temp_para = 25,led_para = 4;//时间温度led参数//临时
unsigned char light;//亮暗等级
bit key4 = 0;//0-数据显示 1-参数设置
unsigned char key5 = 0;//0-时间 1-温度 2-亮暗
bit flag;
int count = 0;
int liang_count = 0,mie_count = 0;
bit liang_flag = 0,mie_flag = 0;
bit led1 = 0,led2 = 0,led3 = 0,led4 = 0,led5 = 0,led6 = 0,led7 = 0,led8 = 0;

void main(void)
{
	EA = 1;
	all_init();
	ds1302_init();
	
	Timer0Init();
	Timer1Init();
	while(1)
	{
		Key_Scans();
		if(flag == 1)
		{
			flag = 0;
			ds1302_get();
			temperature = temp1_get();
			rb3 = pcf8951_adc(0X01)*1.961;
			
			if(rb3 < 300)//暗
			{
				light = 1;
			}else if(rb3 > 300)//亮
			{
				light = 0;
			}	
			if(!key4)
			{
				data_display();
				time_para_value = time_para;
				temp_para_value = temp_para;
				led_para_value = led_para;
			}else if(key4)
			{
				para_display();
			}
		}
	}
}

void led_one(unsigned char dat)//单个LED操作
{
	P0 = dat;
	P2 = ((P2&0X1F)|0X80);
	P2 &= 0X1F;
}

void led_2(unsigned char dat)//LED1-LED3
{
	if(led1&&led2&&led3)//111
	{
		led_one(0XF8&dat);
	}else if(led1&&led2&&!led3)//110
	{
		led_one(0XFC&dat);
	}else if(led1&&!led2&&led3)//101//1010
	{
		led_one(0XFA&dat);
	}else if(led1&&!led2&&!led3)//100 1110
	{
		led_one(0XFE&dat);
	}else if(!led1&&led2&&led3)//011  1001
	{
		led_one(0XF9&dat);
	}else if(!led1&&led2&&!led3)//010  1101
	{
		led_one(0XFD&dat);
	}else if(!led1&&!led2&&led3)//001  1011
	{
		led_one(0XFB&dat);
	}else if(!led1&&!led2&&!led3)///000
	{
		led_one(0XFF&dat);
	}
}

void led(void)
{
	switch(led_para)
	{
		case 4:led4 = 1;led5 = 0;led6 = 0;led7 = 0;led8 = 0;
			break;
		case 5:led4 = 0;led5 = 1;led6 = 0;led7 = 0;led8 = 0;
			break;
		case 6:led4 = 0;led5 = 0;led6 = 1;led7 = 0;led8 = 0;
			break;
		case 7:led4 = 0;led5 = 0;led6 = 0;led7 = 1;led8 = 0;
			break;
		case 8:led4 = 0;led5 = 0;led6 = 0;led7 = 0;led8 = 1;
			break;
	}
	
	if(time_para_value >= 8)
	{
		if((shijian[2] < 8)||(shijian[2] >= time_para_value))
		{
			led1 = 1;
		}else 
		{
			led1 = 0;
		}
	}else if(time_para_value < 8)
	{
		if((shijian[2] >= time_para_value)&&(shijian[2] < 8))
		{
			led1 = 1;
		}else 
		{
			led1 = 0;
		}
		
	}
	
	if(temperature < temp_para_value*10)//LED2亮
	{
		led2 = 1;
	}else if(temperature > temp_para_value*10)
	{
		led2 = 0;
	}
	
	if(liang_flag == 1)
	{
		led3 = 1;
	}else	if(mie_flag == 1)
	{
		led3 = 0;
	}
	
	if(light == 1)//暗
	{
		if(led4 == 1)
		{
			led_2(0XF7);
		}else if(led5 == 1)
		{
			led_2(0XEF);
		}else if(led6 == 1)
		{
			led_2(0XDF);
		}else if(led7 == 1)
		{
			led_2(0XBF);
		}else if(led8 == 1)
		{
			led_2(0X7F);
		}	
	}else if(light == 0)//亮
	{
		led_2(0XFF);
	}
}

void smg_display(int s1,int s2,int s3,int s4,int s5,int s6,int s7,int s8)
{
	dsbuff[0] = s1;dsbuff[1] = s2;dsbuff[2] = s3;dsbuff[3] = s4;
	dsbuff[4] = s5;dsbuff[5] = s6;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值