我用了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--);
} |