跳到主要内容

TM1638八位数码管和16矩阵键盘

一、实现功能

本篇章实现了Core外接一个包含8位数码管和16个按键的模块,每当按下不同的按键时,数码管上会有不同的显示。

该模块的主控芯片型号是TM1638,一款低成本的数码管和键盘专用驱动芯片,非常适用于IO口引脚数量偏少的芯片。

二、接线图

layout

三、材料清单

名称推荐购买链接(或者您可以自己制作)模块/芯片硬件资料下载
TM1638 8位数码管&16按键模块8位数码管&16按键模块下载地址
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

product

您可以根据上面提供的硬件资料里的原理图,自己裁剪定制一款数码管和按键模块,但需要注意的是:

  • 数码管的个数可以少于或等于8个,但不要超过8个
  • 您需要保证显示的数字最多有效位数不超过数码管的位数
  • 按键的个数可以少于或等于16个,但不要超过16个

四、完整代码

--配置数码管矩阵键盘模块的引脚DIO,CLK,STB分别占用Core的D7,D6,D5引脚,并开始工作
LIB_SegLedsAndMatrixKeysConfig("D7","D6","D5")
--开始大循环
while(GC(1) == true)
do
--查询矩阵键盘是否有按键按下
keypress_flag,key_pos = LIB_MatrixKeysRead()
if keypress_flag == 1 then
--如果按键S1按下
if key_pos == 1 then
--数码管显示0.001,"3"表示有3个小数
LIB_SegLedsWrite(1, "3", "LEVEL1")
--如果按键S2按下
elseif key_pos == 2 then
--数码管显示-0.002,"3"表示有3个小数
LIB_SegLedsWrite(-2, "3", "LEVEL3")
else
--剩下的14个按键,当每个按键按下时,数码管会显示每个按键的整数值(3-16),
--并且显示的亮度也是最亮的LEVEL8等级
LIB_SegLedsWrite(key_pos, "0", "LEVEL8")
end
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

五、代码运行结果

下图是当按下按键S1时,数码管上显示的0.001效果

result