第十五届蓝桥杯大赛电子赛第二批代码

#include <control.H>

uchar POS;
uchar devies_dly;
uchar key_num;
uchar tempreture;

uchar DAC_num = 100;
uchar DAC_write;
uchar real_num = 0;
uchar fu_num = 0;

uchar key12_flage=0;
uchar key13_flage;
uchar key16_flage;
uchar key17_flage;
uchar key130_flage;

bit Buzzer;
bit Relay;
bit led2;
bit led3;
bit led4;
//*******************************************
void devies_init() //外设初始化
{
//	if(devies_dly < 50) return;
//	else devies_dly = 1;
	tempreture = ds18b20_read_temp(0);
	if(real_num>=0 && real_num<=9) real_tempreture = tempreture+ real_num;
	if(real_num >= 247)real_tempreture = tempreture - fu_num;
}


//*******************************************
void smg_working(uchar channel) //显示任务
{
	switch(channel)  
	{
		case 1:  
			SMG[0] = 13;
			SMG[1] = 12;
			SMG[2] = 12;
		  SMG[3] = 12;
			SMG[4] = 12;
			SMG[5] = 12;
			SMG[6] = real_tempreture/10;
			SMG[7] = real_tempreture%10;
		break;
		
	  case 2: 
			SMG[0] = 14;
			SMG[1] = 12;
			SMG[2] = 12;
		  SMG[3] = 12;
			SMG[4] = 12;
			SMG[5] = DAC_num<100 ? 12 : DAC_num/100;
			SMG[6] = DAC_num<10 ? 12 : DAC_num/10%10;
			SMG[7] = DAC_num%10;
		break;
		
		case 3:  
			SMG[0] = 15;
			SMG[1] = 12;
			SMG[2] = 12;
		  SMG[3] = 12;
			SMG[4] = 12;
			SMG[5] = 12;
			SMG[6] = 12;
			SMG[7] = real_num%10;
		break;
				
		case 4:  
			SMG[0] = 15;
			SMG[1] = 12;
			SMG[2] = 12;
		  SMG[3] = 12;
			SMG[4] = 12;
			SMG[5] = 12;
			SMG[6] = 10;
			SMG[7] = fu_num%10;
		break;	
	}	
}

//*******************************************
void key_working()
{
	key_num = key_2x2_scan();
	switch(key_num)
	{               
			case 12: key12_flage = (1+key12_flage)%3;
		break;
			case 13: key13_flage = 1- key13_flage;
		break;
			case 16: 
				if(key12_flage == 0){ key16_flage = 1;key17_flage=0;}
			  else if(key12_flage == 1) key16_flage = 2;
			  else if(key12_flage == 2) key16_flage = 3;
		break;
			case 17: 
				if(key12_flage == 0) {key17_flage = 1;key16_flage=0; }
			  else if(key12_flage == 1) key17_flage = 2;
			  else if(key12_flage == 2) key17_flage = 3;
		break;
			case 130: key130_flage = 1- key130_flage;
		break;
	}
	
	if(key12_flage == 0){smg_working(1);}
	else if(key12_flage == 1)
	{
		smg_working(2);
		if(key16_flage == 2)
		{
			DAC_num = DAC_num + 5;
			if(DAC_num >= 255 && DAC_num <5) DAC_num = 255;
			key16_flage = 0;
		}
		if(key17_flage == 2)
		{
			if(DAC_num >=251) DAC_num = 0;
			DAC_num = DAC_num - 5;
			 key17_flage = 0;
		}
	}
	else if(key12_flage == 2) 
	{
		if(key16_flage == 3)
		{
			real_num = real_num + 1;
			if(real_num >=9 && real_num <247) real_num = 9;
			if(real_num>=247)fu_num = 256- real_num;
			key16_flage = 0;
		}
		if(key17_flage == 3)
		{
			real_num = real_num - 1;
			if(real_num>=247)fu_num = 256 - real_num;
			if(real_num >9 && real_num <= 247) real_num = 247;
		  key17_flage = 0;
		}
		
		if(real_num>=0 && real_num<=9) smg_working(3);
	  if(real_num>=247) smg_working(4);
	}	
	
	if(key13_flage == 0){DAC_write = (tempreture*1.0/10.0 + 1)*51;LED[0] = 1;}
	else if(key13_flage == 1){DAC_write = DAC_num; LED[0] = 0;}
	
	if(key130_flage == 0)
	{
		LED[7] = 1;
		if(key12_flage == 0)
		{
			if(key16_flage == 1) Relay = 1;
			if(key17_flage == 1) Relay = 0;
		}
	}
	if(key130_flage == 1){Relay = Relay;LED[7] = 0;}
}

//*******************************************
void task_working()
{
	devies_init();
  key_working();
	PCF8591_Write(0X40,DAC_write);
	
}

//*******************************************
void system_init()
{
  Timer0_Init();
	Timer1_Init();
	EA = 1;
	HC138_Init(0,0x00);
	HC138_Init(5,0x00);
	HC138_Init(4,0xff);
	ds18b20_read_begin();
}

//*******************************************
void Timer_server() interrupt 3
{
//	devies_dly ++;
	led_display(LED,POS);
	smg_display(SMG,DOT,POS);
	if(++POS == 8) POS = 0;
	Relay_Init(Relay);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小邓分享官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值