基于STM8的TM1640驱动程序(附八段数码管配置工具)
目录
.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驱动程序(附八段数码管配置工具)相关推荐
- [STM32F1]基于STM32F103实现TM1640点亮16位共阴极数码管,显示“0~F”数字
本节我们目标是实现TM1640点亮16位共阴极数码管,显示"0~F"数字: 1. 硬件设计 GPIO初始化配置 SCL(PB6) SDA(PB7):开漏输出,通过IO模拟驱动TM ...
- 基于STM8的数字温度计设计
基于STM8的数字温度计设计 这是在2021年12月初完成的一次课程设计,全程自己设计组装完成,现作为记录存档发布,大家也可以借鉴本文来完成自己的课程设计.(建议使用电脑阅读) 课程设计目录 基于ST ...
- 基于89c51的74ls138模块的四位数码管动态显示
基于89c51的74ls138模块的四位数码管动态显示 简介 本人的开发板上只有八位数码管,因此是将p2口的三位接在138的输入上,输出口的前四位接在八位数码管的位选段上以实现四位数码管的显示. 动态 ...
- 单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)
目录 一.实验要求 二.知识要点 (一)数码管 (二)八段数码管的字形编码 (三)C51变量定义的四要素 (四)中断源 (五)相关的特殊功能寄存器 1.定时器/计数器控制寄存器TCON 2.中断允许控 ...
- java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...
[实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...
- Linux数码管和点阵程序,随笔:python turtle绘制八段数码管和共阳极8x8led点阵
为更新而更新,为保持更新状态而更新. 给学生讲解用gpiozero库控制八段管和8x8共阳极LED点阵.已经讲解了单个LED的控制,RGB彩色灯珠的控制,在讲解八段管就很容易理解,多个八段管的讲解稍微 ...
- 让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)
51单片机数码管的显示 一.八段数码管基础部分 1.八段数码管的共阴极和共阳极 2.八段数码管的位码和段码 二.八段数码管动态显示 1.八个八段数码管动态扫描0到7流水显示 2.八个八段数码管动态扫描 ...
- 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...
操作系统的课程设计,本人也是一头雾水地做完了课程设计,在这里贴下操作过程,放下当时参考的一篇CSDN文章链接:https://blog.csdn.net/cxy_chen/article/detail ...
- Arduino 实现八段数码管显示练习
晚上蛋疼,本来要做arduino的测距显示,由于老师没有设备只能用八段数码管显示~没有LED~ 今天拿出来观察了下,结果红外测距没有导线 -.- 只好拿数码管练练手 设备:ARDUINO 2009 D ...
- linux无线网卡驱动分析,基于Linux的无线网卡驱动程序
基于Linux的无线网卡驱动程序 文章分析了Linux下无线网卡驱动程序结构及设计方法,着重 (本文共4页) 阅读全文>> 无线局域网是当前较为常见的一种无线接入技术,具有运行速度高一级灵 ...
最新文章
- LTE: MIB和SIB,小区选择和重选规则
- 盘点类别级物体6D位姿估计
- sql中去掉换行符和回车符
- 数据结构——HDU1312:Red and Black(DFS)
- spring boot记录操作日志
- Linux Shell变量类型
- Maven实战. 1.3Maven与极限编程
- Qt图形界面编程入门(7)
- html5-svg和Two.js的使用方法(附案例)
- 昆仑通态触摸屏如何把参数由触摸屏传递到PLC_昆仑通态MCGS触摸屏如何连接Modsim32进行组态仿真...
- 使用javascript在客户端获取URL参数值的函数
- MySQL存储过程中游标使用
- Java中堆和栈的概念与区别
- ElementUI:导航nav设置路由模式后,切换路由导航样式不变话
- tbb::parallel_for 实例
- go1.5源代码安装
- U盘未识别驱动器需要格式化
- C语言对复数模运算的处理
- “碰一碰”版本的蓝牙键盘,来啦!
- Frontiers in Neuroscience:弥散张量成像(DTI)研究指南