打印

74HC595不能正常显示,请师傅帮忙看一下

[复制链接]
1776|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rdfeps|  楼主 | 2014-5-3 14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于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;

}

相关帖子

沙发
wangch_sh| | 2014-5-3 17:20 | 只看该作者
硬件电路怎样的?

使用特权

评论回复
板凳
rdfeps|  楼主 | 2014-5-3 20:42 | 只看该作者
wangch_sh 发表于 2014-5-3 17:20
硬件电路怎样的?

硬件是实验板,用它带的程序试过了,没有问题

使用特权

评论回复
地板
jinxihexi| | 2014-5-4 08:39 | 只看该作者
延时程序应该有点问题,循环语句下面超过两句的话要加{}的,而你加的位置不对

使用特权

评论回复
5
yimaoqian01| | 2014-5-8 13:02 | 只看该作者
有点问题,还在研究中。

使用特权

评论回复
6
rdfeps|  楼主 | 2014-5-10 11:25 | 只看该作者
R_CLK=0;
  NOP();   //存储寄存器时钟
  NOP();
  R_CLK=0;     这里应该是=1
  谢谢各位了

使用特权

评论回复
7
uconny720| | 2014-5-11 14:34 | 只看该作者

使用特权

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

本版积分规则

9

主题

23

帖子

1

粉丝