请问一下,我使用STM32f103芯片驱动MAX7219控制四位共阴极数码管,在网上搜的代码一直没现象,改了一天,仍然一直是全亮,感觉引脚接的没问题呀,为什么用不了
#include "stm32f10x.h"
#include "sys.h"
#include "Delay.h"
unsigned char disp_table[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x77,0x1f,0x4e,0x3d,0x01,0x00};//断码表
//引脚初始化
void MAX_GPIO_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP ;
GPIO_Init(GPIOA,&GPIO_InitStruct);
PAout(6) = 1; PAout(5) = 0; PAout(7) = 0;
}
void w_max7219(unsigned char addr ,unsigned char wdata)
{
unsigned char temp ,i=0 ,j ,k;
PAout(6) = 0;//片选
while(i < 16)
{
if(i < 8) temp = addr; //先写入MAX7219内部寄存器地址,再向内部寄存器写入操作数值
else temp = wdata;
for(j = 0 ; j < 8; j++)
{
PAout(5) = 0;
if((temp & 0x80) == 0x80) PAout(7) = 1; //先发送数据的最高位
else PAout(7) = 0;
Delay_us(1);//时钟频率高的单片机需曾加延时时间,此处为12MHz
PAout(5) = 1;
Delay_us(10);
temp = temp << 1;
}
i += 8;
}
PAout(6) = 1;//片选
}
void Init_max7219()
{
w_max7219(0x0a ,0x07); //显示亮度,取值范围0~f
w_max7219(0x0b ,0x04); //四位扫描显示,取值范围0x01~0x07
w_max7219(0x09 ,0x00); //译码方式,0x00为不译码,0xff为译码[!--empirenews.page--]
w_max7219(0x0c ,0x01); //操作方式,0x00为低功耗模式,0x01为正常操作模式
w_max7219(0x0f ,0x00); //显示状态,0x00为正常显示,0x01为显示测试
Delay_ms(2);
}
int main()
{
MAX_GPIO_Init();
Init_max7219();
while(1)
{
w_max7219(0x01 ,disp_table[2]);
}
}
下面是引脚连接
MAX7219芯片上边是断码输出端