8x8LED点阵+单片机+普中+江科大自化协
1 功能:
(1)静态显示:显示一个笑脸;
(2)动态显示:a,移动显示“HELLO!”,b,显示笑脸哭脸的变化;
2 原理
3 框图
4 硬件原理图


5 软件设计
5.1 静态显示源程序
(1)主函数
#include <REGX52.H>
#include "delay100ms.h" sbit SER = P3^4; //74HC595的串行数据输入DS
sbit RCK = P3^5; //74HC595的移位寄存器SH_CP
sbit SCK = P3^6; //74HC595的锁存寄存器ST_CP #define matrixled_col P0 //笑脸的数据,列向取模
unsigned char code disp[]={0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C}; /**
* @brief:74HC595写入一个字节
* @param:需要写入的字节
* @retval:无
*/
void hc74595_wrbyte(unsigned char byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SER = byte & (0x80>>i);
SCK = 1;
SCK = 0;
}
RCK = 1;
RCK = 0;
} /**
* @brief:LED点阵显示屏显示1列数据
* @param: column 选择要显示的列,范围0-7,0在最左边
* @param: dat 选择列显示的数据,高位在上,1为亮,0为灭
* @retval:无
*/
void matrixled_showcol(unsigned char column,dat)
{
hc74595_wrbyte(dat);
matrixled_col = ~(0x80>>column);
delay100ms(1);
matrixled_col = 0xff;
} void main()
{
unsigned char i;
SCK = 0;
RCK = 0;
while(1)
{
for(i=0;i<8;i++)
{
matrixled_showcol(i,disp[i]);
}
}
}
(2)延时函数及头文件
#include <REGX52.H>
#include <intrins.H> void delay100ms(unsigned int x) //@11.0592MHz
{
unsigned char i;
while(x--)
{
_nop_();
i = 43;
while (--i);
}
}
#ifndef _delay100ms_h_
#define _delay100ms_h_
void delay100ms(unsigned int x);
#endif
5.2 动态显示
5.2.1 移动显示HELLO!!
(1)主函数
#include <REGX52.H>
#include "matrix_8x8led.h" unsigned char code disp[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //0-7,空白区域
0x00,0x7F,0x08,0x08,0x7F,0x00,0x7F,0x49, //8-39,HELLO!!
0x49,0x49,0x00,0x7F,0x49,0x49,0x49,0x00,
0x7F,0x01,0x01,0x01,0x00,0x7F,0x41,0x41,
0x7F,0x00,0x00,0x7B,0x7B,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //40-47,空白区域
}; void main()
{
unsigned char i;
unsigned char offset=0; //偏移量
unsigned char count=0; //延时计数 matrix_8x8led_init(); //LED点阵初始化 while(1)
{
for(i=0;i<8;i++) //循环8次,显示8列数据,即一帧数据
{
matrix_8x8led_showcol(i,disp[i+offset]);
count++; //计数延时,影响数据移动快慢
if(count>20)
{
count = 0;
offset++;
if(offset>40)
offset=0;
}
}
}
}
(2)LED点阵驱动函数
#include <REGX52.H>
#include "delay100ms.h" #define matrixled_col P0 sbit SER = P3^4; //74HC595的串行数据输入DS
sbit RCK = P3^5; //74HC595的移位寄存器SH_CP
sbit SCK = P3^6; //74HC595的锁存寄存器ST_CP /**
* @brief:74HC595写入一个字节
* @param:需要写入的字节
* @retval:无
*/
void hc74595_wrbyte(unsigned char byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
SER = byte & (0x80>>i);
SCK = 1;
SCK = 0;
}
RCK = 1;
RCK = 0;
} /**
* @brief: LED点阵显示屏初始化
* @param: 无
* @retval:无
*/
void matrix_8x8led_init()
{
SCK = 0;
RCK = 0;
} /**
* @brief:LED点阵显示屏显示1列数据
* @param: column 选择要显示的列,范围0-7,0在最左边
* @param: dat 选择列显示的数据,高位在上,1为亮,0为灭
* @retval:无
*/
void matrix_8x8led_showcol(unsigned char column,dat)
{
hc74595_wrbyte(dat);
matrixled_col = ~(0x80>>column);
delay100ms(10);
matrixled_col = 0xff;
}
#ifndef _matrix_8x8led_h_
#define _matrix_8x8led_h_
void matrix_8x8led_init();
void matrix_8x8led_showcol(unsigned char column,dat);
#endif
(3)延时函数:略
5.2.2 笑脸哭脸变化
(1)主函数
#include <REGX52.H>
#include "matrix_8x8led.h" unsigned char code disp[]={
0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C, //笑脸
0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C, //一般
0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C //哭脸
}; void main()
{
unsigned char i;
unsigned char offset=0; //偏移量
unsigned char count=0; //延时计数 matrix_8x8led_init(); //LED点阵初始化 while(1)
{
for(i=0;i<8;i++) //循环8次,显示8列数据,即一帧数据
{
matrix_8x8led_showcol(i,disp[i+offset]);
count++; //计数延时,影响数据移动快慢
if(count>20)
{
count = 0;
offset+=8; //偏移+8,切换下一帧画面
if(offset>16)
offset=0;
}
}
}
}
6 仿真电路图
6.1 显示笑脸效果

6.2 移动HELLO! 略
6.3 笑脸和哭脸变化 略
7 相关资料
(1)51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibili;
8x8LED点阵+单片机+普中+江科大自化协的更多相关文章
- VB6单片机编程中的汉字处理
在DOS时代,拥有一个华丽的汉字菜单几乎是每个高档中文应用程序必须的包装.中文Windows操作系统的出现使得高级开发平台实现全中文的提示和界面非常容易和方便.在一般的应用程序中已经很少需要去专门考虑 ...
- 关于NOR_FLASH的大小在单片机程序中的应用
在单片机开发中,NOR_FLASH常用的有4M和8M的大小: 4M的FLASH在程序中可以这样表示:Ptr < 0x220000 8M的FLASH在程序中可以这样表示:Ptr < 0x40 ...
- 单片机 MCU 中 stack 使用的探讨
stack 的使用,是单片机开发中影响最大,但是最少被讨论的问题.而提及这个问题的地方,都是对这个问题含糊其辞. 今天花了点时间,使用最笨的办法,直接阅读汇编代码,来对这个问题就行探究,这里做一下记录 ...
- 硬件知识整理part3--电阻在单片机系统中的应用
邦有道,如矢:邦无道,如矢. --孔子 电阻在电路中主要功能是限流和分压等等.在单片机系统中自然也是. 电阻作为限流应该是最常用的应用之一,对于单片机外围设计来说,电阻的应用非常重要,在很多时候,我 ...
- 单片机项目中使用新IC芯片的调试方法
前两天,一位小伙伴咨询我一款新IC芯片怎么使用,借此机会我顺便把我日常工作中经常用到的一种调试方法介绍给小伙伴们,希望对对大家有所帮助.准备仓促,文中难免有技术性错误,欢迎大家给予指正,并给出好的建议 ...
- C#中的yield return与Unity中的Coroutine(协程)(下)
Unity中的Coroutine(协程) 估计熟悉Unity的人看过或者用过StartCoroutine() 假设我们在场景中有一个UGUI组件, Image: 将以下代码绑定到Image using ...
- 在C++中使用golang的协程
开源项目cpp_features提供了一个仿golang协程的stackful协程库. 可以在c++中使用golang的协程,大概语法是这样的: #include <iostream> v ...
- 关于keil单片机编程中的data,idata,xdata,pdata,code数据类型
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- C语言在单片机开发中的应用
在单片机的开发应用中,已逐渐开始引入高级语言,C语言就是其中的一种.对用惯了汇编的人来说,总觉得高级语言’可控性’不好,不如汇编那样随心所欲.但是只要我们掌握了一定的C语言知识,有些东西还是容易做出来 ...
- 【转】单片机系统中数字滤波的算法【C程序整理】
随机误差是有随机干搅引起的,其特点是在相同条件下测量同一个量时,其大小和符号做无规则变化而无法预测,但多次测量结果符合统计规律.为克服随机干搅引入的误差,硬件上可采用滤波技术,软件上可以采用软件算法实 ...
随机推荐
- PHP指定编码
header("Content-type: text/html; charset=utf-8");
- 花了不少时间,修复了一个SharpIco生成图标的bug
前言 上个月我用 dotnet9 AOT 开发了一个 ico 图标生成工具 SharpIco 这个实用小工具一经发布就受到不少朋友的关注 最近还被做成了网站,有图形化界面来一键生成 ico 图标,更方 ...
- 基于 swoole 下 异步队列和毫秒定时任务 API
说明 1.在 Server 程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web 服务器中发送邮件.如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢. Swoole 提供了异步 ...
- SQL Server 2008~2022版本序列号/密钥/激活码 汇总
SQL Server 2008~2022版本序列号/密钥/激活码 汇总 - 重庆熊猫 - 博客园 (cnblogs.com) SQL Server 2022# Enterprise: J4V48-P8 ...
- 5.8Gwifi串口服务器、485转wifi多功能串口转WIFI 、232转wifi、Modbus转RTU、工业自动化系统
ZLAN7146是继ZLAN7100.ZLAN7142.ZLAN7144之后推出的又一款WIFI串口服务器.该串口服务器可以方便地使得串口设备连接到WIFI无线网络,实现串口设备的无线化网络升级.RS ...
- Oracle中的函数与存储过程
自定义函数 函数的最大特征是必须返回值 创建自定义函数 创建函数使用create or replace function命令 create or replace function 函数名 return ...
- java--Hibernate关联映射
hibernate 程序执行流程 集合映射 User.java public class User { private int userId; private String userName; // ...
- 保姆级vmware安装MacOS
为啥是v10.15 MacOS10.15对硬件的要求很低,一般是不会卡的 准备工作 开始之前,请先完成以下步骤: 你的计算机中装有VMware Workstation 15及以上版本, 并确定你的磁盘 ...
- s40破解证书
说明因为怀旧,淘了个诺基亚5130xm.打开jar软件(比如QQ音乐,Anyview)后发现个问题,老是频繁弹出"是否同意读取用户数据"的弹窗而这些软件可能没有证书,没有证书的话意 ...
- 前端开发系列036-基础篇之call && apply
本文介绍JavaScript 中的 call .apply 和 bind 方法的基本使用,使用注意点以及常见的使用场景等,并简单介绍这些方法的实现原理提供对应的源码. call && ...