AVRSTM32کدویژن

راه اندازی ماژول TM1638

راه اندازی ماژول LED&KEY توسط درایور سون سگمنت TM1638

5/5 - (9 امتیاز)

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
ماژول tm1638
شماتیک tm1638
شماتیک tm1638

امکانات ماژول TM1638

  • داری سون سگمنت 8 رقمی.
  • دارای 8 LED رنگ قرمز 3 میلی متری.
  • دارای 8 تک سوئیچ .
  • ولتاژ تغذیه 5 ولت
  • کنترلر TM1638
  •  کنترل روشنایی سون سگمنتها و LED ها
  •  رابط  3 خط سریال (CLK، STB، DIO).
  • ابعاد  76 در 50 میلی متر.

پایه ها /PINOUT ماژول TM1638

پایه های ماژول به شرح زیر می باشد .

tm1638 pinout
tm1638 pinout

راه اندازی ماژول TM1638 با STM32 و Codevision

کتابخانه برای ماژول tm1638 با STM32 به همراه یک پروژه و مثال استفاده از توابع می باشد .
کتابخانه TM1638 توسط توابع HAL نوشته شده است.
تنظیمات و معرفی پایه ها توسط نرم افزار CubeMX انجام می شود . براحتی می توانید با معرفی سه پایه با نام های TM1638_DIO , TM1638_CLK , TM1638_STB و بدون تنظیمات اضافه دیگری ، ماژول را راه اندازی کنید .

تنظیم پایه های tm1638 برای stm32
تنظیم پایه های tm1638 برای stm32

در کامپایلر کدویژن پایه های ماژول TM1638 را به شکل زیر تعریف می کنیم . برای این کار براحتی می توانید فایل کتابخانه TM1638.h  را از منوی سمت چپ code navigator باز کنید و پایه هایی از میکروکنترلر avr  را که می خواهید به ماژول tm1638 متصل کنید ، به برنامه معرفی کنید .

پیکربندی پایه های ماژول TM1638 در کدویژن
پیکربندی پایه های ماژول TM1638 در کدویژن

توابع کتابخانه TM1638 برای STM32 و کدویژن به شرح زیر می باشد :

#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_ */
راه اندازی ماژول TM1638 با STM32
راه اندازی ماژول TM1638 با STM32

 

  نویسنده : حسین غیاثوند
 خرید و دانلود در لحظه :

نوشته های مشابه

مشترک شدن
اطلاع رسانی کن
guest
2 دیدگاه
قدیمی ترین
جدیدترین محبوب ترین
بازخورد داخلی
مشاهده همه نظرات