[PIC®/AVR®/dsPIC®产品]

第一期评估板驱动MAX7219

[复制链接]
750|9
手机看帖
扫描二维码
随时随地手机跟帖
Cjy_JDxy|  楼主 | 2020-3-25 19:59 | 显示全部楼层 |阅读模式
本帖最后由 Cjy_JDxy 于 2020-3-25 20:03 编辑

今晚搞了一下MAX7219。代码:
/*
* File:   main.c
* Author: Administrator
*
* Created on November 24, 2019, 5:05 PM
*/
// CONFIG1L
#pragma config FEXTOSC = ECH    // External Oscillator mode Selection bits (EC (external clock) above 8 MHz; PFM set to high power)
#pragma config RSTOSC = EXTOSC  // Power-up default value for COSC bits (EXTOSC operating per FEXTOSC bits (device manufacturing default))
// CONFIG1H
#pragma config CLKOUTEN = OFF   // Clock Out Enable bit (CLKOUT function is disabled)
#pragma config CSWEN = ON       // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
// CONFIG2L
#pragma config MCLRE = EXTMCLR  // Master Clear Enable bit (MCLR pin (RE3) is MCLR)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (Power up timer disabled)
#pragma config LPBOREN = OFF    // Low-power BOR enable bit (Low power BOR is disabled)
#pragma config BOREN = SBORDIS  // Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)
// CONFIG2H
#pragma config BORV = VBOR_190  // Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 1.90V)
#pragma config ZCD = OFF        // ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
#pragma config PPS1WAY = ON     // PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
#pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)
// CONFIG3L
#pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
#pragma config WDTE = OFF       // WDT operating mode (WDT Disabled)
// CONFIG3H
#pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software control; keyed access not required)
#pragma config WDTCCS = SC      // WDT input clock selector (Software Control)
// CONFIG4L
#pragma config WRT0 = OFF       // Write Protection Block 0 (Block 0 (000800-003FFFh) not write-protected)
#pragma config WRT1 = OFF       // Write Protection Block 1 (Block 1 (004000-007FFFh) not write-protected)
#pragma config WRT2 = OFF       // Write Protection Block 2 (Block 2 (008000-00BFFFh) not write-protected)
#pragma config WRT3 = OFF       // Write Protection Block 3 (Block 3 (00C000-00FFFFh) not write-protected)
#pragma config WRT4 = OFF       // Write Protection Block 4 (Block 4 (010000-013FFFh) not write-protected)
#pragma config WRT5 = OFF       // Write Protection Block 5 (Block 5 (014000-017FFFh) not write-protected)
#pragma config WRT6 = OFF       // Write Protection Block 6 (Block 6 (018000-01BFFFh) not write-protected)
#pragma config WRT7 = OFF       // Write Protection Block 7 (Block 7 (01C000-01FFFFh) not write-protected)
// CONFIG4H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
#pragma config SCANE = ON       // Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
#pragma config LVP = ON         // Low Voltage Programming Enable bit (Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored)
// CONFIG5L
#pragma config CP = OFF         // UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
#pragma config CPD = OFF        // DataNVM Memory Code Protection bit (DataNVM code protection disabled)
// CONFIG5H
// CONFIG6L
#pragma config EBTR0 = OFF      // Table Read Protection Block 0 (Block 0 (000800-003FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection Block 1 (Block 1 (004000-007FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF      // Table Read Protection Block 2 (Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF      // Table Read Protection Block 3 (Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks)
#pragma config EBTR4 = OFF      // Table Read Protection Block 4 (Block 4 (010000-013FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR5 = OFF      // Table Read Protection Block 5 (Block 5 (014000-017FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR6 = OFF      // Table Read Protection Block 6 (Block 6 (018000-01BFFFh) not protected from table reads executed in other blocks)
#pragma config EBTR7 = OFF      // Table Read Protection Block 7 (Block 7 (01C000-01FFFFh) not protected from table reads executed in other blocks)
// CONFIG6H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>
#include <pic18f47q10.h>
#define uchar unsigned char
#define uint unsigned int

#define DIN_0           RD1=0
#define DIN_1           RD1=1
#define LOAD_0           RD2=0
#define LOAD_1           RD2=1
#define CLK_0           RD3=0
#define CLK_1           RD3=1
#define NoOp   0x00           //空操作寄存器
#define Digit0 0x01           // 数码管1寄存器
#define Digit1 0x02           // 数码管2寄存器
#define Digit2 0x03           // 数码管3寄存器
#define Digit3 0x04           // 数码管4寄存器
#define Digit4 0x05           // 数码管5寄存器
#define Digit5 0x06           // 数码管6寄存器
#define Digit6 0x07           // 数码管7寄存器
#define Digit7 0x08           // 数码管8寄存器
#define DecodeMode 0x09       // 译码模式寄存器
#define Intensity 0x0a        // 亮度寄存器
#define ScanLimit 0x0b        // 扫描位数寄存器
#define ShutDown 0x0c         // 低功耗模式寄存器
#define DisplayTest 0x0f      // 显示测试寄存器
#define ShutdownMode 0x00     // 低功耗方式
#define NormalOperation 0x01  // 正常操作方式
#define ScanDigit 0x07        // 扫描位数设置,显示8位数码管
#define DecodeDigit 0xff      // 译码设置,8位均为BCD码
#define IntensityGrade 0x0a   // 亮度级别设置
#define TestMode 0x01         // 显示测试模式
#define TextEnd 0x00          // 显示测试结束,恢复正常工作模式
#define _nop_()   asm("nop")
void delay(uint x)
{
    uint i,j;
    for(i=x;i>0;i--)
        for(j=0;j<10;j++);
}
//*************向MAX7219写入字节(8位)********************//
void SendChar (uchar ch)
{
    uchar i,temp;
    _nop_();
    for (i=0;i<8;i++)
    {
         temp=ch&0x80;
         ch=ch<<1;
         if(temp)
         {
            DIN_1;
            CLK_0;
            CLK_1;
         }
         else
         {
            DIN_0;
            CLK_0;
            CLK_1;
         }
    }
}
//**************向MAX7219写入字(16位)***************************** //
void WriteWord (uchar addr,uchar num)
{
    LOAD_0;
    _nop_();
    SendChar(addr);
    _nop_();
    SendChar(num);
    _nop_();
    LOAD_1;                            // 锁存进相应寄存器
}
//*********************** MAX7219初始化 ******************//
void InitDisplay(void)
{
    WriteWord (ScanLimit,ScanDigit);         // 设置扫描界限
    WriteWord (DecodeMode,DecodeDigit);      // 设置译码模式
    WriteWord (Intensity,IntensityGrade);    // 设置亮度
    WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式
}
void main(void)
{
    TRISD=0;
    ANSELD=0;
    ODCOND=0;
    SLRCOND=0;
    ADCON0=0;
    //WPUE=0x04;
    InitDisplay (); // MAX7219初始化
    WriteWord(DisplayTest,TestMode);  // 开始显示测试,点亮所有LED
    delay(1500);                      // 延时约1.5s
    WriteWord (DisplayTest,TextEnd);  // 退出显示测试模式
    WriteWord (Digit0,0);
    WriteWord (Digit1,1);
    WriteWord (Digit2,2);
    WriteWord (Digit3,3);
    while(1)
    {
        
    }
    return;
}效果图:
2.jpg
MAX7219模块是我自己做的,原理图PCB如下:
3.jpg 4.jpg


使用特权

评论回复
21ic小喇叭| | 2020-3-26 09:42 | 显示全部楼层
感谢分享,奖励您100家园币,家园币可以兑换礼品或抽奖,欢迎体验~

使用特权

评论回复
Cjy_JDxy|  楼主 | 2020-3-26 11:15 | 显示全部楼层
21ic小喇叭 发表于 2020-3-26 09:42
感谢分享,奖励您100家园币,家园币可以兑换礼品或抽奖,欢迎体验~

谢谢小喇叭。可是我的家园币怎么没变多呀

使用特权

评论回复
评论
Cjy_JDxy 2020-3-29 16:55 回复TA
@21ic小喇叭 :收到 
21ic小喇叭 2020-3-26 11:29 回复TA
刚刚重新发了100,再看看? 
accepta| | 2020-3-29 16:17 | 显示全部楼层
感谢楼主分享!学习一下

使用特权

评论回复
ichenqiang| | 2020-3-29 17:21 | 显示全部楼层
max7219假货太多了,我做了个各种干扰,最好换了ht16k33

使用特权

评论回复
xiaoqizi| | 2020-4-2 16:21 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
keaibukelian| | 2020-4-2 16:21 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
labasi| | 2020-4-2 16:22 | 显示全部楼层
非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3520

帖子

19

粉丝