2012 年第四届全国电子专业人才设计与技能大赛(蓝桥杯)
“自动售水机”设计任务书
功能简述:
通过竞赛硬件平台模拟小区自动售水机的工作流程:通过按键控制售水机水流出和停止;
通过数码管显示费率、出水量及总费用;通过光敏电阻检测环境亮度,在亮度过低的情况下,
自动开灯。系统硬件电路主要由单片机控制电路、数码管显示电路、A/D 转换电路及功能按 键组成。系统框图如图 1 所示:
设计任务及要求
- 按键控制单元
设定按键 S7 为出水控制按键,当 S7 按下后,售水机持续出水(继电器接通,指示 灯 L10 点亮)。设定按键 S6 为停水控制按键,当 S6 按下后,停止出水(继电器断开, 指示灯 L10 熄灭)。
- 数码管显示单元
通过 4 位数码管 DS1 显示费率,单位为元/升,保留 2 位有效数字;通过 4 位数码管 DS2 显示当前出水总量(出水时,单位为升)和总价(停止时,单 位为元):按下出水按键 S7 后,清除数码管 DS2 显示数据,数码管 DS2 实时显示出水 量(保留两位有效数字),在出水状态下,再次按下 S7,不会影响出水状态,直到按下停 止按键 S6 为止;按下停止出水按键 S6 后,数码管 DS2 显示总价(保留两位有效数字)。
例:当 S7 按下后,数码管示意图如图 2 所示:
售水机出水状态数码管显示 当按键 S6 按下后,数码管示意图如图 3 所示:
3. AD 转换单元
通过光敏电阻 RD1 和 AD 转换芯片 PCF8591 组成的亮度检测电路(亮度值转换为 PCF8591 光敏电阻通道的电压)检测环境亮度;当 PCF8591 光敏电阻通道输入电压小 于 1.25 V 时,L1 点亮,大于 1.25V 时,L1 熄灭。
4. 系统说明
(1)假定水价为 0.5 元/升,出水速度为 100 毫升/秒;
(2)一次出水总量达到 99.99L 时,继电器自动断开,数码管显示 DS2 显示价格。
废话不多说,直接上代码:
#include <stc15f2k60s2.h>
#include <iic.h>
typedef unsigned int uint;
typedef unsigned char uchar;
#define s7 P30
#define s6 P31
uint a=0,num=0,zj=0,flag=0,ad;
uchar danjia[4]={
0xFF, 0x40, 0x92, 0xc0};
uchar smg[]= {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar smg_bit[8]={
0};
void Timer0Init(void) //10毫秒@11.0592MHz
{
AUXR &= 0x7F