历史上的今天
今天是:2025年04月01日(星期二)
2020年04月01日 | 使用51单片机和MAX7219控制点阵滚动显示
2020-04-01 来源:eefocus
最近玩MAX7129控制点阵,弄了一个用51和MAX7219控制两个1088AS点阵滚动显示。此文章作为总结。方便自己日后需要时回顾,也方便他人借鉴参考。文中如果有地方不准确,有错误,欢迎指正。
这次主要用了一个STC89C52RC、两个MAX7219和两个1088AS8*8点阵。
刚开始做了好几天没弄出来,最后发现是硬件出了问题……弄好硬件后很快就做了出来。下面主要是在整个过程中一些探索
1088AS
因为之前没找到相关资料,所以自己一个一个引脚测了一下,第一张图是自己测的各引脚控制的行或列以及是接GND还是VCC,右侧是标有1088AS和突出一个半圆的一侧。第二张厂家公司提供的,他这个排列方式……反正我是有点懵。


MAX7219
芯片的各个引脚

芯片的各个引脚作用以及典型应用电路可以从芯片手册中了解。注意DIG-SEG+。
程序
这个直接附上,也不难。
#include //宏定义 #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 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]); 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); } 
史海拾趣
|
从1986年到2005年的20年,是中国电子信息企业创业发展的20年,而20张排行榜浓缩了我国电子信息百强企业的发展历程与变化。 名称变化工厂变公司和集团 20世纪90年代中期以前的企业,都称为“某某厂”,1987年第一届百强名单中,企 业名称中以“厂”字为后 ...… 查看全部问答> |
|
ISD4004语音系列芯片是美国ISD公司推出的产品,具有可多次重复录放、存储时间长、使用时不需扩充存储器、所需外围电路简单等特点。介绍了ISD4004芯片在语音报站器中的一个实际应用,并说明了其功能和使用方法,从而使读者对ISD ...… 查看全部问答> |
|
摘要: 在FPGA片内实现全数字锁相环用途极广。本文在集成数字锁相环74297的基础上进行改进,设计了锁相状态检测电路,配合CPU对环路滤波参数进行动态智能配置,从而使锁相环快速进入锁定状态,在最短时间内正常工作并且提高输出频率的质量。 关键词 ...… 查看全部问答> |
|
企业面试电子类面试题[模拟电路] 企业面试电子类面试题[数字电路] 企业面试电子类面试题[IC设计基础] 企业面试电子类面试题[单片机/MCU/计算机原理] 电子类笔试技巧及相关基础问题 EE类笔试题 … 查看全部问答> |
|
谁有PIC单片机上韦根的接收程序,发我参考下,多谢了。。我自己也写了个是用数组来接收的,不过用不起来。。。 要是C语言的哦。。最好是整个的,包括中断什么的。。。 E-mail:shanligang@vip.qq.com… 查看全部问答> |




