打地鼠的逻辑
打地鼠的逻辑很简单:我点亮某个LED,然后开始计时。如果在规定的时间内按下了LED对应的按键,那么加分,点亮下一个LED。按错按键,或者规定时间内没有按下,则减命,点亮下一个LED。
那么如何点亮某个LED?如何检测按键是否按下呢?
我选择了一款带LED的按键。大小是12mm乘12mm,用手指按大小正好,手感也不错,就是有一点,真贵。
淘宝就1块钱了,我找的中发配单就更贵了。并且其实吧,,,,,灯和按键完全是分开的!两个器件,凑到一块了而已。
我把按键做成了一个集成库的封装。原理图就是这个样子:
SLED接到单片机的引脚上,只要单片机引脚给低电平,就能点亮LED。不同颜色的灯限流电阻值大小不一样,根据亮度稍微试一下就行。
SKEY也接到了单片机上,由于STM32可以设置为内部上拉输入,所以不需要外接上拉电阻。按键按下去以后,SKEY接到GND上。也就是没按下按键的时候,SKEY是高电平,按下按键以后,SKEY是低电平。
供电设计
电脑的USB口就是5V供电,所以生活中很容易得到5V的电源,我用microUSB来供电。就是以前的安卓充电头,不是快充那种。
除此之外,预留了插针P3,也可以改造为电池供电,4.5V,6V都可以工作。供电芯片是LDO,电源的质量比较有保障。
为了方便调试,也可以用Jlink OB供电和下载程序。板子预留了SWD下载方式,相对于JLink V8,OB便宜多了。并且的Jlink OB还送了一根microUSB线。
为了避免马大哈接错电源正负极,烧坏板子,电源部分用F1和D4的配合做了防反接设计。如果VCC_IN和GND接反了,那么D4导通,大电流通过保险丝,保险丝瞬间断开,保护电路。保险丝同志是不是因此牺牲了?并不,我们用的是自恢复保险丝,在通过高电流时并不是烧坏,而是变为“高阻态”,等故障排除以后,重新变为“低阻态”。在接线正常的情况下,D4反向截止,相当于断路。
D5是个TVS管,用于防静电,它有个特点,在它感受到两侧收到反向瞬态高能量冲击时,可以很块变为低阻抗,吸收高达数千瓦的浪涌功率,使两极间的电压箝位于一个预定值,有效地保护电子线路中的精密元器件,免受各种浪涌脉冲的损坏。 简单来说,就是它两端的电压不能超过这个预设值。而人体带的静电通常超过几百伏特,击穿小小的掌机轻而易举,所以,要加防护。再加上我这霹雳贝贝的体质,曾经玩无人机的时候,第一次触摸无人机就把主控芯片击穿了,累积击穿的器件估计超过1000块了,所以来个大只的TVS管,SMB封装,妥妥的。
屏幕显示设计
考虑到显示分数的需求,选用了一款0.96寸的OLED屏幕。这个屏幕应用很广泛,某宝上有很多,买来模块,通过杜邦线连接就能用。
而我把OLED画到PCB上了,因为对于我来说,可能画个PCB比接线还省事。实际上在企业里,几乎没有人用开发板,也没人用杜邦线跳来跳去接线。
至于具体的电路设计——太多了,我去网上找了几个方案,综合了一下,把IIC与SPI两种接口都保留了,图纸如下。
不过,,,后来发现屏幕可能太小了,0.96寸打个俄罗斯方块都有点费劲。以后要是升级的话,可以考虑1.44寸,还能全彩。话说,屏幕哪有够用的时候,做手机的那帮人想做个全面屏,刘海屏,水滴屏,都快疯了。
蜂鸣器的设计
用过蜂鸣器的同学可能都会有一个疑问,到底选用有源蜂鸣器,还是无源蜂鸣器?
这里的源指的不是电源,而是震荡源。有源蜂鸣器内部有震荡源,通电就会叫,控制起来很简单,也贵一些。无源蜂鸣器没有内部震荡源,便宜一些,不能通电就叫。
那么无源蜂鸣器怎么工作?写程序来控制引脚的电平变化周期,看似用起来复杂一点,其实能玩的花样就多得多了,频率可控,也就是音调可控,音调可控,那就唱歌呗。听说,只要采集人声,分析人声的频率,然后以极快的速度发送给蜂鸣器,蜂鸣器就可以模拟人声了。潜力无限啊。我们当然要选无源的蜂鸣器了。
以后让代码来播放背景音乐。也可以把掌机作为点唱机,按下某个按键,就播放某个音乐。虽然是简陋的电子音,但是,可以展现工科生的浪漫啊!
蜂鸣器算是大功率器件了,引脚不能直接驱动,要借助三极管。R22是个下拉电阻,可以让蜂鸣器在默认状态下不要发出声音。BEEP输出高电平时,三极管导通,蜂鸣器发出声音。但是由于是无源蜂鸣器,只能响一声;需要BEEP输出低电平,然后再输出高电平,才可以继续发出声响。
其实无源蜂鸣器没有正负极,引脚的状态不用太在意。
说到有源和无源了,晶振也分有源和无源。一般情况下,没有特殊要求的晶振,用的都是无源的。
整体电路设计大概就是这样,基本上就是最小系统板+OLED+带灯按键。