51单片机STC89C52RC——8.1 8*8 LED点阵模块(点亮一个LED)

目录

目的/效果

一,STC单片机模块

二,8*8 LED点阵模块 

2.1 电路图

2.1.1 8*8 点阵模块电路图

2.1.2 74HC595(串转并)模块 电路图

2.1.3 芯片引脚

2.2 引脚电平分析

2.3 74HC595 串转并模块

2.3.1 装弹(移位寄存器)

2.3.2 发弹(存储寄存器)

2.4 STC89C52RC 中的sfr、sbit

2.4.1 sfr(special function register):特殊功能寄存器声明   

2.4.2 sbit(special bit):特殊位声明   

2.4.3 可位寻址/不可位寻址:

三,创建Keil项目

四,代码 

五,代码编译、下载到51单片机


目的/效果

程序控制,点亮点阵LED 第1行第一列LED

一,STC单片机模块

二,8*8 LED点阵模块 

2.1 电路图

2.1.1 8*8 点阵模块电路图

2.1.2 74HC595(串转并)模块 电路图

 

2.1.3 芯片引脚

 

 

2.2 引脚电平分析

我们要点亮左下角 第一个 LED,需要将P70和DPa接通,其他引脚不管,如下图

将LED点阵左边第一列设置为0,即LED阴极为低电平,其余列为1,即高电平 

将LED点阵上边第一行设置为1,即LED阳极为高电平,其余行为0,即低电平  

对于74HC595模块的电平如下

 这里要注意跳线帽:OE 输出有效(低电平),我们直接可以拔掉或者接GND上

 

 

DP上的HEX=0x80=1000 0000(二进制)

那么对于引脚P35(RCLK)、P36(SRCLK)、P34(SER)输入怎样的数据,DPa-DPh 才会输出1000 0000 的电平呢?我们就要详细分析这个74HC595译码器。

2.3 74HC595 串转并模块

    74HC595 是一个 8 位串行输入、并行输出的位移缓存器,其中并行输出为三 态输出(即高电平、低电平和高阻抗)

移位寄存器工作方式就像手枪弹夹,但是子弹的发射(移位寄存器中的数据转储到存储寄存器),又像是【散弹】(因为是并行输出嘛)。

具体的装弹和发弹如下

2.3.1 装弹(移位寄存器)

上升沿:电平从低到高的那个过程。移位寄存器时钟在上升沿这个过程中才起作用。

先把数据放到针脚P34(SER)上(SER=1低电平 或者SER=0 高电平)

然后将 将P36(SRCLK) 针脚 先置低电平(SRCLIK=1)再置高电平(SRCLK=0)。这样就是实现了由上升沿 移位寄存(装弹)的效果。不过要注意这里不能立即置0,机器也需要处理时间。这里我们需要将程序延时10微秒后再做处理。

2.3.2 发弹(存储寄存器)

 数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是P35(RCLK)脚的作用。它也是上升沿有效。

2.4 STC89C52RC 中的sfr、sbit

2.4.1 sfr(special function register):特殊功能寄存器声明   

 例:sfr P0 = 0x80;     声明P0口寄存器,物理地址为0x80

2.4.2 sbit(special bit):特殊位声明   

 例:sbit P0_1 = 0x81;    或    sbit P0_1 = P0^1;     声明P0寄存器的第1位

比如本节我们用到了下面几个,我们把针脚P34、P35、P36定义用对应申明,在使用时不在写针脚地址寄存器(当然也可以继续使用针脚,作用一样)。

//定义74HC595控制管脚
sbit _SRCLK=P3^6;	//移位寄存器时钟输入
sbit _RCLK=P3^5;	//存储寄存器时钟输入 注意:在 REGX52.H 中已经申明了RCLK
sbit _SER=P3^4; 	//串行数据输入 

2.4.3 可位寻址/不可位寻址:

在单片机系统中,操作任意寄存器或者某一位的数据时,必须给出其物理地址,又因为一个寄存器里有8位,所以位的数量是寄存器数量的8倍,单片机无法对所有位进行编码,故每8个寄存器中,只有一个是可以位寻址的。对不可位寻址的寄存器,若要只操作其中一位而不影响其它位时,可用“&=”、“|=”、“^=”的方法进行位操作

三,创建Keil项目

详细参考:51单片机STC89C52RC——创建Keil项目-CSDN博客

四,代码 

main.c

#include <REGX52.H>  
#include "74HC595.h"
/*** 函    数:主函数* 参    数:无* 返 回 值:无*/
void main()
{	 	 while(1){_74HC595_Show(0,0x80);//点亮第一行,第一个LED}
} 

Delay.c

/*** 函    数:延时函数 毫秒* 参    数:ms 延时多少毫秒* 返 回 值:无*/
void Delay_ms(int ms)	//@12.000MHz
{unsigned char data i, j;while(ms--){ i = 2;j = 239;do{while (--j);} while (--i);}
}
/*** 函    数:延时函数 毫秒* 参    数:ms 延时多少毫秒* 返 回 值:无*/
void Delay_us(int ms)	//@12.000MHz
{unsigned char data i, j;while(ms--){ i = 2;j = 239;do{while (--j);} while (--i);}
}
/*** 函    数:延时函数  10微秒* 参    数:无* 返 回 值:无*/
void Delay_10us(int _10us)	//@11.0592MHz
{unsigned char data i;while(_10us--){i = 2;while (--i);}
}

 Delay.h

#ifndef __DELAY_H_
#defind __DELAY_H_ 
void Delay_ms(int ms);
void Delay_10us(int _10us);
#endif

 74HC595.c

#include <REGX52.H>
#include "Delay.h"//定义74HC595控制管脚
sbit _SRCLK=P3^6;	//移位寄存器时钟输入
sbit _RCLK=P3^5;	//存储寄存器时钟输入 注意:在 REGX52.H 中已经申明了RCLK
sbit _SER=P3^4; 	//串行数据输入 /*** 函    数:74HC595写入一个字节* 参    数:Byte 要写入的字节* 返 回 值:无*/
void _74HC595_WriteByte(unsigned int Byte)
{	unsigned char i;for(i=0;i<8;i++){_SER=Byte&(0x80>>i);		//将1000 0000 右移i位后 & Byte_SRCLK=0;				//移位寄存器置搞电平Delay_10us(1);_SRCLK=1;				//移位寄存器置低电平/*这里有需要可以延时10微秒*/Delay_10us(1);}_RCLK=1;	//存储寄存器置低电平Delay_10us(1);_RCLK=0;	//存储寄存器置搞电平 
}
/*** 函    数:LED点阵屏显示一列数据* 参    数:Column 要选择的列,范围:0~7,0在最左边,Data 选择列显示的数据,高位在上,1为亮,0为灭* 返 回 值:无*/
void _74HC595_Show(unsigned char Column,Byte)
{_74HC595_WriteByte(Byte);	//向行写入数据P0=~(0x80>>Column);			//向列写入数据Delay_10us(1);				//等待显示稳定 
}

 74HC595.h

#ifndef __74HC595_H_
#defind __74HC595_H_
void _74HC595_WriteByte(unsigned int Byte);
void _74HC595_Show(unsigned char Column,Byte);
#endif

五,代码编译、下载到51单片机

代码编译请参考

《51单片机STC89C52RC——代码编译-CSDN博客》

代码下载请参考

《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/360409.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现element表格合并行?

前两天我一个朋友咨询我element表格合并行的问题,他研究了很久,已经开始怀疑是不是element UI出现了bug,然后跟我一阵沟通,最终解决了问题,他的问题在于他把事情想复杂了,接下来我们一起来看一下这个经典“案例”,很多人真的很有可能走入这个误区,当然老鸟就不用看了,…

PCL笔记二 之VS环境配置(不同版本Debug+Release编译)

PCL笔记二 之VS环境配置&#xff08;不同版本DebugRelease编译&#xff09; PCL官网&#xff1a;https://github.com/PointCloudLibrary/pcl/releases众所周知&#xff0c;PCL是一个用于点云处理并且依赖不少三方库的一个算法库&#xff0c;同时在编译配置环境时也很复杂&…

python爬虫需要什么HTTP代理?

用来爬虫的话&#xff0c;还是建议用高匿名代理&#xff0c;但显然题主用了高匿名代理还是出现了一部分问题&#xff0c;我们可以先找到问题关键再解决它&#xff0c;一般爬虫用了高匿名代理出现被封会有以下几种原因&#xff1a; 1.代理IP的质量不过关 一般来说每个网站都有…

攻击者开始使用 XLL 文件进行攻击

近期&#xff0c;研究人员发现使用恶意 Microsoft Excel 加载项&#xff08;XLL&#xff09;文件发起攻击的行动有所增加&#xff0c;这项技术的 MITRE ATT&CK 技术项编号为 T1137.006。 这些加载项都是为了使用户能够利用高性能函数&#xff0c;为 Excel 工作表提供 API …

微服务中不同服务使用openfeign 相互调用

首先 我们上文 已经知道了 nacos 的注册服务&#xff0c;现在 我们 在不同服务中相互调用就可以使用openfeign 直接调用&#xff0c;而不是 再写冗余的调用代码啦 首先 我们的微服务组件如下 因为我这个微服务是我在 员工登录demo 中 拆出来的&#xff0c;在userlogin模块中…

ActiViz集成到WPF中的空域问题

文章目录 一、场景1、WPF控件2、集成ActiViz或者VTK 二、问题1、需求2、空域问题 三、解决方案1、用WindowsFormsHost包裹住ElementHost&#xff0c;然后将WPF的控件放在ElementHost职中&#xff1a;2、用Window或者Popup去悬浮3、使用第三方库Microsoft.DwayneNeed&#xff08…

光泽正在褪去,所以我们又回到了人工智能领域。

光泽正在褪去&#xff0c;所以我们又回到了人工智能领域。 人工智能冬天将被私有化 自从“人工智能”这个流行词在20世纪50年代被创造出来以来&#xff0c;人工智能经历了几次繁荣和萧条周期。 一种新的技术方法看起来很有趣&#xff0c;并取得了一些成果。它被荒谬地炒作并获…

解锁小红书新玩法:中小企业出海营销的集成策略

随着全球数字化浪潮的推进&#xff0c;小红书作为生活方式分享平台的崛起&#xff0c;为中小企业提供了一个全新的营销舞台。NetFarmer&#xff0c;作为专注于企业数字化出海的服务商&#xff0c;深谙小红书的营销策略&#xff0c;并致力于通过HubSpot产品销售与实施&#xff0…

表单(forms)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在app1文件夹下创建一个forms.py文件&#xff0c;添加如下类代码&#xff1a; from django import forms class PersonForm(forms.Form): first_na…

uniapp运行到模拟器(联想模拟器)

记录一下uniapp项目运行到联想模拟器的流程 先配置一下模拟器端口 填写对应的adb路径&#xff0c;也就是模拟器安装路径下的adb.exe的路径 然后打开模拟器的设置&#xff0c;搜索版本找到版本号&#xff0c;多次点击打开开发者模式 进入开发者选项&#xff0c;打开USB调试 …

智能合约开发的过程

智能合约是一种运行在区块链上的程序&#xff0c;可以自动执行预先设定的条款和条件。智能合约具有去中心化、透明、不可篡改等特点&#xff0c;因此被广泛应用于金融、供应链、物联网等领域。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流…

如何与ISSI建立EDI连接?

ISSI是一家总部位于美国的半导体公司&#xff0c;主要设计和销售高性能集成电路 (IC)&#xff0c;其产品包括DRAM、SRAM、闪存和模拟电路&#xff0c;广泛应用于汽车、通信、工业和医疗等领域。 和其他半导体行业的企业一样&#xff0c;ISSI通过EDI与其全球合作伙伴传输业务单据…

《C语言》编译和链接

文章目录 一、翻译环境1、预处理2、编译3、汇编4、链接 二、运行环境 一、翻译环境 在使用编译器编写代码时&#xff0c;编写的代码是高级语言&#xff0c;机器无法直接识别和运行&#xff0c;在编译器内部会翻译成机器可执行的机器语言。 编译环境由编译和链接两大过程组成。 …

【CT】LeetCode手撕—23. 合并 K 个升序链表

目录 题目1- 思路2- 实现⭐23. 合并 K 个升序链表——题解思路 3- ACM 实现 题目 原题连接&#xff1a;23. 合并 K 个升序链表 1- 思路 模式识别&#xff1a;合并 K 个链表 ——> 优先队列 思路 借助优先队列&#xff0c;每次从 k 个链表中&#xff0c;各取一个元素&…

【Docker】存储数据卷

目录 1、挂载数据卷到容器里 2、查询挂载文件 3、容器与主机之间映射共享卷 4、三个容器之间使用共享卷 5、卷数据的备份与恢复 5.1 备份 5.2 恢复 1、挂载数据卷到容器里 docker run -itd --name test02 -v /data nginx docker exec -it test02 bashls / docker inspe…

MySQL MVCC详解

目录 前言 MVCC实现原理 UndoLog版本链 ReadView MVCC是否可以解决不可重复读与幻读 隔离级别 READ UNCOMMITTED - 读未提交与脏读 READ COMMITTED - 读已提交与不可重复读 REPEATABLE READ - 可重复读与幻读 SERIALIZABLE - 串行化 小结 前言 为了提高数据库并发能力…

JVM虚拟机的组成

一、为什么要学习 JVM &#xff1f; 1. “ ⾯试造⽕箭&#xff0c;⼯作拧螺丝” &#xff0c; JVM 属于⾯试官特别喜欢提问的知识点&#xff1b; 2. 未来在⼯作场景中&#xff0c;也许你会遇到以下场景&#xff1a; 线上系统突然宕机&#xff0c;系统⽆法访问&#xff0c;甚⾄直…

前后端交互的弯弯绕绕

前后端交互&#xff1a; &#x1f197;&#xff0c;收拾一下心情让我们来聊一聊AJax吧&#xff0c;随着前端的飞速发展&#xff0c;前后的交互也发生了天翻地覆的变化&#xff1a; 前后端交互的方式有很多&#xff1a; AJAX、表单提交、WebSocket、RESTful API、... 这对新入…

查看es p12证书文件过期方法

查看证书过期时间: openssl pkcs12 -in elastic-certificates.p12 -nokeys -out elastic-certificates.crt (需要输入证书生成时配置密码) openssl x509 -enddate -noout -in elastic-certificates.crt

使用 GitOps 进行防灾 MinIO

想象一下&#xff0c;您已经花费了无数小时来完善 Docker Swarm 设置&#xff0c;精心设计每项服务&#xff0c;并调整 CI/CD 管道以实现无缝自动化。现在&#xff0c;想象一下这个经过微调的系统被重置为原点&#xff0c;不是因为严重的故障或安全漏洞&#xff0c;而是因为数据…