1. 项目背景与需求解析
2014年江西省电子专题赛的这道现场制作题目,将传统摇奖机的机械结构电子化,要求选手在限定时间内完成一套基于触摸控制的单数字随机显示系统。这类题目在省级电子竞赛中具有典型性——既考察基础电路搭建能力,又检验选手对数字逻辑和随机数生成原理的理解。
从技术需求来看,这个"触摸式一位数显摇奖机"需要实现三个核心功能:
- 触摸输入检测(替代传统机械按钮)
- 伪随机数生成算法实现
- 单数字显示控制
特别值得注意的是题目括号中的"显"和"号"字标注,这提示显示部分需要采用数码管(而非LCD等显示模块),且生成的随机数限定在0-9范围内。这种细节往往是竞赛评分的关键点。
2. 硬件系统设计方案
2.1 核心器件选型
基于2014年电子竞赛的常见物料清单,推荐采用以下硬件配置:
- 主控芯片:STC89C52RC(当时主流51单片机,内置4KB Flash)
- 触摸检测:TTP223电容式触摸芯片(单通道,工作电压2.0-5.5V)
- 显示器件:共阳一位数码管(型号如5461AS)
- 驱动电路:74HC245总线驱动器(增强数码管驱动能力)
- 辅助元件:10kΩ上拉电阻、104瓷片电容等
注意:实际比赛时应以现场提供的物料为准,此处方案为典型配置参考。若使用其他单片机(如STM32)需注意IO口电平匹配问题。
2.2 电路原理详解
2.2.1 触摸检测电路
TTP223芯片的典型应用电路如图:
code复制VCC ----[10kΩ]---- TOUCH_PAD
|
C1 (10pF-50pF)
|
GND ------------+
触摸灵敏度通过电容C1调节,输出信号直接连接单片机外部中断引脚(如P3.2/INT0)。当检测到触摸时,TTP223输出高电平脉冲(持续时间可调)。
2.2.2 显示驱动电路
采用74HC245驱动数码管的接法:
code复制P0口 ---- 74HC245 A端
74HC245 B端 ---- 数码管段选
P2.0 ---- 数码管位选
这种设计解决了51单片机P0口驱动能力不足的问题。若使用共阳数码管,段选信号需反向(或程序中取反)。
3. 软件实现关键点
3.1 随机数生成算法
在嵌入式系统中,真正的随机数难以实现。本设计采用改良的线性同余算法:
c复制unsigned char seed = 0;
unsigned char rand_num() {
seed = (seed * 13 + 17) % 10; // 参数选择质数可提高随机性
return seed;
}
实操技巧:利用定时器计数器(如TH0)的随机性初始化seed值:
c复制seed = TH0 % 10;
3.2 主程序流程图
plaintext复制开始
├─ 初始化定时器、中断
├─ 主循环:
│ ├─ 检测触摸标志位
│ └─ 无操作时显示"-"
└─ 中断服务程序:
├─ 清除触摸标志
├─ 生成随机数
└─ 启动显示刷新
3.3 数码管显示优化
采用动态扫描方式减少功耗:
c复制void display(unsigned char num) {
P2 = 0xFE; // 选中第一位
P0 = ~digit[num]; // 输出段码(共阳取反)
delay_ms(2); // 保持2ms
P0 = 0xFF; // 消隐
}
4. 现场调试经验
4.1 常见问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 触摸无反应 | 1. TTP223供电异常 2. 灵敏度电容值不当 |
1. 检查VCC-GND电压 2. 更换22pF-47pF电容 |
| 显示乱码 | 1. 段码表错误 2. 驱动芯片方向控制 |
1. 验证共阳/共阴配置 2. 检查74HC245 DIR引脚 |
| 数字不变化 | 随机数种子未更新 | 添加定时器种子初始化 |
4.2 省时技巧
- 模块化测试:先单独验证触摸电路(用LED指示),再测试显示部分
- 利用开发板资源:若允许,可先用开发板验证核心算法
- 预装标准库:准备好数码管驱动、延时函数等常用代码片段
5. 评分要点分析
根据电子竞赛评分惯例,本项目主要考察:
-
基本功能实现(60分):
- 触摸控制有效
- 随机数生成符合要求
- 显示稳定无闪烁
-
电路设计规范(20分):
- 原理图绘制标准
- 布线整齐合理
- 器件选用恰当
-
创新与优化(20分):
- 添加启动动画
- 实现连按加速功能
- 低功耗设计
6. 进阶改进方向
对于有余力的选手,可以考虑:
- 增加声光效果:使用PWM控制蜂鸣器音调,随机数越大音调越高
- 添加历史记录:通过24C02存储最近10次摇奖结果
- 多模式切换:通过长按切换0-9/1-6(骰子模式)
实际比赛中,建议优先保证基础功能完整,再考虑扩展功能。我曾见过有选手为追求特效导致基础分丢失,得不偿失。稳妥的做法是在主程序完成后,保留30分钟进行创新功能开发。