基於STM8的TM1640驅動程式(附八段數碼管配置工具)
阿新 • • 發佈:2020-12-10
技術標籤:C語言
目錄
.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
八段數碼管配置工具
下載連結:https://download.csdn.net/download/zhuimeng_ruili/13586168