|
关于MAX7912驱动数码管的问题,论坛上基本找到的都会51驱动例程。
实际上我测试过根据资料也没有什么问题,但是如果一旦移植到32,确发现不行。检查时序没有问题,百思不得其解,去网上找资料找到的都是硬件spi。
看到spi速率的问题时突然想到8051和stm32单片机之间的区别,就是主频问题,f1主频71M,基本8051只有1M,max7912是否也有反应速率的问题呢?于是将模拟IO口的工作频率设置为10M,发现问题解决。
部分源码 - void Write7219(unsigned char address,unsigned char dat)
- {
- unsigned char i;
- Max7219_CS(0); //拉低片选线,选中器件
- //发送地址
- for (i=0;i<8;i++) //移位循环8次
- {
- Max7219_CLK(0); //清零时钟总线
- if((address&0x80))
- {
- Max7219_DIN(1);
- }
- else
- {
- Max7219_DIN(0);
- }
- address<<=1; //左移一位
- Max7219_CLK(1); //时钟上升沿,发送地址
- }
- //发送数据
- for (i=0;i<8;i++)
- {
- Max7219_CLK(0);
- if((dat&0x80))
- {
- Max7219_DIN(1);
- }
- else
- {
- Max7219_DIN(0);
- }
- dat<<=1;
- Max7219_CLK(1); //时钟上升沿,发送数据
- }
- Max7219_CS(1); //发送结束,上升沿锁存数据
- }
- //MAX7219初始化,设置MAX7219内部的控制寄存器
- void Max7219Init(void)
- {
- MAX7912_GPIO_Config();
- Write7219(SHUT_DOWN,0x01); //开启正常工作模式(0xX1)
- Write7219(DISPLAY_TEST,0x00); //选择工作模式(0xX0)
- Write7219(DECODE_MODE,0xff); //选用全译码模式
- Write7219(SCAN_LIMIT,0x07); //8只LED全用
- Write7219(INTENSITY,0x04); //设置初始亮度
- }
复制代码 完整源码:
stm32_max7219code.zip
(307.5 KB, 下载次数: 0, 售价: 1 金币)
|
|