文章目录

  • 一、TM1650
    • 0、介绍
    • 1、典型应用电路
    • 2、原理图
    • 3、PCB
    • 4、实物图
    • 5、键盘扫描码
  • 二、代码记录
    • 1、C文件:
    • 2、H文件
  • 三、结束语

一、TM1650

0、介绍

功能特点:

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

1、典型应用电路

2、原理图

3、PCB

4、实物图



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;
}

写一个字节:

/**********************************************
// 通过总线写一个字节
**********************************************/
void Write_TM_Byte(unsigned char TM_Byte)
{unsigned char i;SCL_T = 0;Delay1us_TM();for(i=0;i<8;i++){if(TM_Byte & 0x80)SDA_T = 1;elseSDA_T = 0;SCL_T = 0;Delay5us_TM();SCL_T = 1;Delay5us_TM();SCL_T = 0;TM_Byte <<= 1;}
}

读一个字节:

/**********************************************
// 通过总线读一个字节
**********************************************/
unsigned char Read_TM_Byte()
{unsigned char i;unsigned char j;unsigned char TM_Byte;for(i=0;i<8;i++){SCL_T = 0;Delay5us_TM();TM_Byte <<= 1;j = SDA_T;TM_Byte += j;SCL_T = 1;Delay5us_TM();}SCL_T = 0;Delay1us_TM();return TM_Byte;
}

TM1650写数据:

/*********************TM1650写数据************************************/
void TM_WrDat(unsigned char add,unsigned char dat)
{TM_Start();Write_TM_Byte(add);//显存地址TM_Ack();Write_TM_Byte(dat);//显示数据TM_Ack();TM_Stop();
}

TM1650写命令:

/*********************TM1650写命令************************************/
void TM_WrCmd(unsigned char Bri)
{TM_Start();Write_TM_Byte(0x48);//显示模式TM_Ack();Write_TM_Byte(Bri);TM_Ack();TM_Stop();
}

TM1650初始化:

/*********************TM1650初始化************************************/
void TM_Init()
{TM_WrCmd(0x11);//1级亮度//8段显示//开显示TM_WrDat(0x68,0xff);//DIG1TM_WrDat(0x6a,0xff);//DIG2TM_WrDat(0x6c,0xff);//DIG3TM_WrDat(0x6e,0xff);//DIG4
}

TM1650显示(可自行修改):

/*********************TM1650显示**************************************/
void Dis_TM(unsigned char dig1,unsigned char dig2,unsigned char dig3,unsigned char dig4)
{TM_WrDat(0x68,dig1);//DIG1TM_WrDat(0x6a,dig2);//DIG2TM_WrDat(0x6c,dig3);//DIG3TM_WrDat(0x6e,dig4);//DIG4
}

TM1650读按键:

/*********************TM1650读按键************************************/
void TM_ReCmd()
{TM_Start();Write_TM_Byte(0x49);//读取模式TM_Ack();key_data = Read_TM_Byte();//读取键盘扫描码TM_Ack();TM_Stop();
}

TM1650读处理(显示键盘扫描码和显示按键位置二选一)
显示键盘扫描码:

/*********************TM1650读处理************************************/
void Read_TM()
{//数码管显示键盘扫描码unsigned char a = 0;unsigned char b = 0;unsigned char c = 0;TM_ReCmd();//TM1650读按键a = key_data/100;b = key_data/10%10;c = key_data%10;Dis_TM(dig1[0],dig1[a],dig1[b],dig2[c]);    //数码管显示键盘扫描码
}

显示按键位置:

/*********************TM1650读处理************************************/
void Read_TM()
{//数码管显示按键位置unsigned char a = 0;unsigned char b = 0;TM_ReCmd();//TM1650读按键switch(key_data){//第一行case 0x44: a = 1; b = 1; break;case 0x4c:    a = 1; b = 2; break;case 0x54:    a = 1; b = 3; break;case 0x5c:    a = 1; b = 4; break;case 0x64:    a = 1; b = 5; break;case 0x6c:    a = 1; b = 6; break;case 0x74:    a = 1; b = 7; break;//第二行case 0x45:   a = 2; b = 1; break;case 0x4d:    a = 2; b = 2; break;case 0x55:    a = 2; b = 3; break;case 0x5d:    a = 2; b = 4; break;case 0x65:    a = 2; b = 5; break;case 0x6d:    a = 2; b = 6; break;case 0x75:    a = 2; b = 7; break;//第三行case 0x46:   a = 3; b = 1; break;case 0x4e:    a = 3; b = 2; break;case 0x56:    a = 3; b = 3; break;case 0x5e:    a = 3; b = 4; break;case 0x66:    a = 3; b = 5; break;case 0x6e:    a = 3; b = 6; break;case 0x76:    a = 3; b = 7; break;//第四行case 0x47:   a = 4; b = 1; break;case 0x4f:    a = 4; b = 2; break;case 0x57:    a = 4; b = 3; break;case 0x5f:    a = 4; b = 4; break;case 0x67:    a = 4; b = 5; break;case 0x6f:    a = 4; b = 6; break;case 0x77:    a = 4; b = 7; break;default:  a = 0; b = 0; break;}Dis_TM(0x00,dig1[a],dig1[10],dig2[b]);   //数码管显示按键位置
}

TM1650延时函数:

/*********************TM1650驱动程序用的延时程序************************************/
void Delay1us_TM()      //@24.000MHz
{unsigned char i;i = 6;while (--i);
}void Delay5us_TM()     //@24.000MHz
{unsigned char i;i = 38;while (--i);
}

2、H文件

#ifndef _TM1650_H_
#define _TM1650_H_
/*************************************************/
//数码管显示数组
extern unsigned char code dig1[11]; //无小数点
extern unsigned char code dig2[11]; //有小数点
extern unsigned char key_data;  //键盘扫描码//TM1650延时函数
void Delay1us_TM();     //@24.000MHz
void Delay5us_TM();     //@24.000MHz//TM1650外调函数
void TM_Init();//TM1650初始化
void Dis_TM(unsigned char dig1,unsigned char dig2,unsigned char dig3,unsigned char dig4);//TM1650四位显示
void Read_TM();//TM1650读处理/*************************************************/
#endif

三、结束语

该代码测试运行环境:
基于51单片机
主控:STC8G1K17
晶振:24Mhz(内部晶振)
主板:控制板-2-20mm-V4.0

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

哔哩哔哩:风筝见证-雪夜
单片机QQ交流群:210560687
欢迎大家加入,一起交流学习,一起进步

TM1650代码记录(基于51单片机)相关推荐

  1. (含代码)基于51单片机的红外遥控(独立按键)舵机开关灯控制

    硬件说明: 采用STC89C51作为主控芯片,结合SG90舵机模块,红外遥控(独立按键),等电路模块实现远程控制舵机. 应用实例: 在不改变外部电路的情况下,实现远程开灯,关灯. 远程控制机器开关状态 ...

  2. C语言 | 基于51单片机实现MPU6050的卡尔曼滤波算法(代码类2)

    github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 之前写过一个博客(代码分享:单片机开发 | ...

  3. 【C51】基于51单片机的简易频率计(附代码、无需外设、小白简单易上手)

    基于51单片机的简易频率计(无需外设.小白简单易上手)   代码较为简单,大概思路是通过定时器单位时间内外部中断上升沿触发的次数来计算实际频率. /基于51单片机的简易频率计#include<r ...

  4. 收音机c语言程序,基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)...

    基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)(任务书,开题报告,论文15000字) 摘要 在当今的社会时代中,信息的传输扮演着极其重要的地位.随着科学技术的不断发展与进步,人类的生 ...

  5. 51系列—基于51单片机的校园教室打铃系统(代码+仿真+电路图超级全)

    基于51单片机的校园教室打铃系统(代码+仿真+电路图超级全) 本文主要介绍基于51单片机实现的校园打铃系统设计,实现了基本的上下课打铃功能.本设计基于51单片机,使用单片机定时计数器及LCD1602接 ...

  6. 水塔水位测量c语言程序,基于51单片机水塔水箱水位检测系统控制器设计(附程序代码)...

    基于51单片机水塔水箱水位检测系统控制器设计(附程序代码)(任务书,开题报告,外文翻译,论文18000字) 摘  要 为了能实现水位监测与控制,以STC89C52作为核心控制芯片,进行了水位检测系统控 ...

  7. nRF24L01+基于51单片机的驱动(库)实战代码分享

    nRF24L01+基于51单片机的驱动(库)实战代码分享 关于代码来源 定义数据类型的头文件Type.h nRF24L01+驱动源代码文件nRF24L01P.c nRF24L01+驱动的头文件nRF2 ...

  8. 基于51单片机的八路抢答器附仿真代码开源

    基于51单片机的八路抢答器代码开源 单片机采用51单片机 一个共阳数码管 需要该源码的可以关注公众号:智慧小巷 回复:八路抢答器 即可!

  9. 基于51单片机的智能空调控制系统设计(仿真+代码+原理图+报告+视频讲解)

    基于51单片机的智能空调控制系统 这里写目录标题 1 开发环境 讲解演示视频 2 功能说明介绍 3 仿真图 4 程序 4.1 工程文件 4.2 代码 5 原理图 6 元器件清单 7 视频讲解 8 资料 ...

最新文章

  1. Nature:希望你在读博士之初就能知道的 20 件事
  2. 一致代码段与非一致代码段
  3. wince 串口调试信息输出
  4. MapReduce的优点
  5. global mapper 制作地形图_福州大飞机模型制作厂家,产品模型,期待合作_境海模型...
  6. 在Scrollview中使用AutoLayout
  7. dev gridview 打印列数过多_R语言:如何将多张统计图绘制在一张上面
  8. 信息学奥赛C++语言:判断两位数
  9. QT接收或发送二进制数据(或数据内包含0)
  10. HTML表格设计用到哪些标签,网页设计:HTML表格标签
  11. matlab运行C程序
  12. GNS3 2.1.9版本的安装
  13. RAW到底比JPG强在哪里
  14. JS之BigNumber.js 讲解
  15. C++ 模板实现—双向链表: doubly linked list
  16. 从低位开始取出长整型变量s中奇数位上的数依次构成一个新数放在t中
  17. 微信公众号如何推广运营
  18. GitHub Android 最火开源项目Top20
  19. 职场礼仪_举止_坐姿
  20. 10大关键词解读中国互联网五年间创新飞跃在哪里

热门文章

  1. 网络文件共享服务之NFS
  2. 配置SQL Server的ODBC数据源
  3. Pacemaker-学习总结(概念、结构)
  4. Java学习-标准描述类的写法
  5. 04、江苏专转本(专业课笔记)第四章、计算机网络与因特网
  6. 驱动调试-摄像头部分
  7. 优化OpenSearch的搜索结果
  8. windows平台查看CPU支持的指令集 代码:__cpuid,__cpuidex
  9. 解决idea运行Tomcat项目时网页自动打开test1_Web_exploded文件并且打开其他链接时报错404的问题
  10. 解决linux系统网络时常断开的问题