打印

PIC+zlg7289b

[复制链接]
988|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
weimianhao|  楼主 | 2014-5-23 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用了pic18f4560和7289通过spi总线对八个数码管进行控制,程序如下,查了好多资料,一直不知道为什么单个数码管不能正常点亮,感觉是时序的问题,但是按照zlg7289的手册设置,没效果。mcu是4Mhz的晶振,求大虾指点。
#include<p18f4620.h>
#include "config.h"

const unsigned char table0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(unsigned int t);
void spi_init();
void seg_init();
void main()
{  
   //unsigned int i,j;
   unsigned int order=0b10010000;
   seg_init();
   delay(1);
   spi_init();
   
           while(1)
       {  
           PORTBbits.RB4=0; //选择CS1,低电平有效。
           SSPBUF=order;                        
                   while(!PIR1bits.SSPIF){};
                   PIR1bits.SSPIF=0;
           delay(10);


               SSPBUF=table0[1];
           while(!PIR1bits.SSPIF){};
                   PIR1bits.SSPIF=0;
           PORTBbits.RB4=1;
           delay(100);
      
       }
       
}
void seg_init()
{
  TRISB=0b11000001;//片选信号,选择CS1,低电平有效。
  PORTBbits.RB4=0; //选择CS1,低电平有效。
  PORTBbits.RB3=1; //CS2,选择CS1,低电平有效。
  PORTBbits.RB2=1; //CS3,选择CS1,低电平有效。
  TRISC=0b00010000;//SCK为RC3、SPI_DIO 为RC4和RC5
  PORTC=0x00;

   Nop();
   
}
void spi_init()
{
SSPSTAT=0xc0;//采样位和时钟选择
SSPCON1=0x30;//串口引脚配置和时钟极性选择、同步串口模式选择。
}
void delay(unsigned int t)//t*500us
{
  unsigned char j,k;   
for(j=102;j>0;j--)      
for(k=41;k>0;k--);   
   

}
沙发
yewuyi| | 2014-5-23 10:00 | 只看该作者
你说个单个数码管不能点亮,是不是想表达多个已经点亮了?

ZLG网站上有DEMO代码,自己参照改一下即可。

使用特权

评论回复
板凳
weimianhao|  楼主 | 2014-5-23 10:06 | 只看该作者
是啊,该亮的没亮,不该亮的乱闪,您能帮我看看,spi总线的设置对吗?我看了手册的51控制zlg7289的,但是pic本身比51的功能强了好多。不知道哪里设置有问题。

使用特权

评论回复
地板
kuheye| | 2014-5-28 11:32 | 只看该作者
个人经验,建议买一个逻辑分析仪器,也不贵
将电路板SPI的逻辑录下来,仔细对照,事情就会变得简单了

我曾经使用SPI读写Flash,就是用这种方法,后来发现犯了低级错误。

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝