在 ti 论坛上找不到任何 max7219驱动7段的示例、因此我找到了一个在 PIC 微控制器上工作的代码。 然后我将代码转换为 msp430g2553。 但没有发生任何事情。这是网站(https://microcontrollerslab.com/max7219-interfacing-8-digit-7-segment-display-pic16f877a/)。
这是我的代码:
#include "io430.h"
#define SPI_SIMO BIT2
#define SPI_CLK BIT4
#define SPI_CS BIT3 //加载或/CS
#define DECODE_MODE_REG 0x09
#define Intese_REG 0x0A
#define SCAN_LIMIT_REG 0x0B
#define SHUTDOWN_REG 0x0C
#define DISPLAY_TEST_REG 0x0F
///----------------------------------
#define DISABLE_DE解码0x00
#define decode_all 0xFF
#define 亮度0x0F
#define SCAN_LOW_N半 字节0x03
#define SCAN_All_digits 0x0F
#define SHUTDOWN_MODE 0x00
#define NORMAL 运行0x01
#define DISABLE_TEST_MODE 0x00
#define ENABLE_TEST_MODE 0x01
void SPI_Init (void)//SPI 初始化
{
UCA0CTL1 |= UCSWRST;// USCI 处于复位状态(用于 CONFIG)
//前沿+ MSB 优先+主器件+同步模式(SPI)
UCA0CTL0 = UCCKPH + UCMSB + UCMST + UCSYNC;
UCA0CTL1 |= UCSSEL_2;// SMCLK 作为时钟源
UCA0BR0 |= 0x01;// SPI 速度(与 SMCLK 相同)
UCA0BR1=0;
P1SEL |= SPI_SIMO + SPI_CLK;//设置 USCI 的端口引脚
P1SEL2 |= SPI_SIMO + SPI_CLK;
UCA0CTL1 &=~Ω UCSWRST;//清除 USCI 复位状态
}
void MAX7219_write (char reg1、char data1)
{
P1OUT &=~(SPI_CS);
_DELAY_CYCLES (50);
UCA0TXBUF = reg1;
while (UCA0STAT 和 UCBUSY);
UCA0TXBUF = data1;
while (UCA0STAT 和 UCBUSY);
P1OUT |= SPI_CS;
}
void MAX7219_init()
{
SPI_Init();
MAX7219_WRITE (DECODE_MODE_REG、DECODE_ALL);
MAX7219_WRITE (亮度寄存器、亮度);
MAX7219_WRITE (SCAN_LIMIT_REG、SCAN_ALL_DIGITS);
MAX7219_WRITE (SHUTDOWN_REG、NORMAL 运行);
MAX7219_WRITE (DISPLAY_TEST_REG、ENABLE_TEST_MODE);
MAX7219_WRITE (DISPLAY_TEST_REG、DISABLE_TEST_MODE);
}
void Max7219Print (无符号长数、无符号短数 OfDigits)
{
长 I;
for (i=1;number>0||i-NumberOfDigits<=0;number/=10、i++)
{
P1OUT &=~(SPI_CS);
_DELAY_CYCLES (50);
UCA0TXBUF = I;
while (UCA0STAT 和 UCBUSY);
UCA0TXBUF =编号%10;
while (UCA0STAT 和 UCBUSY);
P1OUT |= SPI_CS;
}
}
void Max7219DisplayOff()
{
P1OUT &=~(SPI_CS);
_DELAY_CYCLES (50);
UCB0TXBUF = SHUTDOWN_REG;
while (UCA0STAT 和 UCBUSY);
UCB0TXBUF = DISABLE_DEBUG;
while (UCB0STAT 和 UCBUSY);
P1OUT |= SPI_CS;
}
void Max7219DisplayOn()
{
P1OUT &=~(SPI_CS);
_DELAY_CYCLES (50);
UCB0TXBUF = SHUTDOWN_REG;
while (UCB0STAT 和 UCBUSY);
UCB0TXBUF = NORMAL 运行;
while (UCB0STAT 和 UCBUSY);
P1OUT |= SPI_CS;
}
void Max7219UpdateIntensity (char OnValue)
{
if (OnValue>=0 && OnValue<=15)
{
P1OUT &=~(SPI_CS);
_DELAY_CYCLES (50);
UCB0TXBUF = 0x0a;
while (UCB0STAT 和 UCBUSY);
UCB0TXBUF = OnValue;
while (UCB0STAT 和 UCBUSY);
P1OUT |= SPI_CS;
}
}
unsigned long i;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
P1DIR |= SPI_SIMO + SPI_CLK + SPI_CS;
P1OUT &=~(SPI_CS);// MAX7221芯片选择为高电平无效
SPI_Init();
MAX7219_init();
Max7219DisplayOn();
_DELAY_CYCLES (100000);
MAX7219_init();
_DELAY_CYCLES (1000);
while (1)//循环永远
{
对于(i=0;i<9999;i++)//从0到99999计数并显示在8 7个段上
{
Max7219Print (I、8);
_DELAY_CYCLES (1000);
}
}
}