找回密码
 立即注册

QQ登录

只需一步,快速开始

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

小白关于Hc595的疑问,程序中竟然P0^7(LED)都定义成0了,那为什么还有两组for循环...

[复制链接]
跳转到指定楼层
楼主
1黑币
新手小白~希望大佬能传道授业解惑~
疑问如下:
程序中竟然P0^7(LED)都定义成0了,那为什么还有两组for循环语句啊?
程序中的dat1 dat2 分别对应什么duan'ko

/**************************************************************************************
实验现象:下载程序后,LED点阵左上角第一个点的LED被点亮果
   
接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)

注意事项:                    
  
***************************************************************************************/
#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;
sbit LED=P0^7;
void delay (u16 i)
{
while(i--);
}  
/*******************************************************************************
* 函 数 名         : Hc595SendByte(u8 dat1,u8 dat2)
* 函数功能     : 通过595发送2个字节的数据
* 输    入         : dat1:第2个595输出数值
*                  * dat2: 第1个595输出数值
* 输    出         : 无
*******************************************************************************/
void Hc595SendByte(u8 dat1,u8 dat2)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++)   //发送8位数
{
  SER = dat1 >> 7;   //从最高位开始发送
  dat1 <<= 1;
  SRCLK = 0;    //发送时序
  _nop_();
  _nop_();
  SRCLK = 1;
}
    delay(500);
for(a=0;a<8;a++)   //发送8位数
{
  SER = dat2 >> 7;   //从最高位开始发送
  dat2 <<= 1;
  SRCLK = 0;    //发送时序
  _nop_();
  _nop_();
  SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能   : 主函数
* 输    入       : 无
* 输    出      : 无
*******************************************************************************/
void main()
{ LED=0;  //使第一列为低电平。

while(1)
{
    Hc595SendByte(0xfe,0x01);
}  
}

最佳答案

查看完整内容

楼主不必纠结于此,这个程序是用两个595级联驱动8*8点阵。由于此实验板只有1个595驱动点阵行,列由P0直接驱动。两次for循环的前面列码已经溢出而无效。所以加一条LED=0;,就相当于加一条P0=0x7f 充当列码。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2020-11-13 09:21 | 只看该作者

楼主不必纠结于此,这个程序是用两个595级联驱动8*8点阵。由于此实验板只有1个595驱动点阵行,列由P0直接驱动。两次for循环的前面列码已经溢出而无效。所以加一条LED=0;,就相当于加一条P0=0x7f 充当列码。


回复

使用道具 举报

板凳
ID:278840 发表于 2020-11-13 10:45 | 只看该作者
595用来驱动什么?
回复

使用道具 举报

地板
ID:842931 发表于 2020-11-13 19:18 | 只看该作者
来人啊
回复

使用道具 举报

5#
ID:155507 发表于 2020-11-14 07:24 | 只看该作者
这种问题最好是电路和程序一起发上来,不然就是"开局一句话,过程全靠猜"
程序都是针对特定电路编写的
回复

使用道具 举报

6#
ID:842931 发表于 2020-11-14 09:07 | 只看该作者
器车人 发表于 2020-11-13 10:45
595用来驱动什么?

8X8LED矩阵

(WEU]PB(RIFA[~BP(7905CF.png (54.73 KB, 下载次数: 77)

(WEU]PB(RIFA[~BP(7905CF.png
回复

使用道具 举报

7#
ID:842931 发表于 2020-11-14 09:09 | 只看该作者
angmall 发表于 2020-11-14 07:24
这种问题最好是电路和程序一起发上来,不然就是"开局一句话,过程全靠猜"
程序都是针对特定电路编写的

哥,这是原理图。

A2开发板原理图.pdf

227.86 KB, 下载次数: 5

回复

使用道具 举报

8#
ID:842931 发表于 2020-11-14 10:01 来自手机 | 只看该作者
器车人 发表于 2020-11-13 10:45
595用来驱动什么?

能看到不

7FF0B8D6-8DC9-4AB5-87AA-89230C420371.png (66.94 KB, 下载次数: 81)

7FF0B8D6-8DC9-4AB5-87AA-89230C420371.png
回复

使用道具 举报

9#
ID:278840 发表于 2020-11-14 14:25 | 只看该作者
for循环是给这个595的,然后去驱动点阵去显示,P07是不是0跟这个没有什么关系,你直接下载进去看看效果
回复

使用道具 举报

10#
ID:842931 发表于 2020-11-15 08:58 | 只看该作者
wulin 发表于 2020-11-14 17:24
楼主不必纠结于此,这个程序是用两个595级联驱动8*8点阵。由于此实验板只有1个595驱动点阵行,列由P0直接 ...

谢谢大哥~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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