蓝桥杯第3届省赛(单片机)_自动售水机

本文介绍了蓝桥杯第三届省赛中的单片机自动售水机题目,涵盖按键控制、数码管显示和AD转换三个关键部分。通过按键S7与S6控制出水和显示水价,数码管显示借助定时器更新,AD转换利用IIC与PCF89C51交互。代码包括time、smg、key和iic等模块,虽存在小bug,但基本满足比赛要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蓝桥杯第3届省赛(单片机)_自动售水机

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这是2012年蓝桥杯的省赛的题目,也是单片机第一次加入蓝桥杯比赛系列,由于是初次加入蓝桥杯,所以这次比赛的自动售水机的题目(自动售水机)也比较简单,主要考察了IIC,独立按键,数码管显示,继电器和AD转化

题目讲解

刚拿到比赛题目时我们首先要看清楚每次比赛对我们的要求,一般比赛的主要要求都会在设计任务及要求这一部分,所以看懂这一部分尤为重要,在这次的比赛设计比赛要求中,比赛方要求我们实现三大部分

1.按键控制单元
2.数码管显示
3.AD转化

那么我们现在就对这三部分进行讲解吧!

按键控制单元

有题可知,但我们按下S7这按钮时,数码管的DS2部分开始出水(也就是说S7按下时,DS2部分开始数据变化,开始显示出水毫升),当然在系统说明部分也告诉我们最大只可显示9999,并且S7按下时继电器是打开的——L10打开,所以当我们写代码的时候我们些S7按键控制的变量也要与继电器相联系。
同样S6也是,按下S6时,DS2部分显示我们的水价,而且继电器断开——L10熄灭。

数码管显示

数码管显示部分我认为是这道题里最简单的,当按键**S7,S6,**不同时,其数码管显示的也不同,当要记住,DS1部分是不变的,而且数码管在这里的数据变化我认为只要在定时器里加个变量连来改变就行了(可能有点模糊下面的代码我会详细讲解的,其实很简单的)

AD转化

这里主要涉及的是IIC的知识,通过IIC控制PCF89C51来控制光密电阻的电压从而控制led1的亮闪,其实也不难,只要把底层驱动代码修改一下就行了,然后再把相应的函数加到main函数就行。

代码

time.c

#include "time.h"

void Timer0Init(void)		//1毫秒@12.000MHz
{
   
   
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA=ET0=1;    //打开定时器中断
}

(在这里我喜欢用12Mhz,因为比较精确)

time.h

#ifndef _TIME_H_  //格式——.h
#define _TIME_H_  //格式——.h

#include <STC15F2K60S2.H>
void Timer0Init(void); 

#endif    //格式——.h

smg.c

# include "smg.h"

unsigned char code tab []={
   
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//这里主要是小数部分
unsigned char  dspbuf[8]={
   
   10,10,10,10,10,10,10,10};

void smg_display(void)
{
   
   
   static unsigned char i;   //静态变量
	
	P0=0XFF;
	P2=(P2&0X1F)|0XE0;   //关闭段选
	P2&=0X1F;
	
	P0=(1<<i);          //自左移i,== (0X01<<i)
	P2=(P2&0X1F)|0XC0;   //打开位选
	P2&=0X1F;
	
	P0=tab[dspbuf[i]];   //打开段选
	P2=(P2&0X1F)|0XE0;
	P2&=0X1F;
	
	if(
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值