关于74HC595驱动的C51语言不能正常显示
这个硬件是没有问题,我是在实验板上做实验,原实验板显示自带的程序能正常显示,但是我改动后想显示一个数组,结果显示出来数组不能循环,请师傅看一下是哪里问题,谢谢了
/************************************************************************************
关于HC595汇编驱动参考“静态显示(74HC595驱动
*************************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define NOP() _nop_() /* 定义空指令 */
//SPI IO
sbit MOSIO =P3^4;
sbit R_CLK =P3^5;
sbit S_CLK =P3^6;
void delay1s(void); //函数声名
void HC595SendData(unsigned char dat);
unsigned char code table[]={ 0x55,0xaa,0x5a,0xa5} ; //定义电机驱动数组 包含前进,后退,左转,右转
main()
{ unsigned char i;
while(1)
{
for (i=0;i<4;i++) //4个数据,循环4次
{
HC595SendData (table[i]);
delay1s();
}
delay1s();
}
}
/*****************************************************************************
* 延时子程序 *
* *
******************************************************************************/
void delay1s(void) //误差 0us
{
unsigned char a,b,c;
{
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_();
}
}
/*********************************************************************************************************
** 函数名称: HC595SendData
** 功能描述: 向SPI总线发送数据
*********************************************************************************************************/
void HC595SendData(unsigned char dat)
{
unsigned char j;
for(j=0;j<8;j++)
{
if((dat<<j)&0x80) MOSIO=1; //set dataline high 0X80 最高位与SendVal左移的最高位 进行逻辑运算
else MOSIO=0; // 如果为真 MOSIO = 1
S_CLK=0;
NOP(); //移位寄存器时钟
NOP();
S_CLK=1;
}
R_CLK=0;
NOP(); //存储寄存器时钟
NOP();
R_CLK=0;
} |