Keil5 TM1650.c文件
#include "TM1650.h" #include "Delay.h" // Êý×ֵĶÎÂë (0-9) const uint8_t data_num[10] = { 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f // 9 }; // Ó¢ÎÄa-fµÄ¶ÎÂë const uint8_t data_alphabet[6] = { 0x77, // a 0x7c, // b 0x39, // c 0x5e, // d 0x79, // e 0x71 // f }; // ÊýÂë¹ÜµÄ¶ÎµØÖ· const uint8_t display_address[4] = { 0x6e, // DIG4 0x6c, // DIG3 0x6a, // DIG2 0x68 // DIG1 }; // ÁÁ¶ÈÉèÖà (0-7) const uint8_t display_brightness[8] = { 0x11, // 0¼¶ÁÁ¶È (×îС) 0x21, // 1¼¶ 0x31, // 2¼¶ 0x41, // 3¼¶ 0x51, // 4¼¶ 0x61, // 5¼¶ 0x71, // 6¼¶ 0x01 // 7¼¶ÁÁ¶È (×î´ó) }; void TM1650_Init(void) // TM1650Ä£¿é¶Ë¿ÚGPIO³õʼ»¯ { GPIO_InitTypeDef GPIO_InitStruct; // ¶¨ÒåÒ»¸öGPIO½á¹¹Ìå±äÁ¿ // ´ò¿ªGPIO B×éʱÖÓ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // ÅäÖÃPB12(SCL), PB13(SDA) GPIO_InitStruct.GPIO_Pin = TM1650_SCL_PIN | TM1650_SDA_PIN; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // ÍÆÍìÊä³ö GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // ËÙ¶È50MHz GPIO_Init(TM1650_GPIO, &GPIO_InitStruct); // ³õʼ״̬£º¸ßµçƽ TM1650_SCL_1; TM1650_SDA_1; } void Iic_Mode(GPIOMode_TypeDef Mode) { GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = TM1650_SDA_PIN; GPIO_InitStruct.GPIO_Mode = Mode; // ÉèÖÃģʽ GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TM1650_GPIO, &GPIO_InitStruct); } void TM1650_start(void) // ¿ªÊ¼ÐźŠ{ Iic_Mode(GPIO_Mode_Out_PP); TM1650_SCL_1; TM1650_SDA_1; Delay_us(5); TM1650_SDA_0; Delay_us(5); TM1650_SCL_0; Delay_us(5); } void TM1650_stop(void) // Í£Ö¹ÐźŠ{ Iic_Mode(GPIO_Mode_Out_PP); TM1650_SCL_0; TM1650_SDA_0; Delay_us(5); TM1650_SCL_1; Delay_us(5); TM1650_SDA_1; Delay_us(5); } void TM1650_send(uint8_t data) // ´«ÊäÊý¾Ý { Iic_Mode(GPIO_Mode_Out_PP); uint8_t i; TM1650_SCL_0; TM1650_SDA_0; Delay_us(5); for(i = 0; i < 8; i++) { if(data & 0x80) // ¸ßλÏÈ·¢ËÍ TM1650_SDA_1; else TM1650_SDA_0; Delay_us(5); TM1650_SCL_1; Delay_us(5); TM1650_SCL_0; Delay_us(5); data <<= 1; // ×óÒÆÒ»Î» } } uint8_t TM1650_ack(void) // µÈ´ýÓ¦´ð { uint8_t ack = 0; Iic_Mode(GPIO_Mode_IN_FLOATING); // ÉèÖÃΪ¸¡¿ÕÊäÈë TM1650_SCL_0; Delay_us(5); TM1650_SCL_1; Delay_us(5); // ¶ÁÈ¡SDAÏß״̬ if(GPIO_ReadInputDataBit(TM1650_GPIO, TM1650_SDA_PIN)) ack = 1; // ÎÞÓ¦´ð TM1650_SCL_0; Delay_us(5); return ack; } void Write_DATA(uint8_t add, uint8_t DATA) // Ö¸¶¨µØÖ·Ð´ÈëÊý¾Ý { TM1650_start(); // Æô¶¯ÐźŠTM1650_send(add); // ·¢Ë͵ØÖ· TM1650_ack(); // Ó¦´ðÐźŠTM1650_send(DATA); // дÈëÊý¾Ý TM1650_ack(); // Ó¦´ðÐźŠTM1650_stop(); // Í£Ö¹ÐźŠ} void Display_Init(void) // ÏÔʾÉ豸µÄ³õʼ»¯ { Delay_us(500); // ÐèÒªÑÓʱ500msµÈ´ýоƬµÄÆô¶¯ Write_DATA(TIM_COMMAND, display_brightness[7]); // ÏÔʾ×î´óÁÁ¶È Write_DATA(DIS_ADD_1, data_null); // Çå¿ÕÏÔʾ Write_DATA(DIS_ADD_2, data_null); Write_DATA(DIS_ADD_3, data_null); Write_DATA(DIS_ADD_4, data_null); } void Show_Num(uint16_t num, uint8_t dp) // ÏÔʾÊý×Ö { uint8_t buff = 0; uint8_t i; if(num <= 9999) // Êý×ÖÔÚºÏÊÊ·¶Î§ { for(i = 0; i < 4; i++) { buff = num % 10; // »ñÈ¡×îµÍλÊý×Ö num /= 10; // ÒÆ³ý×îµÍλ if(dp & 0x01) // ¸ÃλÐèÒªÏÔʾСÊýµã { Write_DATA(display_address[i], data_num[buff] | data_dp); } else { Write_DATA(display_address[i], data_num[buff]); } dp >>= 1; // ¼ì²éÏÂһλСÊýµã } } } void Display_Change_Brightness(uint8_t num) // ÐÞ¸ÄÁÁ¶È { if(num < 8) { Write_DATA(TIM_COMMAND, display_brightness[num]); } }Keil5 TM1650.h文件
#ifndef NUMTM1650_H #define NUMTM1650_H #include "stm32f10x.h" // Òý½Å¶¨Òå #define TM1650_SCL_PIN GPIO_Pin_12 #define TM1650_SDA_PIN GPIO_Pin_13 #define TM1650_GPIO GPIOB // ºê¶¨Òå #define TM1650_SCL_1 GPIO_SetBits(TM1650_GPIO, TM1650_SCL_PIN) #define TM1650_SCL_0 GPIO_ResetBits(TM1650_GPIO, TM1650_SCL_PIN) #define TM1650_SDA_1 GPIO_SetBits(TM1650_GPIO, TM1650_SDA_PIN) #define TM1650_SDA_0 GPIO_ResetBits(TM1650_GPIO, TM1650_SDA_PIN) // ÊýÂë¹ÜµØÖ·¶¨Òå #define DIS_ADD_1 0x68 // µÚÒ»¸öÊýÂë¹ÜµÄµØÖ· #define DIS_ADD_2 0x6A // µÚ¶þ¸öÊýÂë¹ÜµÄµØÖ· #define DIS_ADD_3 0x6C // µÚÈý¸öÊýÂë¹ÜµÄµØÖ· #define DIS_ADD_4 0x6E // µÚËĸöÊýÂë¹ÜµÄµØÖ· // ÃüÁÒå #define TIM_COMMAND 0x48 // ÏÔ´æµØÖ· #define data_dp 0x80 // СÊýµã #define data_null 0x00 // ²»ÏÔʾ extern const uint8_t data_num[10]; extern const uint8_t data_alphabet[6]; extern const uint8_t display_address[4]; extern const uint8_t display_brightness[8]; // º¯ÊýÉùÃ÷ void TM1650_Init(void); // TM1650Ä£¿é¶Ë¿ÚGPIO³õʼ»¯ void Iic_Mode(GPIOMode_TypeDef Mode); void TM1650_start(void); void TM1650_stop(void); uint8_t TM1650_ack(void); void TM1650_send(uint8_t data); void Write_DATA(uint8_t add, uint8_t DATA); void Display_Init(void); void Show_Num(uint16_t num, uint8_t dp); void Display_Change_Brightness(uint8_t num); #endif