请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
工具/软件:Code Composer Studio
大家好!
我尝试计算 MSP430F5529LP 和 MAX7219 8x8点矩阵之间的 SPI 通信、但无法正常工作。
对于电平转换、我使用 JY-MCU 5V-3V 四通道转换模块 、保持3V 引脚未连接。
我用 这个代码在我的 MSP430G2553上标了出来、 这也是一样 的、所有东西都运行正常、但在5529上却不是。
我请求帮助!
以下是我的代码:
//
#include
#include
//
//
//原型
//
//*********
void SPI_max (uint8_t address、uint8_t data);
void init_MAX7219 (void);
// MAX7219寄存器地址
#define MAX_NOOP 0x00
#define MAX_DIGIT0 0x01
#define MAX_DIGIT1 0x02
#define MAX_DIGIT2 0x03
#define MAX_DIGIT3 0x04
#define MAX_DIGIT4 0x05
#define MAX_DIGIT5 0x06 #define
MAX_DIGITAL_DIIG0 0x08
#define
MAX 0x0X0X0X0XMAX #define MAX #define MAX_MART_VISIT 0x0X0X0X0X0X0X0X0X0X0X0X0X0_MAX #define MAX #define MAX #define MAX_VIST_VISIT #define MAX_VISIT #define 0x7 #define 0x20 MAX #define 0x (尚未完成):number[digit][row]
const uint8_t number[10][8]={
{0x3c、0x66、0x66、0x66、0x66、 0x66、0x66、0x3c}、// 0
{0x18、0x38、0x18、0x18、0x18、 0x18、0x18、0x3c}、// 1.
{0x3c、0x66、0x06、0x06、0x0c、 0x18、0x30、0x7E}、// 2
{0x3c、0x66、0x06、0x1E、0x1E、 0x06、0x66、0x3c}、// 3
};
uint8_t returnValue_SPI = 0x00;
uint8_t row、framecounter;
int main (void)
{
WDTCTL = WDTPW+WDTHOLD; //停止看门狗计时器
P6OUT |= BIT4; //为 CS
P6DIR 设置 P6.4 |= BIT4; //将 P6.4设置为输出方向
P3SEL |= BIT0+BIT2; // P3.0、2选项选择
//P3DIR |= BIT0+BIT1 + BIT2; //将 P3.0、2设置为输出方向
UCB0CTL1 |= UCSWRST; //**将状态机复位**
UCB0CTL0 |= UCMST+UCCKPH+UCMSB+UCSYNC;// 3引脚8位 SPI 主器件
// MSB
UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 = 0x02; ///2
UCB0BR1 = 0; //
UCB0CTL1 &=~UCSWRST; //**初始化 USCI 状态机**__DELAY_CYCLES
(100000);
init_MAX7219 ();
__DELAY_CYCLES (1000);
//一些 vars
uint8_t row、framecounter;
//在
(1)
{时永久循环
//循环浏览某些帧
for (framecounter=0;framecounter<4;framecounter++)
{
//使用来自 number[framecounter]的数据加载所有8行/位寄存器
对于(row=0;row<8;row++)
{
SPI_max (MAX_DIGIT0+row、number[framecounter][row]);
}
__DELAY_CYCLES (50000);//在显示下一帧
之前等待一位}
}
}//
发送16位为:xxxxaaadddddd (忽略、地址、数据)
//并使用低电平有效芯片选择
void SPI_max (uint8_t address、uint8_t data)
{
P6OUT &=~BIT4; // CS 低电平
_delay_cycles (50);
while (!(UCB0IFG&UCTXIFG)); //等待直到完成
UCB0TXBUF =(地址和0x0F);
while (!(UCB0IFG&UCTXIFG)); //等待直到完成
UCB0TXBUF =(数据);
while (!(UCB0IFG&UCTXIFG)); //等待直到完成
P6OUT |= BIT4; // CS 高
电平}
void init_MAX7219 (void)
{
//使用8x8 LED 矩阵初始化 MAX7219
SPI_max (MAX_NOOP、0x00);//无 OP (上电后似乎需要)
SPI_max (MAX_SCANLIMIT、0x07);//启用所有数字(当前每行8位始终需要)
SPI_max (MAX_Intensity、0x03);//显示强度(0x00至0x0F)
SPI_max (MAX_DECOMDE、0);// LED 矩阵没有 BCD 解码
//清除所有行/数字
SPI_max (MAX_DIGIT0、0);
SPI_max (MAX_DIGIT1、0);
SPI_max (MAX_DIGIT2、0);
SPI_max (MAX_DIGIT3、0);
SPI_max (MAX_DIGIT4、0);
SPI_max (MAX_DIGIT5、0);
SPI_max (MAX_DIGIT6、0);
SPI_max (MAX_DIGIT7、0);
SPI_max (MAX_SHUTDOWN、1);//唤醒振荡器/向上显示
}