51单片机【五】LED点阵屏
关于显示器的分辨率,像素,清晰度这些概念不再赘述
讲一下pitch这个比较陌生的概念:指的是两个像素点的圆心之间的距离,通常默认单位是毫米 例如:p10指的是间距10毫米的led点阵
LED的P00-P07是直接接在处理器上但是因为处理器针脚有限所以需要下面的74HC595(处理器使用3个引脚经过这个芯片产生8个并行的信号等效于使用了8个引脚)
J13如果跳线OE和GND HC595将无法工作也为没有电压 而跳线OE和VCC才可以工作
74HC595是一个移位寄存器74HC595是将串行信号转为并行信号 其中P34是处理器输入串行信号 P36是串行时钟 P35是工作时钟 然后经过这个芯片处理生成8个并行的信号 接在LED点阵的D0-D7上
这里这个芯片还可以控制一排LED是通过将图中的J14跳线帽连接后 LED一端为高电压另一端为HC595输出的8个串行的高低电压将LED点亮
void Hc595SendByte(u8 dat)
{u8 i = 0, j = 0;SCK = 0; // 将SCK置为初始状态RCK = 0; // 将RCK置为初始状态for (i=0; i<8; i++) //使用for循环将数字信号分8次发送出去也就是一个串行信号{SER = dat >> 7;dat <<= 1;SCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令SCK = 0; }RCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令
}
LED点阵显示图像原理与数码管动态显示类似
首先选择出每个要点亮的LED像素点 然后反复循环刷新即可
链接:https://pan.baidu.com/s/1-RGR0v9WUH7LWmOaUTpSbQ
提取码:pmw2
这是字模提取软件 也就是帮你选择那些LED管需要去点亮
注意的是:要管理员身份运行
字模由光盘中:工具软件/88字模提取软件/LEDDOT V0.2.exe生成
注意取模软件菜单栏设置中,设置为:
字模显示方式:单行
字模提取方式:逐列
字模提取格式:C51格式
void main(void)
{MatrixDisplay(gZhu);
}
void MatrixDisplay(u8 *zimo)
{u8 i = 0;while (1){for(i=0;i<8;i++){MATRIX_PORT = gLineCode[i]; // 位选Hc595SendByte(zimo[i]); // 发送段选数据Hc595SendByte(0x00); // 消隐} }
}
void Hc595SendByte(u8 dat)
{u8 i = 0, j = 0;SCK = 0; // 将SCK置为初始状态RCK = 0; // 将RCK置为初始状态for (i=0; i<8; i++){SER = dat & (0x01);dat >>= 1;SCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令SCK = 0; }RCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令
}/*
// 由于取模软件只能选择横向纵向,但是不能选择纵向从上向下还是从下向上
// 实际测试取模软件的模式,适合先发LSB而不是MSB
void Hc595SendByte(u8 dat)
{u8 i = 0, j = 0;SCK = 0; // 将SCK置为初始状态RCK = 0; // 将RCK置为初始状态for (i=0; i<8; i++){SER = dat >> 7;dat <<= 1;SCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令SCK = 0; }
这里和前面发送串行码的顺序不同 这个需要实际测试 因为这个顺序可能导致LED现实的字是反的
**********************************************************************
* 头文件包含
**********************************************************************
*/
#include <reg52.h>
#include <intrins.h>
/*
**********************************************************************
* 本地宏定义
**********************************************************************
*/
typedef unsigned char u8; // 重命名类型u8简化代码编写
typedef unsigned int u16;#define MATRIX_PORT P0 // 点阵LED负极端口/*
**********************************************************************
* 本地全局变量
**********************************************************************
*/
sbit SCK = P3^6; // SCK上升沿移位
sbit RCK = P3^5; // RCK上升沿串行输出寄存器锁存
sbit SER = P3^4; // SER引脚送字节数据进去// 点阵列选值,数组每个元素的值选中其中一列
u8 gLineCode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /* 字模* 字模由光盘中:工具软件/88字模提取软件/LEDDOT V0.2.exe生成* 注意取模软件菜单栏设置中,设置为:* 字模显示方式:单行* 字模提取方式:逐列* 字模提取格式:C51格式*/u8 gZhu[] = {0x73,0xD6,0x58,0xFF,0x58,0x54,0x52,0x12}; // 汉字 朱
u8 gSi[] = {0x0,0x4,0x1C,0x24,0x7E,0x4,0x0,0x0}; // 数字 4
u8 gK[] = {0x0,0x0,0x7E,0x38,0x66,0x0,0x0,0x0}; // 字模 K/*
**********************************************************************
* 函数原型声明
**********************************************************************
*/
void Hc595SendByte(u8 dat);
void MatrixDisplay(u8 *zimo);/*********************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 参数列表 : 无
* 函数输出 : 无
*********************************************************************/
void main(void)
{MatrixDisplay(gZhu);
}/*********************************************************************
* 函 数 名 : MatrixDisplay
* 函数功能 : 循环刷新显示字模到点阵上
* 参数列表 : zimo - 待显示的字模数组
* 函数输出 : 无
*********************************************************************/
void MatrixDisplay(u8 *zimo)
{u8 i = 0;while (1){for(i=0;i<8;i++){MATRIX_PORT = gLineCode[i]; // 位选Hc595SendByte(zimo[i]); // 发送段选数据Hc595SendByte(0x00); // 消隐} }
}/*********************************************************************
* 函 数 名 : Hc595SendByte
* 函数功能 : 通过74HC595串行移位发送一个字节出去
* 参数列表 : dat - 待发送的字节数据
* 函数输出 : 无
*********************************************************************/
void Hc595SendByte(u8 dat)
{u8 i = 0, j = 0;SCK = 0; // 将SCK置为初始状态RCK = 0; // 将RCK置为初始状态for (i=0; i<8; i++){SER = dat & (0x01);dat >>= 1;SCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令SCK = 0; }RCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令
}/*
// 由于取模软件只能选择横向纵向,但是不能选择纵向从上向下还是从下向上
// 实际测试取模软件的模式,适合先发LSB而不是MSB
void Hc595SendByte(u8 dat)
{u8 i = 0, j = 0;SCK = 0; // 将SCK置为初始状态RCK = 0; // 将RCK置为初始状态for (i=0; i<8; i++){SER = dat >> 7;dat <<= 1;SCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令SCK = 0; }RCK = 1;j++; // 延时代码,等同于nop指令j++; // 延时代码,等同于nop指令
}
*/
51单片机【五】LED点阵屏相关推荐
- 【51单片机】LED点阵屏(74HC595讲解)
- 基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计
基于51单片机的51单片机的LED彩灯霓虹灯控制器(心形流水灯)设计 必看!!视频讲解 基于51单片机的LED彩灯霓虹灯心形流水灯设计 这里写目录标题 1 开发环境 2 功能说明介绍 3 仿真图 4 ...
- 51单片机的LED的位定义(通俗易懂)
51单片机的LED的位定义 一.位定义原理 二.代码实现 三.烧录演示 一.位定义原理 定义方法:sbit 位名=特殊功能寄存器^位置; sbit LED1 = P2^0; 符号"^&quo ...
- 51单片机控制系统的人机交互接口设计【51单片机与LED数码管的动态显示接口案例分析】
本章节利用Keil uVision5和ISIS 7 Professional两个软件来进行仿真实验. [例]运用51单片机实现8位8段数码管的动态显示,LED数码管的段选数据由51单片机的P0口控制, ...
- 51单片机实验 LED半秒闪烁 定时器0方式2 中断实现
51单片机实验 LED半秒闪烁 定时器0方式2 中断实现 实验目的: P1.0接一个发光管,实现亮半秒灭半秒, 要求使用定时器0工作方式2,中断实现. C语言代码: #include "at ...
- 51单片机实现LED数码管0-9999秒的计时功能
标题51单片机实现LED数码管0-9999秒的计时功能 一.实现原理: P0口给高低电平控制LED灯亮暗,来显示数字: 74HC138实现数码管高低电平状态,循环实现数码管动态扫描显示. LED1-L ...
- 51单片机 PWM LED灯亮度调节+Proteus仿真
51单片机 PWM LED灯亮度调节+Proteus仿真 Proteus仿真 实例代码 #include "reg51.h" unsigned int cd,dd; unsigne ...
- 51单片机入门————LED灯的控制
LED的电路图 通过原理图看出,LED灯是接单片机芯片的P20~P27的 一共有8个LED,51单片机也是8字节的 P2=0x01 0xFE----1111 1110 P2=0xFE可以表示把在P2端 ...
- 51单片机实验——LED小灯的操作(一)
目录 引言 led模块原理图解析 led小灯的操作 1.点亮led小灯 位操作法 总线操作法 2.闪烁led小灯 位操作法 总线操作法 3.led流水灯 位操作法 总线操作法 总线操作-数组循环遍历法 ...
- 51单片机8*8点阵屏、取模软件的使用
取模软件网盘提取 链接:https://pan.baidu.com/s/1YYQo_tZNCXlo9uWVbtsNdg 提取码:jfbr 74HC595芯片原理图: 两片595芯片级联驱动点阵屏只需要 ...
最新文章
- Python数据挖掘:数据转换-数据规范化
- 彻底疯了,要给雷锋开博客?
- C语言函数知识体系大学霸IT达人
- python globals().get,python – 为什么人们会使用globals()来定义变量
- Prime Count 求大区间素数个数
- Spark常用函数讲解之键值RDD转换
- P3385-[模板]负环【SPFA】
- 使用C#操作XML文件
- eclipse工程导入Android Studio
- ai人工智能_人工智能能力问答中的人工智能不确定性
- MYSQL8.0 排序查询报错 this is incompatible with sql_mode=only_full_group_by
- CAP原理和最终一致性(Eventually Consistency)
- apt-get安装与卸载
- vue延迟渲染组件_做一个可复用的 echarts-vue 组件(延迟动画加载)
- 《JavaScript 高级程序设计(第四版)》—— 06 集合引用类型
- NLP-语料库:语料库资源介绍
- 粒子群算法的适应度函数问题
- 2022-2028全球放射性废物管理系统行业调研及趋势分析报告
- GMC解封秘籍:解决 Google 账户被封窘境
- 我终于开通了微信公众号