基于STC12C5A60S2系列1T 8051单片机的TM1637键盘数码管模块的数码管显示与TM1637芯片连接的按键的按键值应用
- STC12C5A60S2系列1T 8051单片机管脚图
- STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
- STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
- TM1637键盘数码管模块概述
- TM1637键盘数码管模块特性说明
- TM1637键盘数码管模块管脚定义
- TM1637键盘数码管模块管脚功能说明
- TM1637键盘数码管模块按键读取原理
- TM1637键盘数码管模块按键读取时序
- TM1637键盘数码管模块显示地址寄存器
- TM1637键盘数码管模块数据寄存器
- TM1637键盘数码管模块数据命令寄存器
- TM1637键盘数码管模块地址命令寄存器
- TM1637键盘数码管模块显示控制命令寄存器
- TM1637键盘数码管模块数码管显示按键扫描周期
- TM1637键盘数码管模块串行数据地址传输模式时序图
- TM1637键盘数码管模块程序设计流程图
- TM1637键盘数码管模块应用电路
- TM1637键盘数码管模块电气参数
- TM1637键盘数码管模块的数码管显示与TM1637芯片连接的按键的按键值编程
- TM1638键盘数码管模块的数码管显示与TM1637芯片连接的按键的按键值实验现象
STC12C5A60S2系列1T 8051单片机管脚图
STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
TM1637键盘数码管模块概述
TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集
成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、
空调 、家庭影院等产品的高段位显示屏驱动。
TM1637键盘数码管模块特性说明
• 采用功率CMOS 工艺
• 显示模式 10 段×8 位
• 键扫描(8×3bit)
• 辉度调节电路(占空比8 级可调)
• 串行接口(CLK,STB,DIO)
• 振荡方式:RC 振荡(450KHz+5%)
• 内置上电复位电路
• 采用SOP28封装
TM1637键盘数码管模块管脚定义
TM1637键盘数码管模块管脚功能说明
TM1637键盘数码管模块按键读取原理
TM1637键盘数码管模块按键读取时序
TM1637键盘数码管模块显示地址寄存器
TM1637键盘数码管模块数据寄存器
TM1637键盘数码管模块数据命令寄存器
TM1637键盘数码管模块地址命令寄存器
TM1637键盘数码管模块显示控制命令寄存器
TM1637键盘数码管模块数码管显示按键扫描周期
TM1637键盘数码管模块串行数据地址传输模式时序图
地址自动加1模式时序图
固定地址模式时序图
TM1637键盘数码管模块程序设计流程图
地址自动加1模式的程序设计流程图
固定地址模式的程序设计流程图
TM1637键盘数码管模块应用电路
TM1637键盘数码管模块驱动共阴数码管硬件电路
TM1637键盘数码管模块驱动共阳数码管硬件电路
TM1637键盘数码管模块电气参数
TM1637键盘数码管模块的数码管显示与TM1637芯片连接的按键的按键值编程
main.c
#include <stc12c5a60s2.h>
#include "Timer0.h"
#include "Key.h"
#include "Digitron.h"
#include "TM1637OfI2C.h"
#include"TM1637KeyProcess.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();//数码管开机显示函数
// TM1637AutomaticDisplay();//TM1637键盘数码管模块自动显示函数
while(1)//主循环
{
KeyScanResult();//按键扫描结果函数
}
}
TM1637OfI2C.c
#include "TM1637OfI2C.h"
//#include "Key.h"
//#include "Digitron.h"
#include"intrins.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
void Nop(uint i)//微妙延时函数
{
for(;i>0;i--)
_nop_();
}
void TM1637OfI2CStart()//TM1637键盘数码管模块开始函数
{
TM1637CLK = 1;//TM1637键盘数码管模块时钟线置高电平
TM1637DIO = 1;//TM1637键盘数码管模块数据线置低电平
Nop(2);//2微妙延时
TM1637DIO = 0;//TM1637键盘数码管模块数据线置低电平
}
void TM1637OfI2CAsk()//TM1637键盘数码管模块应答函数
{
TM1637CLK = 0;//TM1637键盘数码管模块时钟线置低电平
Nop(5);//5微妙延时 在第八个时钟下降沿之后 开始判断ACK信号
while(TM1637DIO);//等待TM1637键盘数码管模块数据线置低电平
TM1637CLK = 1;//TM1637键盘数码管模块时钟线置高电平
Nop(2);//2微妙延时
TM1637CLK = 0;//TM1637键盘数码管模块时钟线置低电平
}
void TM1637OfI2CStop()//TM1637键盘数码管模块停止函数
{
TM1637CLK = 0;//TM1637键盘数码管模块时钟线置低电平
Nop(2);//2微妙延时
TM1637DIO = 0;//TM1637键盘数码管模块数据线置低电平
Nop(2);//2微妙延时
TM1637CLK = 1;//TM1637键盘数码管模块时钟线置高电平
Nop(2);//2微妙延时
TM1637DIO = 1;//TM1637键盘数码管模块数据线置高电平
}
void TM1637OfI2CWriteByte(uchar OneByte)//TM1637键盘数码管模块写字节函数
{
uchar i;//声明字节个数变量
for(i = 0;i < 8;i++)//循环字节个数
{
TM1637CLK = 0;//TM1637键盘数码管模块时钟线置高电平
if(OneByte & 0x01)//取出字节最低位 如何取出字节最低位?为什么是&0x01?而不是|0x01?以两个数据的字节来说明 如:0000 0010 和 0000 0011 它们的最低位分别为0和1 &0x01后是0和1 也是它们的最低位0和1 如果|0x01后都是1 就再也不是它们原来的最低位0和1 所有不能|0x01 因为取不到字节原来的最低位数据
{
TM1637DIO = 1;//TM1637键盘数码管模块数据线置高电平
}
else//否则
{
TM1637DIO = 0;//TM1637键盘数码管模块数据线置低电平
}
Nop(3);//2微妙延时
OneByte = OneByte >> 1;//取出字节最低位后 剩余字节往右移一位 形成新的字节
TM1637CLK = 1;//TM1637键盘数码管模块时钟线置高电平
Nop(3);//2微妙延时
}
}
uchar TM1637ScanKey()//TM1637键盘数码管模块扫描按键函数
{
uchar i,Key;//声明循环变量 按键变量
TM1637OfI2CStart();//TM1637键盘数码管模块开始函数
TM1637OfI2CWriteByte(0x42);//TM1637键盘数码管模块读取按键
TM1637OfI2CAsk();//TM1637键盘数码管模块应答函数
TM1637DIO = 1;//TM1637键盘数码管模块数据线置高电平
for(i = 0;i < 8;i++)//循环取出按键变量一字节中八位二进制数
{
TM1637CLK = 0;//TM1637键盘数码管模块时钟线置低电平
Key = Key >> <