
TM1638 یک آی سی برای درایو LED یا سون سگمنت می باشد . دارای رابط سریال سه سیمه ، خروجی داده لچ ، و مجهز به رابط اسکن صفحه کلید است . آی سی TM1638 از نظر کیفیت قابل اعتماد، دارای عملکرد پایدار و مقاوم در برابر نویز است. این ماژول ها یک راه عالی برای افزودن یک صفحه نمایش seven segment به هر پروژه ای می باشد .
موضوعاتی که در این مقاله به آنها پرداخته خواهد شد :
در پست هايي جداگانه آموزش راه اندازي سون سگمنت با درايور tm1637 , max7219 , 74hc595 در سايت قرار داده شده است ، مي توانيد به لينكهاي قرار داده شده مراجعه و مطالعه نماييد.
ویژگی های آی سی TM1638
• تکنولوژی CMOS
• نمایش 10 بخش × 8 بیت
• اسکن صفحه کلید (8 × 3 بیت یا 24 کلید)
• مدار تنظیم روشنایی (قابل تنظیم 8 سطح)
• رابط های سریال (CLK، STB، DIO)
• حالت نوسان: نوسانساز RC
• مجهز به مدار تنظیم مجدد با اتصال تغذیه power-on reset
• نوع پکیج: SOP28
ماژول TM1638
ماژول tm1638 برای نمایش سون سگمنت 8 رقمی از یک کنترلر TM6138 استفاده می کند که امکان کنترل کامل نمایشگر را تنها با استفاده از 3 پین دیجیتال روی یک میکروکنترلر فراهم می کند. علاوه بر صفحه نمایش seven segment ، دارای 8 عدد led قرمز 3 میلی متری با قابلیت کنترل جداگانه و یک صفحه کلید با 8 دکمه فشاری که در یک ردیف چیده شده اند ، البته آی سی tm1638 قابلیت اسکن 24 عدد کلید را دارد اما بر روی این ماژول فقط 8 کلید وجود دارد. . یک هدر استاندارد 5 پین رابط کاربری آسانی را برای ماژول برای اتصال به میکروکنترلر فراهم می کند.
امکانات ماژول TM1638
- داری سون سگمنت 8 رقمی.
- دارای 8 LED رنگ قرمز 3 میلی متری.
- دارای 8 تک سوئیچ .
- ولتاژ تغذیه 5 ولت
- کنترلر TM1638
- کنترل روشنایی سون سگمنتها و LED ها
- رابط 3 خط سریال (CLK، STB، DIO).
- ابعاد 76 در 50 میلی متر.
پایه ها /PINOUT ماژول TM1638
پایه های ماژول به شرح زیر می باشد .
راه اندازی ماژول TM1638 با STM32 و Codevision
کتابخانه برای ماژول tm1638 با STM32 به همراه یک پروژه و مثال استفاده از توابع می باشد .
کتابخانه TM1638 توسط توابع HAL نوشته شده است.
تنظیمات و معرفی پایه ها توسط نرم افزار CubeMX انجام می شود . براحتی می توانید با معرفی سه پایه با نام های TM1638_DIO , TM1638_CLK , TM1638_STB و بدون تنظیمات اضافه دیگری ، ماژول را راه اندازی کنید .
در کامپایلر کدویژن پایه های ماژول TM1638 را به شکل زیر تعریف می کنیم . برای این کار براحتی می توانید فایل کتابخانه TM1638.h را از منوی سمت چپ code navigator باز کنید و پایه هایی از میکروکنترلر avr را که می خواهید به ماژول tm1638 متصل کنید ، به برنامه معرفی کنید .
توابع کتابخانه TM1638 برای STM32 و کدویژن به شرح زیر می باشد :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
#ifndef SRC_TM1638_H_ #define SRC_TM1638_H_ #include "main.h" #define CLK(n) HAL_GPIO_WritePin(TM1638_CLK_GPIO_Port, TM1638_CLK_Pin, (n)) #define STB(n) HAL_GPIO_WritePin(TM1638_STB_GPIO_Port, TM1638_STB_Pin, (n)) #define DIO(n) HAL_GPIO_WritePin(TM1638_DIO_GPIO_Port, TM1638_DIO_Pin, (n)) #define DIO_Read() HAL_GPIO_ReadPin(TM1638_DIO_GPIO_Port, TM1638_DIO_Pin) // Commands #define TM1638_CMD_DATA 0x40 //!< Display data command #define TM1638_CMD_CTRL 0x80 //!< Display control command #define TM1638_CMD_ADDR 0xC0 //!< Display address command // Data command bits #define TM1638_DATA_WRITE 0x00 //!< Write data #define TM1638_DATA_READ_KEYS 0x02 //!< Read keys #define TM1638_DATA_AUTO_INC_ADDR 0x00 //!< Auto increment address #define TM1638_DATA_FIXED_ADDR 0x04 //!< Fixed address #define TM1638_CTRL_DISPLAY_OFF 0x00 //!< Display off #define TM1638_CTRL_DISPLAY_ON 0x08 //!< Display on #define NUM_COLOR_LEDS 8 //!< Number of dual color LED's #define NUM_DIGITS 8 //!< Number of digits #define SEGMENTS_OFF 0b00000000 //!< 7-sgement digit all LED's off #define SEGMENTS_MINUS 0b01000000 //!< 7-sgement digit minus character #define SEGMENTS_DEGREE 0b01100011 //!< 7-sgement digit degree symbol #define SEGMENTS_C 0b00111001 //!< 7-sgement digit Celsius symbol /*! * \brief Dual color LED */ typedef enum { LedOff = 0, LedRed = 1, LedGreen = 2 } LedColor; enum{ BIN=2, DEC=10, HEX=16 }; // Get buttons /* 8 buttons on the TM1638 board are connected to K3 only * Sort the keys in BYTE1..BYTE4 bits 0 and 4 to a keys byte * * BIT: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | * -----+---+---+---+----+---+---+---+----+------ * | | | | S5 | | | | S0 | BYTE1 * | | | | S6 | | | | S1 | BYTE2 * | | | | S7 | | | | S2 | BYTE3 * | | | | S8 | | | | S3 | BYTE4 */ /////////////////////////////////////////////////////// // // // Read buttons // // 1F 17 0F 07 1B 13 0B 03 // // // /////////////////////////////////////////////////////// uint8_t TM1638_ReadKey(void); // Turn all LED's off void TM1638_clear(void); void TM1638_setBrightness(uint8_t brightness); void writeDisplayControl(void); void TM1638_displayOn(void); void TM1638_displayOff(void); // Set dual color LED's /* led=7: Left, led=0: Right * * 8 two color LED's are connected to SEG8 and SEG9 pins at addresses: * * LED1 Address 0x01 * LED2 Address 0x03 * ... ... * LED8 Address 0x0F * * * BIT0 | BIT1 | * (SEG9) |(SEG10)| COLOR * --------+-------+------------- * 0 | 0 | OFF * 0 | 1 | GREEN * 1 | 0 | RED * 1 | 1 | NOT ALLOWED */ void TM1638_setColorLED(uint8_t led, LedColor color); /*! * \brief Turn multiple color LED's on * \param leds Byte with 8 LED's * \param color * 0: Off * 1: Green * 2: Red */ void TM1638_colorLEDsOn(uint8_t leds, LedColor color); /*! * \brief Turn multiple color LED's off * \param leds Byte with 8 LED's */ void TM1638_colorLEDsOff(uint8_t leds); // Refresh 7-segment display void TM1638_refresh(void); // Control 7-segment dots /*! * \brief Turn dot LED on * \param pos Position 0..7 */ void TM1638_dotOn(uint8_t pos); /*! * \brief Turn dot LED off * \param pos Position 0..7 */ void TM1638_dotOff(uint8_t pos); /*! * \brief Turn multiple dots on or off * \param dots Byte with dots */ void TM1638_setDots(uint8_t dots); // Set/get position for print functions /*! * \brief Set print position * \param pos Position 0..7 */ void TM1638_setPrintPos(uint8_t pos); /*! * \brief Get print position * \return Position 0..7 */ uint8_t TM1638_getPrintPos(); // Write /*! * \brief Write LED segments of a digit * \param pos Position 0..7 * \param segments Segment LED's */ void TM1638_setSegmentsDigit(uint8_t pos, uint8_t leds); /*! * \brief Write digit * \param pos Position 0..7 * \param digit Value 0..9, A..F */ void TM1638_setDigit(uint8_t pos, uint8_t digit); /*! * \brief Write digit position * \param pos Digit number 0 is most right digit, 7 is most left digit */ /////////////////////////////////////////////////////// // // // Led - positions 1,3,5,7,9,11,13,15 // // 0 - turn led ON, 1 - turn OFF // // 7Seg - positions 0,2,4,6,8,10,12,14 // // // /////////////////////////////////////////////////////// void TM1638_writeDigit(uint8_t pos); void writeUnsignedValue(uint32_t value, uint8_t radius, uint8_t maxDigits,uint8_t pad); void writeSignedValue(int32_t value, uint8_t radius, uint8_t maxDigits); /*! * \brief Get number of digits of a signed 32-bit value * \param value 32-bit signed value * \param radius Radius * \return Number of digits */ uint8_t getNumDigits(uint32_t value, uint8_t radius); // Display unsigned value 8, 16 or 32-bit with optional padding /*! * \brief Print uint8_t with radius, maximum number of digits and padding digits * \param value Display value 0..255 * \param radius Radius 2 for binary, 10 for decimal, 16 for HEX * \param maxDigits Maximum number of digits * \param pad Number of digits starting with a 0 */ void TM1638_print_uint8(uint8_t value, uint8_t radius, uint8_t maxDigits, uint8_t pad); void TM1638_print_uint16(uint16_t value, uint8_t radius, uint8_t maxDigits, uint8_t pad); void TM1638_print_ulong(unsigned long value, uint8_t radius, uint8_t maxDigits, uint8_t pad); // Display signed value 8, 16 or 32-bit void TM1638_print_int8(int8_t value, uint8_t radius, uint8_t maxDigits); void TM1638_print_int16(int16_t value, uint8_t radius, uint8_t maxDigits); void TM1638_print_long(long value, uint8_t radius, uint8_t maxDigits); void TM1638_printString(const char *TextString, unsigned int Offset); void Write1638( char Data); void WriteCmd(unsigned char cmd); void WriteData(unsigned char Adress,unsigned char Data); #endif /* SRC_TM1638_H_ */ |