找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 4209 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-11-6 06:44

正文摘要:

#include<reg51.h> #include<intrins.h> sbit RCK=P3^6;  //(11脚)上升沿时移位寄存器的数据进入数据存储寄存器. sbit SCK=P3^5;         //(12脚)上升沿时数据寄 ...

回复

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 回帖助人的奖励!

查看全部评分

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();
          }
}
ID:65770 发表于 2014-11-9 23:09
dgahz 发表于 2014-11-6 16:14
这样也行:
#include
#include

还想问下我输入了0xff或0x00,为什么灯都在亮,没有变化,怎么让它全灭
ID:65770 发表于 2014-11-9 23:09
dgahz 发表于 2014-11-6 15:36
给你正确的:
#include
#include

谢谢  你的程序能用    还想问下我输入了0xff或0x00,为什么灯都在亮,没有变化,怎么让它全灭
ID:65490 发表于 2014-11-7 20:17
时钟信号和锁存信号搞反了
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 回帖助人的奖励!

查看全部评分

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: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 共享资料的积分奖励!

查看全部评分

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

Powered by 单片机教程网

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