◀ Previous Next ▶ Up ▲


witpoko.com


อยากทราบวิธีการใช้ IC MAX7219 ครับช่วยตอบด้วยนะครับ

คือผมอยากจะทราบวิธีการใช้(เขียนโปรแกรมภาษาซี) IC MAX7219 โดยผมใช้ต่อกับ 7-segment 8ตัวครับ ถ้าเป็นไปได้ขอดูตัวอย่างซอส์โค้ตด้วยนะครับขอบคุณครับ

จากคุณ : meeko -[ 8 ก.ค. 48 - 13:45:20 A:161.246.3.64 X:161.246.1.32 ]



    ความคิดเห็นที่ 3

    dowload datasheet มาดูคับผมจำไม่ได้ แต่จะมีคำสั่ง
    ที่ต้องใช่ในการเคลียร์หน้าจอ ดูนี้และแก้ไขตาม datasheet ใช่ keil c เป็นซอร์ส ให้ไฟมันไล่ตาม segment แบบ loop
    ////////////////////////////////////////////////

    #include <reg51.h>
    #include <absacc.h>
    #include <ctype.h>
    #include <intrins.h>
    #include <math.h>
    #include <stdarg.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    /********** I/O PORT **********/

    sbit MXCLK = P1^0;
    sbit MXLDB = P1^1;
    sbit MXDAT = P1^2;

    /********** INT-RAM WORKING AREA **********/

    unsigned char DISBUF[8];
    unsigned char STRBUF[8+1];

    /********** FUNCTION **********/

    void dmsec (unsigned int count) { // mSec Delay 11.0592 Mhz
    unsigned int i; // Keil v5.2
    while (count) {
    i = 115; while (i>0) i--;
    count--;
    }
    }

    // max7219 send one byte

    void mxbyte (unsigned char add,unsigned char dat) {
    unsigned char i;
    for (i=1;i<=8;i++) { // 8 bit address
    MXDAT = add & 0x80;
    add = add << 1;
    MXCLK = 1;
    MXCLK = 0;
    }
    for (i=1;i<=8;i++) { // 8 bit data
    MXDAT = dat & 0x80;
    dat = dat << 1;
    MXCLK = 1;
    MXCLK = 0;
    }
    MXLDB = 1; // load clock
    MXLDB = 0;
    }

    void mxset (void) { // max7219 setup
    MXCLK = 0;
    MXLDB = 0;
    mxbyte (0x0f,0); // display - normal
    mxbyte (0x0c,1); // shutdown - normal
    mxbyte (0x09,0); // decode - no decode
    mxbyte (0x0a,8); // intensity
    mxbyte (0x0b,7); // scan limit - 8 digit
    }

    void mxload (void) { // max7219 load to display
    mxset ();
    mxbyte (1,DISBUF[0]);
    mxbyte (2,DISBUF[1]);
    mxbyte (3,DISBUF[2]);
    mxbyte (4,DISBUF[3]);
    mxbyte (5,DISBUF[4]);
    mxbyte (6,DISBUF[5]);
    mxbyte (7,DISBUF[6]);
    mxbyte (8,DISBUF[7]);
    }

    unsigned char code SEGTAB[16] = {0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,
    0x7F,0x7B,0x77,0x1F,0x4E,0x3D,0x4F,0x47};
    // max7219 segment code
    unsigned char htosx (unsigned char hex) { // change hex to segment
    return (SEGTAB[hex]);
    }

    void ltos (unsigned long dat) { // change long to segment
    unsigned char i; // to disbuf[8]
    sprintf (STRBUF,"%08lu",dat); // long to string
    for (i=0;i<=7;i++) { // string to segment
    DISBUF[i] = htosx (STRBUF[i] & 0x0f);
    }
    }

    /********** MAIN **********/

    void main (void) {
    unsigned char a,i,j;
    unsigned long l;
    while (1) {
    a = 1; // start segment = 1
    for (i=1;i<=24;i++) { // 3x8 loop
    for (j=0;j<=7;j++) { // load to DISBUF
    DISBUF[j] = a;
    }
    mxload (); // load to max719
    dmsec (250); // delay 0.25 sec
    a = a << 1; // shift segment
    if (a==0) a = 1;
    }
    for (l=12345678;l<=12347777;l++) {
    ltos (l);
    mxload ();
    }
    dmsec (2000);
    }
    }


    จากคุณ : good - [ 10 ก.ค. 48 19:27:36 A:202.28.21.4 X: ]
 
 

    ความคิดเห็นที่ 4

    ขอบคุณคับคุณ good จะลองดูครับ

    จากคุณ : meeko - [ 10 ก.ค. 48 21:57:23 A:203.172.56.80 X: ]
 
 



กระทู้ยอดนิยม