照着书上写的一个spi控制595的程序,为什么有问题呢?哪位高手能指点一下呢?

照着书上写的一个spi控制595的程序,为什么有问题呢?哪位高手能指点一下呢?,第1张

没说是什么问题!

【1】HC595输出不对头?...解决办法:选罩如择了某位八段,要要延迟一段时间,大约1us这样的,以便保证SPI输出的数据的前沿在SPI_CS之后。另外一个产生错误的可能是“不断检测SPI_READY位”!建议不要接着检测,而是估计发送一个字节所花的时间,再考虑一个延迟。例如,发送一个字节为物埋启10us,则检测之前先延迟6us左右,再检测SPI_READY标志,不影响你的发送速率。这样做的原因是很多SPI核设计不是很好,还有可能是ARM7的IO速率与指令速率匹配。一个IO_R/W周期很长,而一个指令周期很短;

【2】位码不对?...................解决办法:严格检查PORT_DIR,保证引脚配置正确。

--------

长时间不鼓捣这东西了,具体液闷还得请你自己细致测验。

//程序有不足。

//

//下面是一个判宏凳595输出的程序,供参考。

//

/********************************************************/

/*

*/

/*将显示数据送入74HC595内部移位寄存器

*/

/*

*/

/********************************************************/

void WR_595(uchar temp)

{

uchar j

for (j = 8j >0j--) {

SDATA_595 = (temp &0x80)

SCLK_595 = 0

//上升沿发生移位

temp = temp <<1

SCLK_595 = 1

}

}

/********************************************************/

/*

*/

/*将移位寄存器内的掘旅数绝宽据锁存到输出寄存器并显示

*/

/*

*/

/********************************************************/

void OUT_595(void)

{

RCK_595 = 1

//上升沿将数据送到输出锁存器

_nop_() _nop_()

RCK_595 = 0

}

/********************************************************/

/*

*/

/*主函数

*/

/*

*/

/********************************************************/

main()

{

uchar tem

uchar i, m

SCLK_595 =0

RCK_595 = 0

oe_595 = 0

for(i = 0i <8i++) {

tem = DAT[i]

//取显示数据

WR_595(tem)

OUT_595()

delay(1000)

}

while(1)

}

对于C8051F330而言,你需要设置好SPI的时序,极性以及空闲时的状态,一般在送完一个字节后,要等待spi中断后,在能进行第二次送数据

我截取部分程序给你看看

void SPI_INT(void) //SPI初始化

{

SPI0CFG=0x40

SPI0CN=0x01//0000 0001最后一位是SPI使能位 SPI工作在三线主方式

SPI0CKR=0x0f//SPI 时钟频率设置为100kHz 0x63

IE &= 0xbf //关燃锋闭SPI中断

}

void pio_int(void) // 端口配置皮斗晌

{

XBR0=0x06

XBR1=0x40

P0MDIN=0xff //禁止模拟输入,0为模拟,1为数字

P0MDOUT=0x0d //0为开漏,1为推挽(ff)

P0SKIP=0x08

P1MDIN=0xff

P1MDOUT=0xff//低四位用于138

P1SKIP=0x00

P0=0xff

P1=0xff

}

/***********************/

SPI0DAT = sm[i]

while(!SPIF)

SPIF=0

//这部分就是SPI的传输指令,送一个字节后,等待中断,然后清中断

标志,然后再送

//按照你想要的东西,就可以写成

for(i=0i<12i++)

{

SPI0DAT = sm[i]

while(!SPIF)

SPIF=0

CLK = 1//这个就定义成你595的所存输出

CLK = 0

delay(1)//像你送一个595显示的话,还要延时一下

//如有更多的,就送多次再延时

}

/************************/

我空间有个点阵驱动的程序,销毁你可以去看看

用的就是你的这个单片机

日志名字

QQ空间247519442

C8051F330 16*16点阵(SPI 、SMBus、I2C)PCF8563


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12373468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存