//* **************************************************************************** //* **************************************************************************** // // 210728 8x8 Dot LED // // PIC16F18345, MAX7219 // // 2021/07/28 // // injayu // //* **************************************************************************** //* **************************************************************************** #include <16f18345.h> //* »ç¿ë PIC #fuses HS,NOMCLR //* 20M Å©¸®½ºÅ» »ç¿ë #use delay (clock = 20000000) //* 20M Å©¸®½ºÅ» »ç¿ë //*** LCD ¸¦ À§ÇÑ ÇÉ ¼³Á¤ ****************************************************** #pin_select U1TX = PIN_B7 //* TX ÇÉÀ» B7À¸·Î ¼³Á¤ #pin_select U1RX = PIN_B5 //* RX ÇÉÀ» B5·Î ¼³Á¤ #use rs232 (baud=19200, parity=N, xmit=PIN_B7, rcv=PIN_B5) //* UART ¼³Á¤ //****************************************************************************** //*** MAX7219 ÇÉ ¼³Á¤ *********************************************************** #define CLK_PIN PIN_C7 //* MAX7219 CLOCK ÇÉÀ» C7¿¡ ¿¬°á #define CS_PIN PIN_C6 //* MAX7219 CS(LOAD) ÇÉÀ» C6¿¡ ¿¬°á #define DIN_PIN PIN_C5 //* MAX7219 DIN ÇÉÀ» C5¿¡ ¿¬°á #define ENABLE output_low(CS_PIN) //* È°¼ºÈ Á¤ÀÇ #define DISABLE output_high(CS_PIN) //* ºñÈ°¼ºÈ Á¤ÀÇ #define CLK_L output_low(CLK_PIN) //* Clock Low Á¤ÀÇ #define CLK_H output_high(CLK_PIN) //* Clock High Á¤ÀÇ int8 datFont [50][8] = { //* È¸é ±Û¾¾ Á¤ÀÇ (2Â÷¿ø ¾î·¹ÀÌ) {0x3C,0x42,0x99,0xA5,0x81,0xA5,0x42,0x3C}, //* Good {0x3C,0x42,0xBD,0x81,0x81,0xA5,0x42,0x3C}, //* Bad {0x08,0x14,0x22,0x41,0x41,0x49,0x36,0x00}, //* Heart {0x00,0x08,0x14,0x22,0x3A,0x36,0x00,0x00}, //* Heart {0x00,0x00,0x08,0x1C,0x14,0x00,0x00,0x00}, //* Heart {0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00} //* Heart } ; //* **************************************************************************** //* *** MAX7219 ÇÔ¼ö ************************************************************ void write_byte_MAX7219 (int8 byData) //* 1 ¹ÙÀÌÆ® Data MAX7219¿¡ ¾²±â { int8 idxBit ; for (idxBit = 0;idxBit < 8;idxBit++) { rotate_left(& byData, 1) ; //* MSB¸¦ LSB·Î ¸¸µé±â output_bit (DIN_PIN, (byData & 0x01)) ; delay_us (5) ; //* ³¡ÀÚ¸® 0,1 ±¸ºÐÇÏ¿© Ãâ·Â CLK_H ; delay_us (5) ; CLK_L ; delay_us (5) ; //* Ŭ·° À» ¿Ã·È´Ù ³»¸² (óÀ½Àº ³»·Á°¡ ÀÖÀ½)) } } void write_MAX_7219 (int8 valAddr, int8 valData) //* MAX7219¿¡ ÁÖ¼Ò¿Í µ¥ÀÌŸ º¸³»±â { ENABLE ; delay_us(5) ; //* MAX7219 È°¼ºÈ¯ write_byte_MAX7219 (valAddr) ; //* MAX7219 ÁÖ¼Òº¸³»±â write_byte_MAX7219 (valData) ; //* µ¥ÀÌŸ (Value) º¸³»±â DISABLE ; delay_us (5) ; //* MAX7219 ºñÈ°¼ºÈ } void write_one_frame (int8 frmData) //* Á¦ÀÏ ¹ØÁÙºÎÅÍ Á¦ÀÏ À ÁÙ±îÁö ȸé Ãâ·Â { int8 idx_dig ; for (idx_dig = 0;idx_dig < 8;idx_dig++) { write_MAX_7219 (idx_dig+1, datFont[frmData][idx_dig]) ; //* Digit ÁÖ¼Ò¿Í ÇØ´ç °ªÀ» MAX7219¿¡ ¾²±â } } void init_MAX7219 (void) //* MAX7219 ÃʱâÈ { DISABLE ; CLK_L ; write_MAX_7219 (0x0C, 0x01) ; //* Shutdown Mode, 01:Normal Operation, 00: Shutdown write_MAX_7219 (0x0A, 0x04) ; //* Light Intensity write_MAX_7219 (0x0B, 0x07) ; //* Scan Limit } //****************************************************************************** //*** Start Main Function ****************************************************** void main (void) { int8 idx_no ; init_MAX7219 () ; delay_ms (1000) ; printf ("$#BL_100;") ; delay_ms (20) ; printf ("$#CLR_LCD;") ; delay_ms (20) ; while (1) { for (idx_no = 0;idx_no <= 4;idx_no++) { write_one_frame (idx_no) ; printf ("$2,1, No. : %2d;", idx_no) ; delay_ms (500) ; } } } //*** End Function ************************************************************* //******************************************************************************