本帖最后由 就是我 于 2023-9-13 15:12 编辑
前言
十多年前,我在看了 『小七来误人子弟啦』通俗话教你单片机 这篇帖子后第一次接触了编程和单片机开发,也因此结识了很多当时还在读初中、拿不出几个零花钱但抱着极大热情省吃俭用穷折腾的爱好者朋友们。虽然后来因为研究领域的专精,大家已经很少在论坛活动了;但毕竟作为梦开始的地方,对我爱单片机这个地方还是怀有特别感情的。
前几天的时候公司在盘点报废设备,我看到一些设备里有不少很好看的屏幕便想着拆下来驱动起来一睹芳容。但因为这些屏幕都是 5V 电平的,目前市面上的 Linux 单板机毫无例外都是 3.3V 电平,添加电平转换电路或者模块又感觉有失优雅。而其他类似 STM32 一类的裸机系统板我又根本不会玩,所以决定直接用十年前的入门老技术 C51 来驱动屏幕。
那么在一切开始之前,我需要一个最小系统才能让单片机跑起来。
换做是小时候肯定得精打细算:一块 STC12C5A60S2,两个 30pf 电容,一个晶振,最后芯片座、排针、LED 一类的东西安排好,最后焊在洞洞板上。
但现在人懒了,也宽裕了,所以购入了一块在小时候看来遥不可及的 51 单片机丐版开发板,虽然性能不咋地,但通电开机一把梭直接用就好。(8 位单片机还追求个锤子性能啊)
这种功能不多的开发板其实我还是蛮喜欢的,比要你命3000那种的一大堆板上资源的看上去好看很多。但这样的小板可能唯一缺点就是真拿来学习的话可能会有点捉襟见肘吧。
可惜板子到手才发现我还没办法直接驱动那些拆下来的液晶屏。这些屏幕若非需要额外的电路,便是需要外接电位器调节对比度。
而我在这个订单里连公头杜邦线或者面包线都没有。那么在其他零件到货之前我先整个活,熟悉熟悉扔下快十年的单片机开发吧!
我现在的主力语言是 C# 和 JavaScript/TypeScript;C语言,尤其是嵌入式的充满位操作、没有什么库可以用、简单质朴的 C 早就被我抛到九霄云外了。可能一上来就驱动稀奇古怪的 LCD 确实会有点无所适从,那么趁其他快递到货之前,就从这个开发板上的板上资源开始动手重新入门也许是最好的选择。
所以我选用了P1 口低四位和 P0 口一起驱动的段码屏、P1 口高四位的上下左右按钮、P2 口的流水灯、P3 口上三个 IO 上的 DS1302 RTC 芯片来完成一个简单而充实的制作,一个榨干板上所有资源的,断电就不能继续走时的电子钟(x
正篇
虽说榨干了板上所有的资源,但这电子钟就像开发板本身一样简单质朴的很。 不过 SPI 接口的实时时钟,基于 STC 特有的定时器 2 中断实现的流水灯,动态刷新数码管;感觉入门该了解的东西都在了。
因为没有用来维持走时的电池,所以每次上电 DS1302 都会被初始化到默认的时间去,根本不像一个正经电子钟该有的样子。
至于其他的功能细节... - 下面的八个流水灯每秒跑一次,模拟秒针的跳动。
- 最下面的五颗按钮。其中中间的 K5 和 DS1302 引脚冲突了不能用。上下按钮负责调整数字,左右按钮负责切换小时和分钟
- 接通蜂鸣器后,可以听到 1Hz 的滴答声
- 可在源码配置使用串口输出时间,默认只输出上电欢迎语
按下按钮即时进入校时模式,无操作五秒后自动恢复走时。
校时时流水灯两个灯常亮在右侧表示正在调整分钟,反之左侧则表示正在调整小时。
至此,板上的所有资源都利用起来了。所有的按键,所有的灯,所有的芯片都没闲着。
代码写的很随便。但是如果大家手上有差不多的同款开发板,下载一份到板里跑跑也算废物利用...吧?
|