返回顶部
首页 > 资讯 > 操作系统 >LED点阵
  • 138
分享到

LED点阵

算法51单片机 2023-08-30 11:08:02 138人浏览 安东尼
摘要

单片机位操作 特殊功能寄存器声明:sfr 如声明P0的寄存器,就将P0的地址赋值给sfr类型的P0变量上。修改P0的值,就等于修改P0指向的寄存器的值。这些寄存器是硬件中的一部分,用于控制和监视芯片的各种功能。修改这些寄存器的值,可以影响硬

单片机位操作

特殊功能寄存器声明:sfr

如声明P0的寄存器,就将P0的地址赋值给sfr类型的P0变量上。修改P0的值,就等于修改P0指向的寄存器的值。这些寄存器是硬件中的一部分,用于控制和监视芯片的各种功能。修改这些寄存器的值,可以影响硬件电路的状态和行为,因为这些寄存器直接与外部设备、引脚和功能相连。
image.png

特殊位声明:sbit

声明P0寄存器的第一位,可以用sbit P01 = P0^1,也可以用sbit P01=0x81
P01赋值,可以直接修改P0寄存器的第1位。
位从0开始,如果要对第0位赋值,那就是sbit P00=P0^0或者sbit P00=0x80
虽然值都是0x80,但sfr声明的P0变量会修改0x80指向的8位寄存器中的每一位,sbit声明的P00只会修改0x80这一位的值。

不可位寻址

单片机无法对所有位进行编码,如果要单独对寄存器的某一位进行赋值,并且不影响其他位,可以用&=|=^=的方法。

  • &=:用于对某一位置0:11111110
  • |=:用于对某一位置1:00000001
  • ^=:用于对某一位取反:对00000000异或后对00000001异或。

位选与段选

对于LED点阵,单片没有那么多资源来直接控制每一个io口。
我们可以先选择某一行,称为段选。再对这一行上的每一列设定状态,也就是对每一位指定高低电平,称为位选。如此选择下一行,控制下一行的每一列的状态,如果速度够快,人眼看到的就是一幅图像。
上面的过程为逐行扫描,也可以逐列扫描。逐列扫描就是先选择某一列,然后控制这一列的每一行的状态。如此循环。
image.png
原理图中的DP的值是由74HC595(串转并)模块控制的,如果要通过逐行扫描的方式点亮LED点阵,我们需要先选择某一行,为这一行指定高电平。选择高电平是因为DP与LED的高电平一端相连。

74HC595(串转并)模块

image.png
输入端我们所能控制的有三个:

  • P35-RCLKR代表 “ReGISter”,用于控制存储寄存器(Register)的时钟输入。
  • P36-SRCLKSR代表 “Shift Register”,用于控制移位寄存器(Shift Register)的时钟输入。
  • P34-SERSER代表"Serial Input",意为串行输入。

工作流程为:

  1. 通过SER将数据的最高位也就是第7位传入,将数据<<1,使得第6位成为新的最高位。
  2. SRCLK0再置1
  3. 重复以上两步,直到8位输入全部输入。
  4. RCLK0再置1。此时74HC595的输出即为预定的输出。

置0再置1的原因是因为在74HC595芯片中,数据的存入是在上升沿时发生的。

void hc595_write_data(u8 dat){u8 i=0;for(i=0;i<8;i++){HC595_SER=dat>>7;dat<<=1;HC595_SRCLK=0;delay_10us(1);HC595_SRCLK=1;}HC595_RCLK=0;delay_10us(1);HC595_RCLK=1;}

如果不添加延时,那么LED点阵的内容将是随机的。

位选

在通过74hc595选定要点亮的列后,通过修改P0寄存器的值,就可以修改这一行上,各列的显示状态。

hc595_write_data(0x80);P0=0xaa;

上面的代码会让第一行隔一个灯亮灭一次。
由于原理图上,P0连接的是二极管的低电平一端,所以第一行的第一个灯是灭的。

文字、图片、动画

要让LED点阵显示图片和文字,需要得到文字和图片对应的点阵,然后逐行扫描出来。

void draw(u8 rows[]){u8 i=0;for(;i<8;i++){hc595_write_data(1<<i);P0=~rows[i];delay_10us(1);hc595_write_data(0);P0=0xff;}}

由于上面的代码中延迟很低,帧率比较高,那么函数结尾就需要将P0和hc595置为不点亮灯泡的状态,否则会出现残影。
由于我们封装了绘制图片的方法,那么如果实现一个动画,就可以多次调用该方法,将每一帧的内容打印出来。
(delay_10us延时是有问题的,图省事我就不改了)

来源地址:https://blog.csdn.net/m0_49303993/article/details/132571749

--结束END--

本文标题: LED点阵

本文链接: https://lsjlt.com/news/382563.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • LED点阵
    单片机位操作 特殊功能寄存器声明:sfr 如声明P0的寄存器,就将P0的地址赋值给sfr类型的P0变量上。修改P0的值,就等于修改P0指向的寄存器的值。这些寄存器是硬件中的一部分,用于控制和监视芯片的各种功能。修改这些寄存器的值,可以影响硬...
    99+
    2023-08-30
    算法 51单片机
  • 怎么使用Fedora IoT点亮LED灯
    这篇文章主要介绍怎么使用Fedora IoT点亮LED灯,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是 Fedora IoTFedora IoT 是当前 Fedora 项目的目标之一,计划成为一个完整的 Fed...
    99+
    2023-06-16
  • 如何使用PHP扫描图片转点阵、二维码转点阵
    这篇文章主要介绍了如何使用PHP扫描图片转点阵、二维码转点阵,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP扫描图片转点阵 二维码转点阵     &n...
    99+
    2023-06-14
  • C#BitArray点阵列的使用
    目录BitArray 类中的属性BitArray 类中的方法在 C# 中,BitArray 类用来管理一个紧凑型的位值数组,数组中的值均为布尔类型,其中 true(1)表示此位为开启...
    99+
    2023-05-14
    C# BitArray点阵列 C# 点阵列
  • C# BitArray点阵列如何使用
    这篇文章主要介绍了C# BitArray点阵列如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C# BitArray点阵列如何使用文章都会有所收获,下面我们一起来看看吧。在 C# 中,...
    99+
    2023-07-05
  • matlab 计算点云协方差矩阵
    目录 一、概述 1、算法概述 2、主要函数 二、代码示例 三、结果展示 四、参数解析 输入参数 输出参数 五、参考链接 本文由CSDN点云侠原创,原文链...
    99+
    2023-08-30
    matlab 矩阵 开发语言 线性代数
  • Android 驱动编写LED-NDK程序
    1. 首先编写LINUX内核模块LED #include <linux/kernel.h> #include <linux/module.h> #in...
    99+
    2022-06-06
    ndk Android
  • matlab怎么绘制矩阵的散点图
    在MATLAB中,你可以使用`scatter`函数来绘制矩阵的散点图。这里有一个简单的示例来说明如何使用`scatter`函数绘制矩...
    99+
    2023-09-13
    matlab
  • phpqrcode输出点阵的方法是什么
    在PHP中,可以使用phpqrcode库来生成QR码(二维码),其中的QRcode::png()方法可以输出点阵表示的QR码图片。具...
    99+
    2024-03-02
    phpqrcode
  • 串口接收数据-控制LED灯
    目标 通过串口接收数据,对数据分析,控制8个LED灯按照设定时间闪烁。 8个LED灯可以任意设计,是否闪烁。闪烁时间按ms计算,通过串口发送,可设置1~4,294,967,296ms,也就是4字节数据协议自拟,有数据报文头和尾 实现 串口接...
    99+
    2023-08-30
    fpga开发 单片机 嵌入式硬件
  • 1.2为多变量数据绘制散点阵图
      在这篇博客中,用一个小栗子来介绍一下散点图在多变量数据中的一方面应用。   scikit库中提供了一些数据,这里使用iris数据集,是一种鸢尾属植物,所给数据中包括两种类型的花,目的是根据所给信息判断两种花分别属于哪一类。也就是说找到...
    99+
    2023-01-30
    多变 数据 点阵图
  • 探究一个LED如何入门Linux内核
    目录前言led trigger开始探索LED 设备注册leds 目录触类旁通class 目录的产生start_kernel()Starting kernel …uboot附完整调用关系人生切入点 前言 最近项目上需要用到...
    99+
    2022-06-04
    LED入门Linux内核 Linux内核
  • 控制Android LED灯颜色的代码实例
    很多Android手机上都配有LED灯,比如HTC的手机在充电、新来短信等时候都会有响应的指示,其实很简单的这都是NotificationManager的一些参数而已,下面An...
    99+
    2022-06-06
    Android
  • HP DL380z Gen9服务器Led故障灯说明
    HP DL380z Gen9服务器用户指南 前面板LED指示灯 编号 说明 状态 1 开机/待机按钮和系统电源 LED 指示 灯* 绿色常亮 = 系统已启动 绿色闪烁(1 Hz/周每秒)= 正在执行通电顺序 琥珀色常亮 = 系统处于待机...
    99+
    2023-08-18
    服务器 HP DL380z Gen9
  • ips屏幕和led屏幕区别是什么
    今天小编给大家分享一下ips屏幕和led屏幕区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。ips屏幕和led屏幕区...
    99+
    2023-07-02
  • 20190524-矩阵算法,矩阵相加,矩
    1.二维矩阵的转置 arrA = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] def turn(arr): if not arr: return [] ...
    99+
    2023-01-31
    矩阵 算法
  • led灯亮一会就灭了是什么原因
    led灯亮一会就灭了 的原因有:1、电源电压不稳定或过高;2、长时间工作或环境温度过高;3、LED灯中的灯泡或电源驱动器可能存在故障;4、电路连接问题。本教程操作系统:Windows10系统、Dell G3电脑。LED灯亮一会就灭了可能有以...
    99+
    2023-08-15
  • R语言矩阵知识点总结及实例分析
    矩阵是其中元素以二维矩形布局布置的R对象。 它们包含相同原子类型的元素。 虽然我们可以创建一个只包含字符或只包含逻辑值的矩阵,但它们没有太多用处。 我们使用包含数字元素的矩阵用于数学...
    99+
    2024-04-02
  • numpy和tensorflow中的各种乘法(点乘和矩阵乘)
    点乘和矩阵乘的区别:  1)点乘(即“ * ”) ---- 各个矩阵对应元素做乘法 若 w 为 m*1 的矩阵,x 为 m*n 的矩...
    99+
    2024-04-02
  • Python无权点文件转化成邻接矩阵方式
    目录将无权点文件转化成邻接矩阵邻接矩阵的COO格式总结将无权点文件转化成邻接矩阵 目前点文件是两列Excel代码,在进行复杂网络运算时需要转化成邻接矩阵。 我在网上找了一个代码,稍微...
    99+
    2022-12-16
    Python无权点文件 Python邻接矩阵 无权点文件转邻接矩阵
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作