基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与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键盘数码管模块的数码管显示与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键盘数码管模块电气参数
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//自定义无符号整数型为uint
void 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 晶振为12MHz
Timer0Init();//定时器0的16位定时模式1用12分频定时2ms初始化函数 晶振为12MHz
DigitronBootDisplay();//数码管开机显示函数
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//自定义无符号整数型为uint
void 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键盘数码管模块写操作
}
uchar TM1638OfI2CReadByte()//TM1638键盘数码管模块读字节函数
{
uchar i;//声明字节位个数变量
uchar ByteData = 0;//声明字节数据变量
TM1638DIO = 1;//拉高TM1638键盘数码管模块数据线端口 读入数据
for(i = 0; i < 8; i++)//循环字节位个数
{
ByteData >>= 1;//字节数据往右移一位 形成新的数据的字节 如:1010 1010 右移一位 变为0101 0101
TM1638CLK = 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