请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 3813|回复: 7

74HC595 点亮流水灯 理解求助

[复制链接]

10

主题

44

帖子

278

积分

中级会员

Rank: 3Rank: 3

积分
278
发表于 2020-11-28 15:57:08 | 显示全部楼层 |阅读模式
/*************************************************************************************

*
实验现象:下载程序后,LED灯从左往右点亮,类似流水灯效果

接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)
                   1,单片机-->74HC595模块
                                   P34-->SE
                                   P35-->RC
                                P36-->SC
                   2,74HC595模块输出-->LED&交通灯模块
                                   J27-->J19       
注意事项:                                                                               

                                                                                  
**************************************************************************************

*/

#include "reg51.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

//--定义使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;


/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函 数 名         : Hc595SendByte(u8 dat)
* 函数功能                   : 想74H595发送一个字节的数据
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Hc595SendByte(u8 dat)
{
        u8 a;

        SRCLK = 1;
        RCLK = 1;

        for(a=0;a<8;a++)                 //发送8位数
        {
                SER = dat >> 7;                 //从最高位开始发送                   这段代码怎么理解       SER  不是发送数据么 怎么还是把dat赋值给SER
                dat <<= 1;

                SRCLK = 0;                         //发送时序
                _nop_();
                _nop_();
                SRCLK = 1;       
        }
        RCLK = 0;
        _nop_();
        _nop_();
        RCLK = 1;
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       
        u8 ledNum;

        ledNum = ~0x01;          

        while(1)
        {
                Hc595SendByte(ledNum);
                ledNum = _crol_(ledNum, 1);                这里和  ledNum<<=1  意思是一样的么
                delay(50000);                                       
        }               
}
                                                                         求师父指导指导

回复

使用道具 举报

10

主题

44

帖子

278

积分

中级会员

Rank: 3Rank: 3

积分
278
 楼主| 发表于 2020-11-28 20:13:07 | 显示全部楼层
void Hc595SendByte(u8 dat) {         u8 a;          SRCLK = 1;         RCLK = 1;          for(a=0;a<8;a++)                 //发送8位数         {                 SER = dat >> 7;                 //从最高位开始发送                   好像想明白了  比如data =1010 0001   右移7位之后就变成了 1     SER =1                 dat <<= 1;                                                                          这个dat  并不是 上一行改变的1 而是原来的 1010  0001   左移 之后并赋值  就成了 0100 0010                                                                                                                   当 a =1 时 dat =0100 0010   在右移7位变成0000 0000    SER = 0     依次类推  dat存储在C595中  当存储寄存器时钟有上升沿时 并口输出 dat                                                                                                              前辈门 看看我这么理解对么                 SRCLK = 0;                 dat <<= 1;                  SRCLK = 0;                         //发送时序                 _nop_();                 _nop_();                 SRCLK = 1;                }         RCLK = 0;         _nop_();         _nop_();         RCLK = 1; }
回复 支持 反对

使用道具 举报

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2020-12-5 14:18:41 | 显示全部楼层
1 SER对应IO对口,由定义可以知道 sbit SER=P3^4; 是P3.4。 2.发送逻辑是串行数据,也就是8bits的需要1个bit发送,并且是从高位发送。也就是先发送dat的最高位,dat是8 bits数据,>>右移位操作,7移位数量。dat>>7就是把最高位移位到最低位。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2021-1-21 17:38:58 | 显示全部楼层
想问下楼主,程序烧入后,需要外部接线吗?我怎么看不到流水灯效果呢
回复 支持 反对

使用道具 举报

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2021-1-22 16:38:59 | 显示全部楼层
小暖好菜 发表于 2021-1-21 17:38
想问下楼主,程序烧入后,需要外部接线吗?我怎么看不到流水灯效果呢

我也看不到
回复 支持 反对

使用道具 举报

10

主题

44

帖子

278

积分

中级会员

Rank: 3Rank: 3

积分
278
 楼主| 发表于 2021-1-22 21:46:18 | 显示全部楼层
小暖好菜 发表于 2021-1-21 17:38
想问下楼主,程序烧入后,需要外部接线吗?我怎么看不到流水灯效果呢

肯定需要外部连线啊  最起码你要把74H595和单片机 连接 然后595 的几个脚和LED 等连接
回复 支持 反对

使用道具 举报

0

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2021-1-22 21:49:22 | 显示全部楼层
小暖好菜 发表于 2021-1-21 17:38
想问下楼主,程序烧入后,需要外部接线吗?我怎么看不到流水灯效果呢

看看短接片是否接地
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 06:44 , Processed in 0.143548 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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