最近購買了一個(gè)tm1638的集成模塊,正好手頭有STM32F103C8T6的最小系統(tǒng)板,拿來試試刀。
先看圖
代碼:
- #ifndef _TM1638_H_
- #define _TM1638_H_
- #include "stm32f10x.h"
-
- typedef enum { N = 0x00, Y = 0x80} PointState; //是否帶小數(shù)點(diǎn) Y:帶,N:不帶
-
- typedef enum { OFF = 0x00, ON = 0x01} LightState; //燈開關(guān)狀態(tài) On:開,Off:關(guān)
- //TM1638模塊相關(guān)引腳定義
- #define STB GPIO_Pin_5
- #define CLK GPIO_Pin_6
- #define DIO GPIO_Pin_7
- #define GPIO_TM1638 GPIOA
- #define GPIO_Pin_TM1638 STB|CLK|DIO
- #define RCC_TM1638 RCC_APB2Periph_GPIOA
- //引腳高低電平設(shè)置
- #define STB_0() GPIO_ResetBits(GPIO_TM1638,STB)
- #define STB_1() GPIO_SetBits(GPIO_TM1638,STB)
- #define CLK_0() GPIO_ResetBits(GPIO_TM1638,CLK)
- #define CLK_1() GPIO_SetBits(GPIO_TM1638,CLK)
- #define DIO_0() GPIO_ResetBits(GPIO_TM1638,DIO)
- #define DIO_1() GPIO_SetBits(GPIO_TM1638,DIO)
- #define DIO_Read() GPIO_ReadInputDataBit(GPIO_TM1638,DIO)
- //用戶層函數(shù)
- void TM1638_Init(void); //TM1638初始化函數(shù)
- void TM1638_Display_Num(u32 data); //顯示數(shù)字
- void TM1638_Display_SEG(unsigned int num,unsigned char seg,PointState p); //選擇數(shù)碼管顯示0-F
- void TM1638_Display_LED(unsigned int num,LightState light); //指定led亮滅
- unsigned char TM1638_ReadKey(void); //TM1638讀鍵掃數(shù)據(jù)函數(shù)
- void TM1638_SEG_Off(unsigned char num); //TM1638關(guān)閉指定數(shù)碼管函數(shù)
- void TM1638_Clear(void); //TM1638全清
- //底層函數(shù)
- void TM1638_Write_Byte(u8 byte); //TM1638單寫數(shù)據(jù),需要在函數(shù)外對(duì)STB操作
- void TM1638_Write_Data(u8 data); //TM1638一個(gè)完整數(shù)據(jù)寫入
- void TM1638_Write_Addr_Bond(u8 addr,u8 data); //TM1638指定地址寫入數(shù)據(jù)
- unsigned char TM1638_Read(void); //TM1638讀數(shù)據(jù)函數(shù)
- void TM1638_GPIO_Init(void); //TM1638引腳初始化函數(shù)
- #endif