目录

.c文件

.h文件

八段数码管配置工具


.c文件


#include "Bsp_TM1640.h"const uint8_t DIG_TAB[16] =
{0X3F,//  00X06,// 10X5B,// 20X4F,// 30X66,// 40X6D,// 50X7D,// 60X07,// 70X7F,// 80X6F,// 90x79,//"E"  100x50,//"r"    11 0x3E,//"U"  120x38,//"L"  130x77,//"A"  140x71,//"F"  15
};/********  TM1640 GPIO 配置 *************************/
void TM1640_GPIO_Config(void)
{       GPIO_Init(SCLK_GPIO_PORT,SCLK_GPIO_PIN,GPIO_MODE_OUT_PP_LOW_FAST);GPIO_Init(DIN_GPIO_PORT,DIN_GPIO_PIN,GPIO_MODE_OUT_PP_LOW_FAST);
}//*************************************
// 函数名称:_Nopt
// 函数功能:延时函数
// 入口参数:延时时间
// 出口参数:无
//***************************************/
void Nop1640(uint16_t T_Dly)
{     while(T_Dly--);           return ;
}
//****************************************
// 函数名称:TM1640Start
// 函数功能:TM1640起始信号
// 入口参数:无
// 出口参数:无
//***************************************/
void TM1640Start(void)
{   TM1640DAT_HING;  Nop1640(VT_DLYNOP) ;  TM1640SLK_HING;  Nop1640(VT_DLY1640) ;  TM1640DAT_LOW;  Nop1640(VT_DLY1640) ;  TM1640SLK_LOW;  Nop1640(VT_DLY1640) ;
}
//*************************************
// 函数名称:TM1640Stop
// 函数功能:TM1640结束信号
// 入口参数:无
// 出口参数:无
//***************************************/
void TM1640Stop(void)
{  TM1640DAT_LOW;  Nop1640(VT_DLYNOP) ;  TM1640SLK_HING;  Nop1640(VT_DLY1640) ;  TM1640DAT_HING;  Nop1640(VT_DLY1640) ;  TM1640SLK_LOW;  Nop1640(VT_DLY1640) ;  }
//*************************************
// 函数名称:TM1640WriteByte
// 函数功能:TM1640写一字节数据
// 入口参数:要写的数据
// 出口参数:无
//***************************************/
void TM1640WriteByte(uint8_t date)
{  uint8_t i;  uint8_t Tmp;  Tmp=date;  TM1640DAT_LOW;  Nop1640(VT_DLYNOP) ;  TM1640SLK_LOW;  for(i=0;i<8;i++)  {  TM1640SLK_LOW;  Nop1640(VT_DLYNOP) ;  if(Tmp & 0x01)  {  TM1640DAT_HING;  Nop1640(VT_DLY1640) ;  }  else  {  TM1640DAT_LOW;  Nop1640(VT_DLY1640) ;  }  TM1640SLK_HING;  Tmp = Tmp>>1;  }  TM1640SLK_LOW;  Nop1640(VT_DLYNOP) ;  TM1640DAT_LOW;
}
//*************************************
// 函数名称:TM1640_Init
// 函数功能:TM1640设备初始化
// 入口参数:0 1 代表 显示关 显示开
// 出口参数:无
//***************************************/
void TM1640_Init(uint8_t InValue)
{  TM1640DAT_HING;  Nop1640(VT_DLYNOP) ;                 TM1640SLK_HING;  if(InValue == DSP1640_DIS) //显示关  {  TM1640Start();//数据写模式设置  TM1640WriteByte(SET_DSP1640_DIS);//显示关控制   TM1640Stop();         }  else  {  TM1640Start();//数据写模式设置  TM1640WriteByte(SET_DATA_ORDER);//数据命令设置 地址自动加1  TM1640Stop();  TM1640Start(); //显示亮度设置  TM1640WriteByte(SET_DISPLAY); //显示命令控制  脉冲宽度14/16       TM1640Stop();  }
}
//*************************************
// 函数名称:TM1640_SendData
// 函数功能:发送显示缓存
// 入口参数:1640要写数据的起始地址
//           显示数据缓存的起始地址 数据长度
// 出口参数:无
//***************************************/
void TM1640_SendData(uint8_t Addr1640,const uint8_t *a,uint8_t DataLong)
{  uint8_t i;    TM1640Start();  TM1640WriteByte(Addr1640); //设置起始地址  for(i=0;i<DataLong;i++)  {  TM1640WriteByte(a[i]);   }  TM1640Stop();
} void TM1640_SendByte(uint8_t Addr1640, uint8_t a)
{  TM1640Start();  TM1640WriteByte(Addr1640); //设置起始地址  TM1640WriteByte(a);     TM1640Stop();
}void display_codebuf(uint8_t *codebuf)
{uint8_t i;for(i = 0; i < 4; i++){TM1640_SendData(0XC0+3-i,&codebuf[i],1);}
}int main(void)
{uint8_t led_test_data[4]={0};led_test_data[0]=DIG_TAB[5];led_test_data[1]=DIG_TAB[5];led_test_data[2]=DIG_TAB[5];led_test_data[3]=DIG_TAB[5];TM1640_GPIO_Config();TM1640_Init(DSP1640_ENB);while(1){display_codebuf(led_test_data);}}

.h文件

#ifndef _BSP_TM1640_H
#define _BSP_TM1640_H
#include "main.h"  #define   ADDR_START1640        0XC0  #define     DSP1640_DIS     0
#define     DSP1640_ENB     1  /*
控制显示
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f 分别对应
1/16,  2/16,  4/16,  10/16, 11/16, 12/16, 13/16, 14/16    设置数据,0x40,0x44分别对应地址自动加一和固定地址模式
*/  #define         SET_DATA_ORDER       0X40  //数据命令设置 地址自动加1
#define             SET_DISPLAY          0X8F  //显示命令控制  脉冲宽度14/16
#define         SET_DSP1640_DIS          0x80  //显示关控制  #define     VT_DLY1640           300//80//10//2000
#define     VT_DLYNOP            160//80//10  #define SCLK_GPIO_PORT      GPIOB
#define SCLK_GPIO_PIN       GPIO_PIN_0              #define DIN_GPIO_PORT       GPIOB
#define DIN_GPIO_PIN        GPIO_PIN_1  #define TM1640SLK_LOW      GPIO_WriteLow(SCLK_GPIO_PORT, SCLK_GPIO_PIN )
#define TM1640SLK_HING     GPIO_WriteHigh(SCLK_GPIO_PORT, SCLK_GPIO_PIN )
#define TM1640DAT_LOW      GPIO_WriteLow(DIN_GPIO_PORT, DIN_GPIO_PIN )
#define TM1640DAT_HING     GPIO_WriteHigh(DIN_GPIO_PORT, DIN_GPIO_PIN )extern const uint8_t DIG_TAB[16];void TM1640_GPIO_Config(void);
void Nop1640(uint16_t T_Dly);
void TM1640Start(void);
void TM1640Stop(void);
void TM1640WriteByte(uint8_t date);
void TM1640_Init(uint8_t InValue);
void TM1640_SendData(uint8_t Addr1640,const uint8_t *a,uint8_t DataLong);
void display_codebuf(uint8_t *codebuf);#endif

八段数码管配置工具

下载链接:https://download.csdn.net/download/zhuimeng_ruili/13586168

基于STM8的TM1640驱动程序(附八段数码管配置工具)相关推荐

  1. [STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字

    本节我们目标是实现TM1640点亮16位共阴极数码管,显示"0~F"数字: 1. 硬件设计 GPIO初始化配置 SCL(PB6)  SDA(PB7):开漏输出,通过IO模拟驱动TM ...

  2. 基于STM8的数字温度计设计

    基于STM8的数字温度计设计 这是在2021年12月初完成的一次课程设计,全程自己设计组装完成,现作为记录存档发布,大家也可以借鉴本文来完成自己的课程设计.(建议使用电脑阅读) 课程设计目录 基于ST ...

  3. 基于89c51的74ls138模块的四位数码管动态显示

    基于89c51的74ls138模块的四位数码管动态显示 简介 本人的开发板上只有八位数码管,因此是将p2口的三位接在138的输入上,输出口的前四位接在八位数码管的位选段上以实现四位数码管的显示. 动态 ...

  4. 单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)

    目录 一.实验要求 二.知识要点 (一)数码管 (二)八段数码管的字形编码 (三)C51变量定义的四要素 (四)中断源 (五)相关的特殊功能寄存器 1.定时器/计数器控制寄存器TCON 2.中断允许控 ...

  5. java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...

    [实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...

  6. Linux数码管和点阵程序,随笔:python turtle绘制八段数码管和共阳极8x8led点阵

    为更新而更新,为保持更新状态而更新. 给学生讲解用gpiozero库控制八段管和8x8共阳极LED点阵.已经讲解了单个LED的控制,RGB彩色灯珠的控制,在讲解八段管就很容易理解,多个八段管的讲解稍微 ...

  7. 让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)

    51单片机数码管的显示 一.八段数码管基础部分 1.八段数码管的共阴极和共阳极 2.八段数码管的位码和段码 二.八段数码管动态显示 1.八个八段数码管动态扫描0到7流水显示 2.八个八段数码管动态扫描 ...

  8. 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...

    操作系统的课程设计,本人也是一头雾水地做完了课程设计,在这里贴下操作过程,放下当时参考的一篇CSDN文章链接:https://blog.csdn.net/cxy_chen/article/detail ...

  9. Arduino 实现八段数码管显示练习

    晚上蛋疼,本来要做arduino的测距显示,由于老师没有设备只能用八段数码管显示~没有LED~ 今天拿出来观察了下,结果红外测距没有导线 -.- 只好拿数码管练练手 设备:ARDUINO 2009 D ...

  10. linux无线网卡驱动分析,基于Linux的无线网卡驱动程序

    基于Linux的无线网卡驱动程序 文章分析了Linux下无线网卡驱动程序结构及设计方法,着重 (本文共4页) 阅读全文>> 无线局域网是当前较为常见的一种无线接入技术,具有运行速度高一级灵 ...

最新文章

  1. LTE: MIB和SIB,小区选择和重选规则
  2. 盘点类别级物体6D位姿估计
  3. sql中去掉换行符和回车符
  4. 数据结构——HDU1312:Red and Black(DFS)
  5. spring boot记录操作日志
  6. Linux Shell变量类型
  7. Maven实战. 1.3Maven与极限编程
  8. Qt图形界面编程入门(7)
  9. html5-svg和Two.js的使用方法(附案例)
  10. 昆仑通态触摸屏如何把参数由触摸屏传递到PLC_昆仑通态MCGS触摸屏如何连接Modsim32进行组态仿真...
  11. 使用javascript在客户端获取URL参数值的函数
  12. MySQL存储过程中游标使用
  13. Java中堆和栈的概念与区别
  14. ElementUI:导航nav设置路由模式后,切换路由导航样式不变话
  15. tbb::parallel_for 实例
  16. go1.5源代码安装
  17. U盘未识别驱动器需要格式化
  18. C语言对复数模运算的处理
  19. “碰一碰”版本的蓝牙键盘,来啦!
  20. Frontiers in Neuroscience:弥散张量成像(DTI)研究指南

热门文章

  1. 知识竞赛抢答器PLC设计
  2. WPF UI框架界面开发教程(一)
  3. js laypage mysql_layUI独立组件layer-laydate-laypage项目实践用法
  4. js laypage mysql_laypage 物理分页与逻辑分页实例
  5. 2017数学建模B题摘要
  6. 基于算术优化算法的函数寻优算法
  7. 如何学好3D游戏引擎编程
  8. hmcl启动器找不到java_HMCL启动器安装1.16.3版本出现以下问题
  9. 施耐德PLC Unity Pro xl 软件使用四
  10. PLC编程实现堆栈功能