找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3672|回复: 8
打印 上一主题 下一主题
收起左侧

74hc595程序不能运行,有电路和程序,请高手指教一下

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg51.h>
  2. #include<intrins.h>

  3. sbit RCK=P3^6;  //(11脚)上升沿时移位寄存器的数据进入数据存储寄存器.
  4. sbit SCK=P3^5;         //(12脚)上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。
  5. sbit SI=P3^4; //(14脚)串行数据输入


  6. void HC595SendData(unsigned char SendVal)//发送数据
  7. {  
  8.   unsigned char i;
  9.   for(i=0;i<8;i++)
  10.    {
  11. if((SendVal<<i)&0x80)
  12. {
  13. SI=1;
  14. }
  15. else
  16. {
  17. SI=0;
  18. }

  19. SCK=0;//从SCK产生一上升沿(移入数据)
  20. _nop_();
  21. SCK=1;
  22.    }
  23. }
  24. void HC595ShowData()//RCK产生一上升沿(输出数据)
  25. {
  26. RCK=0;
  27. _nop_();
  28. RCK=1;
  29. }
  30. void main()

  31. {
  32. HC595SendData(0xf0);
  33. HC595ShowData();
  34. }
复制代码


QQ截图20141106063330.png (36.01 KB, 下载次数: 482)

QQ截图20141106063330.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:66840 发表于 2014-11-6 08:28 | 只看该作者
这里应该判断下。改为
for(i=0;i<8;i++)
{
        if(((SendVal<<i)&0x80) != 0)
        {
                SI=1;
        }
        else
        {
                SI=0;
        }

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:67992 发表于 2014-11-6 15:36 | 只看该作者
给你正确的:
#include<reg51.h>
#include<intrins.h>
sbit RCK=P3^5;  //(11脚)上升沿时移位寄存器的数据进入数据存储寄存器.
sbit SCK=P3^6;         //(12脚)上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。
sbit SI=P3^4; //(14脚)串行数据输入
void HC595SendData(unsigned char SendVal)//发送数据
{  
  unsigned char i;
  SCK=0;
  RCK=0;
  for(i=0;i<8;i++)
   {
                if((SendVal<<i)&0x80)
                {
                SI=1;
                }
                else
                {
                SI=0;
                }
                SCK=1;//从SCK产生一上升沿(移入数据)
            _nop_();
                SCK=0;
   }
}
void HC595ShowData()//RCK产生一上升沿(输出数据)
{
                RCK=0;
                _nop_();
                RCK=1;
}
void main()
{
          while(1)
          {
                HC595SendData(0xf0);
                HC595ShowData();
          }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:67992 发表于 2014-11-6 16:14 | 只看该作者
这样也行:
#include<reg51.h>
#include<intrins.h>

sbit RCK=P3^5;  //(11脚)上升沿时移位寄存器的数据进入数据存储寄存器.
sbit SCK=P3^6;         //(12脚)上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。
sbit SI=P3^4; //(14脚)串行数据输入


void HC595SendData(unsigned char SendVal)//发送数据
{  
  unsigned char i;
         RCK=0;
  for(i=0;i<8;i++)
   {
                if((SendVal<<i)&0x80)
                {
                SI=1;
                }
                else
                {
                SI=0;
                }

                SCK=0;//从SCK产生一上升沿(移入数据)
                _nop_();
                SCK=1;
   }
}
void HC595ShowData()//RCK产生一上升沿(输出数据)
{
                RCK=0;
                _nop_();
                RCK=1;
}
void main()

{
          while(1)
          {
                HC595SendData(0xf0);
                HC595ShowData();
          }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:65490 发表于 2014-11-7 20:17 | 只看该作者
时钟信号和锁存信号搞反了
回复

使用道具 举报

6#
ID:65770 发表于 2014-11-9 23:09 | 只看该作者
dgahz 发表于 2014-11-6 15:36
给你正确的:
#include
#include

谢谢  你的程序能用    还想问下我输入了0xff或0x00,为什么灯都在亮,没有变化,怎么让它全灭
回复

使用道具 举报

7#
ID:65770 发表于 2014-11-9 23:09 | 只看该作者
dgahz 发表于 2014-11-6 16:14
这样也行:
#include
#include

还想问下我输入了0xff或0x00,为什么灯都在亮,没有变化,怎么让它全灭
回复

使用道具 举报

8#
ID:67992 发表于 2014-11-10 09:59 | 只看该作者
另改给你
#include<reg51.h>
#include<intrins.h>
sbit RCK=P3^5;  //(11脚)上升沿时移位寄存器的数据进入数据存储寄存器.
sbit SCK=P3^6;         //(12脚)上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。
sbit SI=P3^4; //(14脚)串行数据输入
void HC595SendData(unsigned char SendVal)//发送数据
{
  unsigned char i;
   SI=0;
  SCK=0;
  RCK=0;
  for(i=0;i<8;i++)
   {
                if((SendVal<<i)&0x80)
                {
                SI=1;
                }
                else
                {
                SI=0;
                }
                SCK=1;//从SCK产生一上升沿(移入数据)
            _nop_();
                SCK=0;
   }
}
void HC595ShowData()//RCK产生一上升沿(输出数据)
{
                RCK=0;
                _nop_();
                RCK=1;
}
void main()
{                       
          while(1)
          {
                                HC595SendData(0xFF);
                           HC595ShowData();
          }
}
回复

使用道具 举报

9#
ID:67992 发表于 2014-11-10 10:04 | 只看该作者
这个也可
#include<reg51.h>
#include<intrins.h>

sbit RCK=P3^5;  //(11脚)上升沿时移位寄存器的数据进入数据存储寄存器.
sbit SCK=P3^6;         //(12脚)上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。
sbit SI=P3^4; //(14脚)串行数据输入


void HC595SendData(unsigned char SendVal)//发送数据
{  
  unsigned char i;
         RCK=0;
                 SI=0;
  for(i=0;i<8;i++)
   {
                if((SendVal<<i)&0x80)
                {
                SI=1;
                }
                else
                {
                SI=0;
                }

                SCK=0;//从SCK产生一上升沿(移入数据)
                _nop_();
                SCK=1;
   }
}
void HC595ShowData()//RCK产生一上升沿(输出数据)
{
                RCK=0;
                _nop_();
                RCK=1;
}
void main()

{
          while(1)
          {
                HC595SendData(0x00);
                HC595ShowData();
          }
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表