2021-04-22 51单片机玩转点阵

理论就不赘述了,网络上多得很,直接从仿真软件感性上操作认识点阵,首先打开ISIS仿真软件,放置一个点阵和电源与地线就可以开始了;由点阵任何一脚连线到地线,另一边对应的引脚就连接到电源,如图:点击运行看是否点亮?看到蓝色与红色的点表示电源正常但是没有任何亮点,这时对调一下电源与接地的连线或者反转一下点阵删除原来的连线后重新连接后运行可见点亮了点阵中的一个LED了,有时打开以前电路图,运行程序595驱动点阵显示全亮不显示字符,也要把点阵反转重新连接引脚。接下来连接上排另一引脚到电源试看,可见点亮了2个LED点,把上排第二引脚连线删除,连接下排第二个引脚试看,可见也点亮了2个LED点,由此可以推导出有2种接法:若要显示一个文字可以使用竖式也可以使用横式,取模软件对应的可以有这样的数据;而用横还是用竖则决定了哪一边接成数据,哪一边接成位,对应的单片机IO组就要送数据和位的信号了.

比如说要让点阵竖的一排都点亮,那么,就把下排当作数据,而上排对应的引脚就成为了位,如图;如果连接上排第二引脚到电源会怎样?仿真不伤电子元件的,可大胆一试如图;这样就点亮了2条竖线了,由此可以推导上排引脚都连接起来则整个点阵就都亮起来了,同理横式的就是反过来使用即上排为数据下排为位,因此,显示文字就有了竖式和横式,引脚的连线自上而下还是自下而上,自左而右还是自右而左后面讨论.显示文字或图像就是要控制哪些点亮哪些不亮就能组成文字或图像了.

到了这里是否有跃跃欲试的感觉?当然有了,那就来用单片机连接来控制点阵,首先连接电路如图点击运行试看没任何点亮,是因为还没有写一个字的代码,也没下载程序到单片机内,而单片机默认的引脚都是高电平的,除了P0组是开漏外,因此,P0组显示的不是红色和蓝色的,红色代表电源,蓝色代表接地.

接着找到一个字的数据,如:首先弄明白数据的类型,如边上的注释是我猜测的,事实上我也不知道这2个数组内容到底是什么,不过没关系,可以通过辅助工具看个大概这2组8个数据到底是什么,是否像注释的一样,这些数据来自问贴求问大佬为什么我的代码无法让8*8的led点阵点亮  用的是普中的板子?-编程语言-CSDN问答.

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位

打开电脑上的计算器,选项到程序员,如图,那如何在计算器上输入数据查看?首先看第一组8个数据,发现有数字也有字符,通常有字符的可推断为16进制,16进制内容是这样:0123456789ABCDEF,看数组内有FE字符即可断定,当然有经验的看到数据由0x也可断定是16进制数据,想了解的0x详情的自行摆渡去,不赘述了,0x后面2个就是数据了,因此,在计算器上点击按钮F和E,当然,得先在计时器上选16进制才能数人字符,输入字符后会是什么?如图,看到的是1111 1110正好对应一组IO的8个引脚的高低电平,再输入另外的数据试看,这样一看通常就是数据组了;

当然也不急,可再看第二数组,按顺序弄3个试看,可看到其中的0在移动,由显示可推测是位控制数据.

由上查看数组,并结合点阵引脚点亮的电平,可用来确定数据送给哪组IO从而完成显示文字。由上面点亮点阵可知0(低电平)点亮的竖式,因此,可确定第一组数据送点阵上排引脚,第二组数据送点阵下排引脚,点阵上排连接单片机P2组因此写代码时送给P2,点阵下排连接单片机P3组,同理写代码时送P3。
好,大致了解并初步确定之后,新建这个单片机代码工程,复制之上代码,写一个单片机运行的空循环代码,如下。由于引用了头文件REG52因此可以直接使用IO组,不需要再写声明IO组。

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{while(1){}
}

精彩正式开始了,先试着送2个数组内的数据给点阵试看会如何?添加代码如下,并下载到仿真中后点击运行仿真,看到点阵都没亮,只看到点阵引脚有红色和蓝色的点。

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{P2=shuju[0];P3=sjwei[0];while(1){}
}


为了方便,修改代码用变量作为数组的索引,这样就改变一个变量的值也就同时改变了对数组索引的数据的使用,修改如下:

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{unsigned char b=1;P2=shuju[b];P3=sjwei[b];while(1){}
}

编译代码工程后下载到仿真,运行:

鹅鹅,这回看到点阵显示2个点了,哈哈,同时由之上的试验可以对比到为何出现2个点看计算器的BF和82图片,接下来把代码移动到循环内运行8个数据,看会如何?修改如下:

#include<reg52.h>//头文件unsigned char code shuju[]={0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{unsigned char b=1;while(1){P2=shuju[b];P3=sjwei[b];if(++b>7)b=0;}
}

编译代码工程后下载到仿真,运行:鹅鹅鹅,看到图形了,是个文字H?还是图形车轮?从演示可以看到引脚电平变化;

逐一测试问贴数据,并采用了消隐措施,看图会发现不同的地方。
 

 接下来编写3组数据循环自动切换显示:当然可以不断添加数据组。

#include<reg52.h>//头文件unsigned char code shuju[][8]={{0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00}, {0x18,0x24,0x12,0x12,0x12,0x24,0x18,0x00}, {0x00,0x7C,0x02,0x02,0x02,0x7C,0x00,0x00}};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位void main()
{unsigned char b=0, j=0, xd=0, h=0;unsigned int ys=0;while(1){P2=shuju[j][b];P3=sjwei[b];while(++xd);//显示延时P3=255;//换位消隐if(++b>7)b=0;if(++ys>=1747){ys=0;if((++j)>=3)j=0;}}
}

 让文字移动起来:值计算替换数组节约空间使用。

使用2片595驱动点阵:兼顾回复单片机小白求助,三个74hc595控制三个lcd1602的设计思路 - 24小时必答区 
51蛋骗鸡-玩转点阵-595级联驱动-字幕移动实例资源 - 24小时必答区

#include<reg52.h>//头文件sbit ds=P1^0;//数据线  595的14脚
sbit shcp=P1^1;//数据输入时钟线 595的11脚
sbit stcp=P1^2;//输出存储器锁存时钟线 595的12脚
sbit mr=P1^3;//数据清零unsigned char code shuju[]={
0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00,0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00,0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,
0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,0x82,0x82,0xFE,0x82,0x82,0x00,0x00,0x18,0x24,0x12,0x12,0x12,0x24,0x18,0x00,
0x00,0x7C,0x02,0x02,0x02,0x7C,0x00,0x00
};//数据
unsigned char code sjwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位,用移位函数,移位运算符,数字.
unsigned int QY(unsigned char sj, unsigned char jz)
{return (sj-sj/jz*jz);
}
void QuDong595(unsigned char sj)
{unsigned char aa=8;while(aa--){ds=sj>>7;sj<<=1;//十六进制数据发送
//		ds=QY(sj,2);sj/=2;//十进制数据发送shcp=1;//上升沿发生移位 上升沿时数据寄存器的数据锁存。shcp=0;}stcp=0;      stcp=1;//上升沿将数据送到输出锁存器   stcp=0;
}void main()
{unsigned char b=0, j=0, xd=0, h=0;	unsigned int ys=0;while(1){P2=shuju[b+j];P3=sjwei[b];QuDong595(shuju[b+j]);QuDong595(sjwei[b]);//%256while(++xd);//显示延时P3=255;//换位消隐mr=0;mr=1;if(++b>7)b=0;if(++h==0)//切换数据延时+显示延时if((++j)>=8*6)j=0;}
}

数据%256 QuDong595(~shuju[(7-b)+(8*8-j)]);

 数据7-b,7-b+j

利用取整特性求余提高速度,利用询问式提高速度,都能充分减少时间占用,提高时间支配能力。调换数据与位发送顺序取反。

使用硬件消隐,仿真接太多了,以至于发生不能完整显示转向去掉LED排后正常,花费很多时间排查

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

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

相关文章

(十三)JavaWeb后端开发——MySQL2

目录 1.DQL数据查询语言 1.1基本查询 1.2条件查询 where关键字 1.3分组查询 1.4排序查询 1.5分页查询 2.多表设计 3.多表查询——联查 4.多表查询——子查询​ 5.MySQL 事务 6.事务管理&#xff08;事务进阶&#xff09; 7.MySQL 索引 1.DQL数据查询语言 分为五大…

恭喜!2024年度大连市科技人才创新、科技人才创业项目拟立项公示!

精选SCI/SSCI/EI SCI&EI ●IEEE 1区TOP 计算机类&#xff08;含CCF&#xff09;&#xff1b; ●EI快刊&#xff1a;最快1周录用&#xff01; 知网(CNKI)、谷歌学术期刊 ●7天录用-检索&#xff08;100%录用&#xff09;&#xff0c;1周上线&#xff1b; 免费稿件评估 …

【前端】-音乐播放器(源代码和结构讲解,大家可以将自己喜欢的歌曲添加到数据当中,js实现页面动态显示音乐)

前言&#xff1a;音乐播放器是前端开发中的一个经典项目&#xff0c;通过它可以掌握很多核心技术&#xff0c;如音频处理、DOM操作、事件监听、动画效果等。这个项目不仅能提升前端开发的技能&#xff0c;还能让开发者深入理解JavaScript与HTML的协同作用。 页面展示&#xff1…

虚拟机linux7.9下安装mysql

1.MySQL官网下载安装包&#xff1a; MySQL :: Download MySQL Community Server https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 2.解压文件&#xff1a; #tar xvzf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz 3.移动文件&#…

03_CC2530基于定时器3的Delay_ms函数

CC2530定时器3与Delay_ms延时函数 前言 ​ Delay函数是开发中常用到的函数&#xff0c;可以用于按键消抖&#xff0c;LED闪烁&#xff0c;生成一定频率信号等(软件模拟通讯协议)。由于利用循环执行一定次数的空指令实现的延时函数在精度上并不能让人满意&#xff0c;而用定时…

【系统面试篇】其他相关题目——虚拟内存、局部性原理、分页、分块、页面置换算法

目录 一、相关问题 1. 什么是虚拟内存&#xff1f;为什么需要虚拟内存&#xff1f; &#xff08;1&#xff09;内存扩展 &#xff08;2&#xff09;内存隔离 &#xff08;3&#xff09;物理内存管理 &#xff08;4&#xff09;页面交换 &#xff08;5&#xff09;内存映…

43.第二阶段x86游戏实战2-提取游戏里面的lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

容器内pip安装Apache Airflow的经历:如何重置初始密码

背景 Apache Airflow™https://github.com/apache/airflow 是一个开源平台&#xff0c;用于开发、调度和监控面向批处理的工作流程。Airflow 可扩展的 Python 框架使您能够构建几乎可以连接任何技术的工作流程。Web 界面有助于管理工作流程的状态。Airflow 可以通过多种方式部…

Java爬虫 爬取某招聘网站招聘信息

Java爬虫 爬取某招聘网站招聘信息 一、系统介绍二、功能展示1.需求爬取的网站内容2.实现流程2.1数据采集2.2页面解析2.3数据存储 三、其它1.其他系统实现 一、系统介绍 系统主要功能&#xff1a;本项目爬取的XX招聘网站 二、功能展示 1.需求爬取的网站内容 2.实现流程 爬虫…

stm32不小心把SWD和JTAG都给关了,程序下载不进去,怎么办?

因为想用STM32F103的PA15引脚&#xff0c;调试程序的时候不小心把SWD和JTAD接口都给关了&#xff0c;先看下罪魁祸首 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关掉JTAG&#xff0c;不关SWGPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//关掉SW&am…

雷军-2022.8小米创业思考-11-新零售:用电商思维做新零售,极致的效率+极致的体验。也有弯路,重回极致效率的轨道上。

第十一章 新零售 当我们说到小米模式的时候&#xff0c;其实我们说的是两件东西&#xff1a; 一是小米模式的本质&#xff0c;即高效率的商业模式&#xff1b; 另一件是小米这家公司具象的商业模式&#xff0c;这是小米在实践中摸索、建立的一整套业务模型。 从2015年到202…

C语言实现数据结构之堆

文章目录 堆一. 树概念及结构1. 树的概念2. 树的相关概念3. 树的表示4. 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 二. 二叉树概念及结构1. 概念2. 特殊的二叉树3. 二叉树的性质4. 二叉树的存储结构 三. 二叉树的顺序结构及实现1. 二叉树的顺序结构2.…

知识课堂之域名系统中实现动态代理

怎么在域名系统中解析动态ip&#xff0c;这一直是一个需要解决的问题&#xff0c;人们对与网络的稳定连接与灵活运用已经成为生活和工作中不可或缺的一部分&#xff0c;因此这样的问题的解决迫在眉睫。 大家对于动态ip是什么&#xff0c;应该都有所了解了&#xff0c;所谓的动…

5G周边知识笔记

这里写目录标题 3GPP 5G标准路径图5G协议规范5G新空口关键指标4G LTE和5G NR新空口技术对比5G新频段FR1FR2 信道带宽上下行解耦新频点规划&#xff0c;信道栅格FR1各频段实际信道栅格和NR-ARFCN范围定义 同步栅格大规模天线阵列新型调制编码技术大规模载波聚合设备到设备直接通…

uniapp配置h5路由模式为history时404

为了不让URL中出现#&#xff0c;让uniapp项目配置h5路由模式为hisory 然而本地好好的&#xff0c;放到服务器上却404了。 解决方法是给nginx配置一个伪静态&#xff1a; location /xxx-html/ {alias /home/nginx_web/xxx_new_html/;try_files $uri $uri/ /xxx-html/index.ht…

python画图|灵活的subplot_mosaic()函数-初逢

【1】引言 前述学习进程中&#xff0c;对hist()函数画直方图已经有一定的探索。然而学无止境&#xff0c;在继续学习的进程中&#xff0c;我发现了一个显得函数subplot_mosaic()&#xff0c;它几乎支持我们随心所欲地排布多个子图。 经过自我探索&#xff0c;我有一些收获&am…

单体架构的 IM 系统设计

先直接抛出业务背景&#xff01; 有一款游戏&#xff0c;日活跃量&#xff08;DAU&#xff09;在两千左右&#xff0c;虽然 DAU 不高&#xff0c;但这两千用户的忠诚度非常高&#xff0c;而且会持续为游戏充值&#xff1b;为了进一步提高用户体验&#xff0c;继续增强用户的忠…

vue实现天地图电子围栏

一、文档 vue3 javascript WGS84、GCj02相互转换 天地图官方文档 注册登录然后申请应用key&#xff0c;通过CDN引入 <script src"http://api.tianditu.gov.cn/api?v4.0&tk您的密钥" type"text/javascript"></script>二、分析 所谓电子围…

【C++前缀和 单调栈】1124. 表现良好的最长时间段|1908

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 C单调栈 LeetCode 1124. 表现良好的最长时间段 给你一份工作时间表 hours&#xff0c;上面记录着某一位员工每天的工作小时数。 我们认为当员工一天中的工作小时数大…

qt5将程序打包并使用

一、封装程序 (1)、点击创建项目->库->clibrary &#xff08;2&#xff09;、填写自己想要封装成库的名称&#xff0c;这里我填写的名称为mydll1 &#xff08;3&#xff09;、如果没有特殊的要求&#xff0c;则一路下一步&#xff0c;最终会出现如下文件列表。 (4)、删…