目次
.cファイル
#include "Bsp_TM1640.h"
const uint8_t DIG_TAB[16] =
{
0X3F,// 0
0X06,// 1
0X5B,// 2
0X4F,// 3
0X66,// 4
0X6D,// 5
0X7D,// 6
0X07,// 7
0X7F,// 8
0X6F,// 9
0x79,//"E" 10
0x50,//"r" 11
0x3E,//"U" 12
0x38,//"L" 13
0x77,//"A" 14
0x71,//"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
8セグメントデジタル管構成ツール
ダウンロードリンク:https://download.csdn.net/download/zhuimeng_ruili/13586168