基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值应用
- 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键盘数码管模块串行数据地址传输模式时序图
-
- 地址自动加1模式时序图
- 固定地址模式时序图
- TM1637键盘数码管模块程序设计流程图
-
- 地址自动加1模式的程序设计流程图
- 固定地址模式的程序设计流程图
- TM1637键盘数码管模块应用电路
-
- TM1637键盘数码管模块驱动共阴数码管硬件电路
- TM1637键盘数码管模块驱动共阳数码管硬件电路
- TM1637键盘数码管模块电气参数
- TM1637键盘数码管模块的数码管显示与单片机连接的按键的按键值编程
- TM1638键盘数码管模块的数码管显示与单片机连接的按键的按键值实验现象
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键盘数码管模块的数码管显示与单片机连接的按键的按键值编程
main.c
#include <stc12c5a60s2.h>
#include "Timer0.h"
#include "Key.h"
#include "Digitron.h"
#include "TM1637OfI2C.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键盘数码管模块数据线置高电平
}