电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
【雕爷学编程】Arduino动手做(102)---TM1638按键数码管
分 享
扫描二维码分享
【雕爷学编程】Arduino动手做(102)---TM1638按键数码管
雕爷学编程
雕爷学编程
关注
发布时间: 2022-06-10
丨
阅读: 727
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 #### 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) #### 实验一百零二:TM1638按键数码管LED显示模组8位数码管\LED\按键智控模块 ![](https://cf02.ickimg.com/bbsimages/202206/eaef0e7dd1185f19d17eab39a155e15c.jpg) TM1638 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。本模块质量可靠、稳定性好、抗干扰能力强。主要应用于冰箱、空调 、家庭影院等产品的高段位显示屏驱动。 ![](https://cf02.ickimg.com/bbsimages/202206/8338456321d388618bc1b0f8c2818c48.jpg) TM1638 1、采用CMOS 工艺 2、显示模式 10段×8 位 3、键扫描(8×3bit) 4、辉度调节电路(占空比8 级可调) 5、串行接口(CLK,STB,DIO) 6、振荡方式:RC 振荡 7、内置上电复位电路 8、封装形式:SOP28 ![](https://cf02.ickimg.com/bbsimages/202206/a60eb303a12b34677bc112e67b3dddc5.gif) ![](https://cf02.ickimg.com/bbsimages/202206/aa919e481bd5a3d5498221a5ae496eaa.jpg) ![](https://cf02.ickimg.com/bbsimages/202206/1047e76ee8bb7a53a6225ca65927ad9c.jpg) ![](https://cf02.ickimg.com/bbsimages/202206/62d0bbffade30fe4ce3cfe1b09c6619a.jpg) ![](https://cf02.ickimg.com/bbsimages/202206/6c7c10a7e42bf9f1b277b6dda4d0024d.jpg) ![](https://cf02.ickimg.com/bbsimages/202206/b9b355bb9713dfc3b82192485f1723d1.gif) ![](https://cf02.ickimg.com/bbsimages/202206/b4222aab210b8bacd0be93d7b76ddefd.jpg) 模块功能介绍,包括以下资源: 1、8个按键, 2、8个LED 3、8位数码管,共阴极LED数码管; 4、可以和STC等单片机直接连接; 5、开始实验ardiuno驱动程序 ![](https://cf02.ickimg.com/bbsimages/202206/a122ce7b8202103c5754003efb5deac8.jpg) 模块电原理图 ![](https://cf02.ickimg.com/bbsimages/202206/3002158a7b4d1f582bb0e46a07e4c029.jpg) 该模块所用芯片为TM1638,集合了单片机常见外围电路,最大特点是只需占用单片机三个IO口即可驱动,扫描显示和按键扫描不需要单片机干预,只需要读写相关寄存器送显示数据或检测按键,节省MCU资源。试想下,我们平时使用单片机外接8个LED,8位数码管,8个按键这需占用多少个IO口,远不止3个IO口吧,但用这个模块就可以实现。经实际应用,按键灵敏显示效果良好。 接线方法: VCC GND接5V电源, STB CLK DIO接单片机IO口。 ![](https://cf02.ickimg.com/bbsimages/202206/bfecf8c8458b02256d458e25f5473318.jpg) ![](https://cf02.ickimg.com/bbsimages/202206/bb87242082d28aa2a0a9ec0671dff7a6.jpg) 实验程序一:TM1638模块的演示文件库(LED和键) (1)Arduino参考开源代码 ```cpp /@@* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百零二: TM1638按键数码管LED显示模组8位数码管\LED\按键智控模块 1、安装库:IDE-工具-管理库-搜索TM1638plus-安装 2、项目:TM1638模块的演示文件库(LED和键) 3、接脚: VCC → 5V GND → GND STROBE_TM D4 CLOCK_TM D6 DIO_TM D7 */ #include
// GPIO I/O pins on the Arduino connected to strobe, clock, data, //pick on any I/O you want. #define STROBE_TM 4 #define CLOCK_TM 6 #define DIO_TM 7 //Constructor object TM1638plus tm(STROBE_TM, CLOCK_TM , DIO_TM); void setup() { // Test 0 reset test tm.setLED(0, 1); delay(1000); tm.reset(); // Test 1 Brightness and reset for (uint8_t brightness = 0; brightness < 8; brightness++) { tm.brightness(brightness); tm.displayText("00000000"); delay(1500); } tm.reset(); // restore default brightness tm.brightness(0x02); //Test 2 ASCII display 2.348 tm.displayASCIIwDot(0, '2'); tm.displayASCII(1, '3'); tm.displayASCII(2, '4'); tm.displayASCII(3, '8'); delay(2000); //TEST 3 single segment //In this case segment g (middle dash) of digit position 7 tm.display7Seg(7,0b01000000); delay(2000); // Test 4 Hex digits. tm.displayHex(0, 1); tm.displayHex(1, 2); tm.displayHex(2, 3); tm.displayHex(3, 4); tm.displayHex(4, 5); tm.displayHex(5, 6); tm.displayHex(6, 7); tm.displayHex(7, 8); delay(2000); tm.displayHex(0, 8); tm.displayHex(1, 9); tm.displayHex(2, 10); tm.displayHex(3, 11); tm.displayHex(4, 12); tm.displayHex(5, 13); tm.displayHex(6, 14); tm.displayHex(7, 15); delay(2000); // Test 5 TEXT with dec point // abcdefgh with decimal point for c and d tm.displayText("abc.d.efgh"); delay(3000); // Test6 TEXT + ASCII combo // ADC=2.548 char text1[]= "ADC=."; tm.displayText(text1); tm.displayASCIIwDot(4, '2'); tm.displayASCII(5, '5'); tm.displayASCII(6, '4'); tm.displayASCII(7, '8'); delay(2000); //Test 7 buttons and LED test tm.displayText("EAGLER8 "); } void loop() { uint8_t buttons = tm.readButtons(); doLEDs(buttons); } // scans the individual bits of value void doLEDs(uint8_t value) { for (uint8_t position = 0; position < 8; position++) { tm.setLED(position, value & 1); value = value >> 1; } } ``` (2)实验场景图 ![](https://cf02.ickimg.com/bbsimages/202206/7a6cb4f3df4e8abeddc4563550a1234b.jpg) 实验程序二:自锁LED,按键计数器 (1)Arduino参考开源代码 ```cpp /@@* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百零二: TM1638按键数码管LED显示模组8位数码管\LED\按键智控模块 1、安装库:IDE-工具-管理库-搜索TM1638-安装 2、项目:自锁LED,按键计数器 3、接脚: VCC → 5V GND → GND STROBE_TM D4 CLOCK_TM D6 DIO_TM D7 */ #define DATA_COMMAND 0X40 #define DISP_COMMAND 0x80 #define ADDR_COMMAND 0XC0 //TM1638模块引脚定义 int DIO = 7; int CLK = 6; int STB = 4; //这里定义了那三个脚 //共阴数码管显示代码 unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; unsigned char num[8]; //各个数码管显示的值 void setup () { pinMode(STB,OUTPUT); pinMode(CLK,OUTPUT); pinMode(DIO,OUTPUT); //让三个脚都是输出状态 } void loop() { unsigned char i; init_TM1638(); //初始化TM1638 for(i=0;i<8;i++) Write_DATA(i<<1,tab[0]); //初始化寄存器 while(1) { i=Read_key(); //读按键值 if(i<8) { num++; while(i==Read_key()); //等待按键释放 if(num>15) num=0; Write_DATA(i*2,tab[num]); Write_allLED(1<
>=1; digitalWrite(CLK,HIGH); } } unsigned char TM1638_Read(void) //读数据函数 { unsigned char i; unsigned char temp=0;; pinMode(DIO,INPUT);//设置为输入 for(i=0;i<8;i++) { temp>>=1; digitalWrite(CLK,LOW); if(digitalRead(DIO)==HIGH) temp|=0x80; digitalWrite(CLK,HIGH); } return temp; } void Write_COM(unsigned char cmd) //发送命令字 { digitalWrite(STB,LOW); TM1638_Write(cmd); digitalWrite(STB,HIGH); } unsigned char Read_key(void) { unsigned char c[4],i,key_value=0; digitalWrite(STB,LOW); TM1638_Write(0x42); //读键扫数据 命令 for(i=0;i<4;i++) { c=TM1638_Read(); } digitalWrite(STB,HIGH); //4个字节数据合成一个字节 for(i=0;i<4;i++) { key_value|=c<
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
雕爷学编程
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交