2012年蓝桥杯第3届单片机省赛真题——“售水机”

题目

代码

底层代码是直接运用官方提供的指导书配套的代码。

为了便于修改,此次编程运用了模块化编写。

主函数

void main(void)
{
	banzi_Init();
	Time0_Init();
	Timer1Init();
	while(1)
	{
		Seg_Work();
		Key_Work();
		Led_Work();
	}
}

 数码管显示

void Seg_Work(void)
{
	if(Seg_Delay) return;
	Seg_Delay=1;
	
	if(Mode_Set==0)  //S6
	{
		sprintf(Seg_Buf," %03.2f%05.2f",Money,Money_Sum);
	}
	else if(Mode_Set==1)  //S7
	{
		sprintf(Seg_Buf," %03.2f%05.2f",Money,Water_Sum);
	}
	Seg_Tran(Seg_Buf,Seg_Code);
}

按键处理(独立按键BTN)

void Key_Work(void)
{
	if(Key_Delay) return;
	Key_Delay=1;
	
	Function();
	if(P30==0) //s7
	{
		Delay(10);
		if(P30==0)
		{
			Mode_Set=1;
			Water_ml=0;
			Money_Sum=0;
			P0=0x10;
			P2 = (P2 & 0x1F) | 0xA0;  //继电器开
			P2 &= 0x1f;
		}
	}
	
	if(P31==0) //s6
	{
		Delay(10);
		if(P31==0)
		{
			Mode_Set=0;
			Water_Sum=0;
			P0=0;
			P2 = (P2 & 0x1F) | 0xA0;  //继电器关
			P2 &= 0x1f;
		}
	}
	if(Water_ml==99990)
	{
		Mode_Set=0;
		P0=0;
		P2 = (P2 & 0x1F) | 0xA0;  //继电器关
		P2 &= 0x1f;
	}
}

 LED灯

void Led_Work(void)
{
	if(Led_Delay) return;
	Led_Delay=1;
	
	ADC_Num=Read_ADC();
	if(ADC_Num/51.0 < 1.25)
	{
		P0=~0x01;
		P2 = (P2 & 0x1F) | 0x80;  //灯
		P2 &= 0x1f;
	}
	else if(ADC_Num/51.0 > 1.25)
	{
		P0=0xff;
		P2 = (P2 & 0x1F) | 0x80;  //灯
		P2 &= 0x1f;
	}
}

中断处理

void Time0() interrupt 1
{
	TL0 = 0x18;		//1ms
	TH0 = 0xFC;	
	
	
	if(++Seg_Delay==500) Seg_Delay=0;
	if(++Key_Delay==10) Key_Delay=0;
	if(++Led_Delay==200) Led_Delay=0;
		
	Seg_Dis(Seg_Code,smgwei);
	if(++smgwei==8) smgwei=0;
}

void Time1() interrupt 3
{
	TL1 = 0x18;		//1ms
	TH1 = 0xFC;	
	
	if(Mode_Set==1 && Water_ml<99990) Water_ml = Water_ml + 0.1;
}

数据处理

void Function(void)
{
	Water_Sum=Water_ml/1000.0;
	Money_Sum=0.0005*Water_ml;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值