使用51单片机和MAX7219控制点阵滚动显示
最近玩MAX7129控制点阵,弄了一个用51和MAX7219控制两个1088AS点阵滚动显示。此文章作为总结。方便自己日后需要时回顾,也方便他人借鉴参考。文中如果有地方不准确,有错误,欢迎指正。
这次主要用了一个STC89C52RC、两个MAX7219和两个1088AS8*8点阵。
刚开始做了好几天没弄出来,最后发现是硬件出了问题……弄好硬件后很快就做了出来。下面主要是在整个过程中一些探索
1088AS
因为之前没找到相关资料,所以自己一个一个引脚测了一下,第一张图是自己测的各引脚控制的行或列以及是接GND还是VCC,右侧
是标有1088AS和突出一个半圆的一侧。第二张厂家公司提供的,他这个排列方式……反正我是有点懵。
MAX7219
芯片的各个引脚
芯片的各个引脚作用以及典型应用电路可以从芯片手册中了解。注意DIG-\SEG+。
程序
这个直接附上,也不难。
#include <reg52.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
//定义MAX7219与单片机的连接引脚
sbit CLK = P1^0;//时钟序列输入端
sbit CS = P1^1;//载入数据端
sbit DIN = P1^2;//串行数据输入端
//Hello World数组
uchar code array[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x10,0x7E,0x00,0x7C,0x54,0x5C,0x00,
0x7E,0x40,0x00,0x7E,0x40,0x00,0x38,0x44,0x38,0x00,0x3E,0x40,0x38,0x40,0x3E,0x00,
0x38,0x44,0x38,0x00,0x7C,0x08,0x04,0x00,0x7E,0x40,0x00,0x70,0x50,0x7E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
//hello world!
};
//延时函数
void Delay_xms(uint x)
{uint i,j;for(i=0;i<x;i++){for(j=0;j<112;j++);}
}
//向MAX7219写入字节
void write_MAX7219_byte(uchar DATA)
{uchar i;CS = 0;for(i=8;i>=1;i--){CLK = 0;DIN = DATA&0x80;DATA=DATA<<1;CLK = 1;}
}
//向第一个MAX7219写入数据
void write_MAX7219_1(uchar address,uchar dat)
{CS = 0;write_MAX7219_byte(address);write_MAX7219_byte(dat);CS = 1;
}
//向第二个MAX7219写入数据
void write_MAX7219_2(uchar address,uchar dat)
{CS = 0;write_MAX7219_byte(address);write_MAX7219_byte(dat);CLK = 1;write_MAX7219_byte(0x00);write_MAX7219_byte(0x00);CS = 1;
}
//设置MAX7219
void Init_MAX7219()
{write_MAX7219_1(0x09,0x00);write_MAX7219_1(0x0A,0x03);write_MAX7219_1(0x0B,0x07);write_MAX7219_1(0x0C,0x01);write_MAX7219_1(0x0F,0x00);write_MAX7219_2(0x09,0x00);write_MAX7219_2(0x0A,0x03);write_MAX7219_2(0x0B,0x07);write_MAX7219_2(0x0C,0x01);write_MAX7219_2(0x0F,0x00);
}void main()
{uchar i,j;Delay_xms(50);Init_MAX7219();while(1){for(j=0;j<=40;j++){for(i=1;i<9;i++){write_MAX7219_1(i,array[j+i-1]);write_MAX7219_2(i,array[8+j+i-1]);}Delay_xms(500);}}
}
字的取模
取模我用的字是“hello world”,这个刚开始学习51时取模方法不同,这个不需要黑白反显。下图是我的点阵两个都是有半圆的一边朝右,所以取模时,先设定的是高8宽48,就是横着一行字,然后顺时针旋转九十度再左右调转,取出来就可以了
调试
调的地方就是
这行里面的array[8+j+i-1]里的8
write_MAX7219_2(i,array[8+j+i-1]);
刚开始想当然的弄了个9,后来发现好像不对,然后在写入数据后面加了个延时,延长了他在切换列时的间隔,发现第二个点阵比设想中的快了一个,然后将9改成了8
for(i=1;i<9;i++){write_MAX7219_1(i,array[j+i-1]);write_MAX7219_2(i,array[8+j+i-1]);Delay_xms(150);}
使用51单片机和MAX7219控制点阵滚动显示相关推荐
- 51单片机IIC 12864 OLED屏幕滚动显示仿真
51单片机IIC 12864 OLED屏幕滚动显示仿真 程序代码接着前面文章<STC15W408AS单片机IIC驱动0.96寸OLED显示> 这里不再贴出代码了,前面有一篇有实物效果演示, ...
- 【51单片机】MAX7219 LED点阵GUI设计
文章目录 一.主要功能 二.硬件资源 1.硬件准备 2.硬件连接 三.软件设计 1.软件结构 2.主要代码 四.实验现象 联系作者 一.主要功能 LED点阵显示初始信息,可通过K3键切换显示模式,可实 ...
- 串口控制74HC164C语言,51单片机74HC164串口控制数码管显示
一般数码管需要接7个脚才能显示,如果用单片机本身的I/O口,虽然可以但是浪费宝贵的i/O口资源.本例用移位寄存器74HC164作为数码管驱动进行控制. 74HC164特性 是一种8位串转并口的控制 ...
- 51单片机实现电机控制和LCD显示
利用51单片机PWM技术实现对直流电机的控制,在预设档位上进行调节,并且在LCD屏幕上显示. PS:更改针脚可以PWM调灯光. PS:有LCD点亮的模块.
- 基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资料)
资料编号:086 采用stm32单片机,可以通过蓝牙app控制点阵显示不同效果, 具体功能请看演示视频,全套资料齐全: 86-基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资 ...
- K_A02_003 基于单片机驱动8位数码管模块(MAX7219) 0-7静态显示+滚动显示
目录 一.资源说明 二.基本参数 1.电气参数 2.引脚说明 三.通信协议说明 工作时序 对应程序 四.部分代码说明 1.接线说明 1.1.STC89C52RC+8位数码管模块 1.2.STM32F1 ...
- 51单片机PID算法控制无刷直流电机proteus仿真
51单片机PID算法控制无刷直流电机proteus仿真 1.五个按键,停止/启动,正转,反转,加速,减速 2.显示lcd1602,第一行设置速度set= 3.第二行实际速度speed= r/min 4 ...
- 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计
1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...
- 51单片机模拟电梯控制(含完整代码)
51单片机模拟电梯控制 前言 一.普中51-单核-A2开发板 二.系统功能 三 .预定义 四.电梯内按有报警按键,该功能由外部中断功能和蜂鸣器实现 五.延时函数-----电梯每上升,下降一层和开门关门 ...
最新文章
- 使用1个盘三个5G分区创建12G逻辑卷
- 2017网易校招真题 合唱团
- oracle游标循环定义变量赋值,PL/SQL 循环 数组 游标的使用
- 关于微信浏览器H5 React,Vue工程化项目input无法自动聚焦疑难杂症排查
- AMD中国:没有对拼多多及其平台上任何店铺授权
- Excel的导入与导出(POI)
- Python webdriver 读取本地csv文件中数据 提示:IOError: [Errno 2] No such file or directory
- java获取中文拼音首字母
- 大数模拟——K - Large Division LightOJ - 1214
- java安装后怎么打开_java安装后怎么打开教程
- ARCore快速入门-02导入ARCore For Unity
- 学习笔记|复杂嵌套的三目表达式如何分割?
- Qt:十六进制字符串和十六进制互转
- PS 钢笔工具
- Web入门学习笔记1——建立第一个网站
- git-cz 规范提交代码注释
- mysql绘制er图菱形表示什么意思_ER图中菱形表示的是()
- 亿级(无限级)并发,没那么难-科普文
- 服务器返回的14种常见HTTP状态码
- Unity Shader GrabPass 使用注意的问题
热门文章
- 希尔伯特黄变换matlab,HHT变换的三种方法 Matla
- 【bmzctf-crypto】--writeup
- 2022 Weex 工程搭建流程
- C++实现顺序结构线性表的基本操作
- Python学习整理(之一)
- golang指定图片大小,图片生成(白底黑字)。将一张随机图片与生成图片合成
- macOS Catalina 10.15.6(19G2021)原版镜像CDR下载
- java远程代码注入_Java RMI远程反序列化任意类及远程代码执行解析(CVE-2017-3241 )...
- 频偏纠正matlab实现,频偏估计matlab代码
- Ethercat学习日记