TM1650代码记录(基于51单片机)

这篇博客详细介绍了TM1650数码管显示器的使用,包括其功能特点、应用电路、原理图和PCB设计。作者提供了C文件和H文件的代码记录,涉及IIC通信、初始化、数据写入和按键扫描等功能。内容适用于基于51单片机的项目,例如STC8G1K17。还分享了哔哩哔哩上的演示视频和单片机交流群信息。
摘要由CSDN通过智能技术生成

一、TM1650

0、介绍

功能特点:

TM1650用于驱动共阴极显示器
两种显示模式:8段×4位和7段×4位
段驱动电流大于25mA,位驱动电流大于150mA
提供8级亮度控制
键盘扫描:7×4bit内部集成三极管驱动
高速两线式串行接口
内置时钟振荡电路
内置上电复位电路
支持2.8V-5.5V电源电压
提供DIP16及SOP16封装

1、典型应用电路

典型应用电路

2、原理图

原理图

3、PCB

PCB

4、实物图

实物图1
实物图2
实物图3

5、键盘扫描码

键盘扫描码
哔哩哔哩演示视频:TM1650数码管显示及按键扫描

二、代码记录

1、C文件:

头文件引用、定义数组、定义引脚

#include "allhead.h"

// ------------------------------------------------------------
// IO口模拟I2C通信
// SCL_T接P3^3
// SDA_T接P3^4
// ------------------------------------------------------------
sbit SCL_T = P3^3; //串行时钟
sbit SDA_T = P3^4; //串行数据

/*********************TM1650数码管显示数组************************************/
unsigned char code dig1[11]={
   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
//0、1、2、3、4、5、6、7、8、9、-//不带小数点

unsigned char code dig2[11]={
   0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};
//0、1、2、3、4、5、6、7、8、9、-//带小数点

unsigned char key_data = 0;	//键盘扫描码

IIC起始位:

/**********************************************
//TM Start//起始位
**********************************************/
void TM_Start()
{
   
	SCL_T = 1;
	SDA_T = 1;
	Delay5us_TM();
	SDA_T = 0;
} 

IIC结束位:

/**********************************************
//TM Stop//结束位
**********************************************/
void TM_Stop()
{
   
	SCL_T = 1;
	SDA_T = 0;
	Delay5us_TM();
	SDA_T = 1;
} 

ACK信号:

/**********************************************
//TM Ack//ACK信号
**********************************************/
void TM_Ack()
{
   
	unsigned char timeout = 1;
	SCL_T = 1;
	Delay5us_TM();
	SCL_T = 0;
	while((SDA_T) && (timeout <= 100))
	{
   
		timeout++;
	}
	Delay5us_TM();
	SCL_T = 0;
}

写一个字节:

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
TM1650是一种常用的LED数码管驱动芯片,可以驱动8位共阴数码管或者共阳数码管。以下是51单片机驱动TM1650的基本步骤: 1.将TM1650的SCL引脚和51单片机的P1口的某一位相连。 2.将TM1650的SDA引脚和51单片机的P1口的另一位相连。 3.初始化TM1650,发送起始信号,然后发送地址码。 4.发送控制字节,确定数码管的亮度和显示方式等。 5.发送数据,将要显示的数据发送给TM1650。 6.结束通信,发送停止信号。 以下是51单片机驱动TM1650的示例代码: ``` #include<reg52.h> sbit SDA=P1^0; sbit SCL=P1^1; void delay_us(int us) { while(us--) _nop_(); } void TM1650_Write(unsigned char dat) { unsigned char i; for(i=0; i<8; i++) { SDA = dat & 0x80; SCL = 0; delay_us(5); SCL = 1; dat <<= 1; } SDA = 1; SCL = 0; delay_us(5); SCL = 1; delay_us(5); } void TM1650_Start() { SDA = 1; SCL = 1; delay_us(5); SDA = 0; delay_us(5); SCL = 0; delay_us(5); } void TM1650_Stop() { SDA = 0; SCL = 1; delay_us(5); SDA = 1; delay_us(5); } void TM1650_Init() { TM1650_Start(); TM1650_Write(0x48); //地址码,共阳数码管用0x68 TM1650_Stop(); TM1650_Start(); TM1650_Write(0x40); //控制字节,亮度最大,显示模式为普通 TM1650_Stop(); } void TM1650_Display(unsigned char *p) { unsigned char i; TM1650_Start(); TM1650_Write(0x48); //地址码,共阳数码管用0x68 for(i=0; i<8; i++) TM1650_Write(p[i]); TM1650_Stop(); } void main() { unsigned char num[8]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07}; TM1650_Init(); while(1) { TM1650_Display(num); } } ``` 在上述代码中,num数组存放了要显示的数字的编码,其中0x3f对应数字0,0x06对应数字1,以此类推。在主函数中,调用TM1650_Init函数初始化TM1650,然后不断调用TM1650_Display函数进行显示。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值