基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值的功能

基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值应用

  • STC12C5A60S2系列1T 8051单片机管脚图
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
  • TM1638键盘数码管模块概述
  • TM1638键盘数码管模块特性说明
  • TM1638键盘数码管模块管脚定义
  • TM1638键盘数码管模块管脚功能说明
  • TM1638键盘数码管模块按键读取原理
  • TM1638键盘数码管模块按键读取时序
  • TM1638键盘数码管模块显示地址寄存器
  • TM1638键盘数码管模块键扫数据寄存器
  • TM1638键盘数码管模块数据寄存器
  • TM1638键盘数码管模块数据命令寄存器
  • TM1638键盘数码管模块地址命令寄存器
  • TM1638键盘数码管模块显示控制命令寄存器
  • TM1638键盘数码管模块数码管串行数据传输
    • 数据接收(写数据)
    • 数据读取(读数据)
  • TM1638键盘数码管模块串行数据地址传输模式时序图
    • 地址自动加1模式时序图
    • 固定地址模式时序图
  • TM1637键盘数码管模块程序设计流程图
    • 地址自动加1模式的程序设计流程图
    • 固定地址模式的程序设计流程图
  • TM1638键盘数码管模块应用电路
    • TM1638键盘数码管模块驱动共阴数码管硬件电路
    • TM1638键盘数码管模块驱动共阳数码管硬件电路
  • TM1638键盘数码管模块电气参数
  • TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值编程
  • TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值实验现象

STC12C5A60S2系列1T 8051单片机管脚图

在这里插入图片描述在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

在这里插入图片描述在这里插入图片描述

TM1638键盘数码管模块概述

TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集
成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、
空调 、家庭影院等产品的高段位显示屏驱动。

TM1638键盘数码管模块特性说明

• 采用功率CMOS 工艺
• 显示模式 10 段×8 位
• 键扫描(8×3bit)
• 辉度调节电路(占空比8 级可调)
• 串行接口(CLK,STB,DIO)
• 振荡方式:RC 振荡(450KHz+5%)
• 内置上电复位电路
• 采用SOP28封装

TM1638键盘数码管模块管脚定义

在这里插入图片描述

TM1638键盘数码管模块管脚功能说明

在这里插入图片描述

TM1638键盘数码管模块按键读取原理

在这里插入图片描述在这里插入图片描述

TM1638键盘数码管模块按键读取时序

在这里插入图片描述

TM1638键盘数码管模块显示地址寄存器

在这里插入图片描述

TM1638键盘数码管模块键扫数据寄存器

在这里插入图片描述在这里插入图片描述

TM1638键盘数码管模块数据寄存器

在这里插入图片描述

TM1638键盘数码管模块数据命令寄存器

在这里插入图片描述

TM1638键盘数码管模块地址命令寄存器

在这里插入图片描述

TM1638键盘数码管模块显示控制命令寄存器

在这里插入图片描述

TM1638键盘数码管模块数码管串行数据传输

数据接收(写数据)

在这里插入图片描述

数据读取(读数据)

在这里插入图片描述

TM1638键盘数码管模块串行数据地址传输模式时序图

地址自动加1模式时序图

在这里插入图片描述

固定地址模式时序图

在这里插入图片描述

TM1637键盘数码管模块程序设计流程图

地址自动加1模式的程序设计流程图

在这里插入图片描述

固定地址模式的程序设计流程图

在这里插入图片描述

TM1638键盘数码管模块应用电路

TM1638键盘数码管模块驱动共阴数码管硬件电路

在这里插入图片描述

TM1638键盘数码管模块驱动共阳数码管硬件电路

在这里插入图片描述

TM1638键盘数码管模块电气参数

在这里插入图片描述在这里插入图片描述在这里插入图片描述

TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值编程

main.c

#include <stc12c5a60s2.h>
#include "Timer0.h"
#include "Key.h"
#include "Digitron.h"
#include "TM1638OfI2C.h"
//#include"intrins.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uintvoid PortModeSet()//端口模式设置函数
{P0M1 = 0x00;P0M0 = 0x00;P1M1 = 0x00;P1M0 = 0x00;P2M1 = 0x00;P2M0 = 0x00;P3M1 = 0x00;P3M0 = 0x00;P4M1 = 0x00;P4M0 = 0x00;}void main()//主函数
{PortModeSet();//端口模式设置函数
//  Uart1Init();//串行口1工作模式1的8位串行口波特率可变初始化函数 波特率为9600bps 晶振为12MHzTimer0Init();//定时器0的16位定时模式1用12分频定时2ms初始化函数 晶振为12MHzDigitronBootDisplay();//数码管开机显示函数TM1638OfI2CInit();//TM1638键盘数码管模块初始化函数 
//  TM1637AutomaticDisplay();//TM1637键盘数码管模块自动显示函数while(1)//主循环{ KeyScanResult();//按键扫描结果函数}}

TM1638OfI2C.c

#include "TM1638OfI2C.h"
//#include "Key.h"
//#include "Digitron.h"
#include"intrins.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uintvoid TM1638OfI2CWriteByte(uchar Data)//TM1638键盘数码管模块写字节函数
{uchar i;//声明字节位个数变量for (i = 0; i < 8; i++)//循环字节位个数{TM1638CLK = 0;//拉低TM1638键盘数码管模块时钟线端口 让TM1638键盘数码管模块进行输出字节某位操作TM1638DIO =  Data & 0x01;//取出该数据的字节最低位 如何取出该数据的字节最低位?为什么是&0x01?而不是|0x01?以两个数据的字节来说明 如:0000 0010 和 0000 0011 它们的最低位分别为0和1 &0x01后是0和1 也是它们的最低位0和1 如果|0x01后都是1 就再也不是它们原来的最低位0和1 Data >>= 1;//取出该数据的字节最低位后 剩余字节往右移一位 形成新的数据的字节TM1638CLK = 1;//拉高TM1638键盘数码管模块时钟线端口 结束TM1638键盘数码管模块输出字节某位操作}}void TM1638OfI2CWriteCommand(uchar Command)//TM1638键盘数码管模块写命令函数
{TM1638STB = 0;//拉低TM1638键盘数码管模块片选线端口 让TM1638键盘数码管模块进行写操作TM1638OfI2CWriteByte(Command);//通过TM1638键盘数码管模块写字节函数来写命令TM1638STB = 1;//拉高TM1638键盘数码管模块片选线端口 结束TM1638键盘数码管模块写操作}void TM1638OfI2CWriteData(uchar Address,uint Data)//TM1638键盘数码管模块写数据函数 在指定的显示地址写入数据
{TM1638STB = 0;//拉低TM1638键盘数码管模块片选线端口 让TM1638键盘数码管模块进行写操作TM1638OfI2CWriteByte(0x00 | Address);//通过TM1638键盘数码管模块写字节函数来写显示地址TM1638OfI2CWriteByte(Data);//通过TM1638键盘数码管模块写字节函数来写数据TM1638STB = 1;//拉高TM1638键盘数码管模块片选线端口 结束TM1638键盘数码管模块写操作}/***** uhar TM1638OfI2CReadByte()//TM1638键盘数码管模块读字节函数
{uchar i;//声明字节位个数变量uchar ByteData = 0;//声明字节数据变量TM1638DIO = 1;//拉高TM1638键盘数码管模块数据线端口 读入数据for(i = 0; i < 8; i++)//循环字节位个数{ByteData >>= 1;//字节数据往右移一位 形成新的数据的字节 如:1010 1010 右移一位 变为0101 0101TM1638CLK = 0;//拉低TM1638键盘数码管模块时钟线端口 让TM1638键盘数码管模块进行读取字节某位操作if(TM1638DIO)//判断TM1638键盘数码管模块数据线端口是否为高电平ByteData |= 0x80;//置该数据的字节最高位为1 其余位不变 如何置该数据的字节最高位为1?为什么是|=0x80?而不是&=0x80?以两个数据的字节来说明 如:0100 0000 和 1000 0000 它们的最高位分别为0和1 |=0x80后都是1 也是它们的最高位都置为1 如果&=0x80后最高位分别是0和1 就再也不是它们原来的最高位都置为1 TM1638CLK = 1;//拉高TM1638键盘数码管模块时钟线端口 结束TM1638键盘数码管模块读取字节某位操作}return ByteData;//返回字节数据}
*****/ /***** uchar TM1638OfI2CReadKey()//TM1638键盘数码管模块读按键函数
{uchar KeyByteArrary[4];//声明按键字节值数组变量uchar i;//声明按键字节值数组个数变量 uchar KeyValue = 0;//声明按键数值变量TM1638STB=0;//拉低TM1638键盘数码管模块片选线端口 让TM1638键盘数码管模块进行读操作TM1638OfI2CWriteByte(0x42); //设置TM1638键盘数码管模块的数据命令寄存器 写键扫数据命令 注意:这里要先写完4个字节键值才能将TM1638STB置1 否则写键值无效for (i = 0; i < 4; i++)//循环按键字节值数组中字节值个数 共有4个按键字节值KeyByteArrary[i] = TM1638OfI2CReadByte();//发送TM1638ReadByte(0x42)读键扫数据命令后 开始读取按键数据BYTE1—BYTE4共4个字节 从低位开始读取数据 TM1638键盘数码管模块上的K和KS引脚对应的按键按下时 相对应的按键字节值内的字节位为1TM1638STB=1;//拉高TM1638键盘数码管模块片选线端口 结束TM1638键盘数码管模块进行读操作for (i = 0; i < 4; i++)//循环按键字节值数组中字节值个数 共有4个按键字节值KeyValue |= KeyByteArrary[i] << i;//通过按键字节值循环取值来确定TM1638键盘数码管模块上的K引脚下对应的KS系列八个按键的前四个按键按键字节值   for (i = 0; i < 8; i++)//循环TM1638键盘数码管模块上的K引脚下对应的KS系列八个按键if ((0x01 << i) == KeyValue)//判断TM1638键盘数码管模块上的K引脚下对应的KS系列八

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++面向对象程序设计 - 输入和输出

程序的输入指的是文件将数据传送给程序&#xff0c;程序的输出指的是从程序将数据传送输出文件。 C的输入和和输出包括以下三个方面&#xff1a; 对系统指定的标准设备的输入和输出&#xff0c;即从键盘输入数据&#xff0c;输出到显示器屏幕。以外存磁盘&#xff08;或光盘、…

gdc2024:Raytracing in Snowdrop技术实现与性能优化策略

在今年的GDC&#xff08;游戏开发者大会&#xff09;的Advanced Graphics Summit上&#xff0c;关于Snowdrop引擎中光线追踪技术的讨论引起了广泛关注。 一、光线追踪全局照明的实现细节 屏幕空间追踪&#xff1a; 屏幕空间追踪从相机出发&#xff0c;对屏幕上的每个像素点生成…

C++ 红黑树

目录 1.红黑树的概念 2.红黑树的性质 3.红黑树节点的定义 4.红黑树的插入操作 5.数据测试 1.红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

C++基础与深度解析 | 泛型算法 | bind | Lambda表达式

文章目录 一、泛型算法1.泛型算法的分类2.迭代器分类 二、bind与lambda表达式1.bind2.lambda表达式 三、泛型算法的改进--ranges(c20) 一、泛型算法 C中的泛型算法是标准模板库&#xff08;STL&#xff09;的一部分&#xff08;这里重点讨论 C 标准库中定义的算法&#xff0c;而…

【vue-cli搭建vue项目的过程2.x】

vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件&#xff0c;并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…

数据结构~~链式二叉树

目录 一、基本概念 链式存储概念 二、链式二叉树的结构 链式二叉树结构 构建链式二叉树 二叉树的遍历 二叉树节点和高度等 二叉树销毁 三、链式二叉树的练习 相同的树 对称二叉树 另外一颗子树 二叉树前序遍历 二叉树遍历 四、完整代码 Tree.h Tree.c 五、总结 一…

Linux服务升级:Predixy 升级代理 Redis-cluster 集群

目录 一、实验 1.环境 2. 启动Redis服务 3.Predixy 升级代理 Redis-cluster 集群 二、问题 1. Predixy进行set操作报错 2.如何创建脚本启动predixy 3.Redis代理对比 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本节点软件IP备注CentOS7.9Redis…

Springboot开发 -- Postman 调试类型详解

引言 在 Spring Boot 应用开发过程中&#xff0c;接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具&#xff0c;可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…

C/C++|malloc分配内存详解

看本节前&#xff0c;希望读者有linux内存分布的基本概念&#xff0c;可以阅读这篇文章&#xff1a; 进程虚拟地址空间和函数调用栈 在本节中希望读者可以一口气阅读完所有内容。 本博客内容全部来自小林coding&#xff1a;malloc 是如何分配内存的&#xff1f; 这里仅为笔记记…

Linux/Ubuntu 中安装 ZeroTier,实现内网穿透,2分钟搞定

相信很多人都有远程连接家中设备的需求&#xff0c;如远程连接家中的NAS、Windows等服务&#xff0c;所以会涉及到一个内网穿透工具的使用&#xff0c;如果没有公网IP的情况下&#xff0c;推荐大家使用ZeroTier&#xff0c;这是一款强大的内网穿透工具。 mac和windows版的操作…

Nginx-狂神说

Nginx概述 公司产品出现瓶颈&#xff1f; 我们公司项目刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#xff0c;所以在低并发的情况下&#xff0c;一个jar包启动应用就够了&#xff0c;然后内部tomcat返回内容给用户。 但是慢慢的&#xff0c;使用我们平台…

K8S认证|CKA题库+答案| 13. sidecar 代理容器日志

目录 13、使用 sidecar 代理容器日志 CKA v1.29.0模拟系统免费下载试用&#xff1a; 题目&#xff1a; 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、生成yaml文件 3&#xff09;、官网找模板 4&#xff09;、编辑yaml文件 5&#xff09;、应用yaml…

车载电子电器架构 —— 智能座舱技术

车载电子电器架构 —— 智能座舱技术 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的…

GEO数据挖掘-GEO背景知识+表达芯片分析思路

From生物技能树 GEO数据挖掘第一节 &#xff08;pipeline&#xff09; 文章目录 1.图表分析2.GEO背景介绍及分析思路3.代码分析流程4.复杂数据分析理论知识1.数据从哪里来2.有什么类型的数据可挖掘3.如何筛选基因&#xff08;分析方法&#xff09;在这里插入图片描述 图表介绍1…

Jenkins + github 自动化部署配置

1 Jenkins安装 AWS EC2安装Jenkins&#xff1a;AWS EC2 JDK11 Jenkins-CSDN博客 AWS EC2上Docker安装Jenkins&#xff1a;https://blog.csdn.net/hhujjj2005/article/details/139078402 2 登录jenkins http://192.168.1.128:8080/ $ docker exec -it d1851d9e3386 /bin/ba…

Multi-objective reinforcement learning approach for trip recommendation

Multi-objective reinforcement learning approach for trip recommendation A B S T R A C T 行程推荐是一项智能服务&#xff0c;为游客在陌生的城市提供个性化的行程规划。 它旨在构建一系列有序的 POI&#xff0c;在时间和空间限制下最大化用户的旅行体验。 将候选 POI 添…

【Shell】sed编辑器实例

sed是用来解析和转换文本的工具&#xff0c;它使用简单&#xff0c;是简洁的程序设计语言。 sed编辑器 &#xff08;一&#xff09; sed编辑器基础1. 简介2. sed的模式空间 &#xff08;二&#xff09;基本的sed编辑命令&#xff08;三&#xff09;sed命令实例1. 向文件中添加或…

MFC GDI 绘图模式、映射模式、画笔、笔、字体

一 GDI 绘图模式&#xff08;RoP2 Mode&#xff09; 在使用VC MFC进行图形程序编程时&#xff0c;常会用到GDI绘图指令&#xff0c;而要做到绘图时有橡皮筋动态效果&#xff0c;就需设置GDI绘图模式。GDI绘图模式有多种&#xff0c;如下&#xff1a; 常用R2_NOT模式来实…

Linux|操作系统|如何下载各个版本的centos操作系统

前言&#xff1a; centos做为一个现在比较常用的Linux社区版本&#xff0c;还是比较受欢迎的&#xff0c;那么&#xff0c;如何下载centos的安装包&#xff0c;也就是centos的操作系统呢&#xff1f; 首先&#xff0c;我们应该知道硬件底层有aarch64&#xff0c;ppc64&#x…

【限免】短时傅里叶变换时频分析【附MATLAB代码】

来源&#xff1a;微信公众号&#xff1a;EW Frontier 简介 一种能够同时对信号时域和频域分析的方法——短时傅里叶变换&#xff08;STFT&#xff09;&#xff0c;可以在时频二维角度准确地描述信号 的时间、频域的局部特性&#xff0c;与其他算法不同&#xff0c;通过该算法可…