为了让大家更深入地了解底层的原理,在讲解时特意选择了51单片机(而非STM系列),另外16*16点阵由译码器和移位缓存器直接驱动(而非MAX系列芯片),摇杆也利用ADC功能判断方向。
![1803bef5da8f957bf4243ef06713e875.png](https://i-blog.csdnimg.cn/blog_migrate/ec0b8b13941f31c9fd7b817c6f6ede35.jpeg)
![7cb076c35841941ad89e7232c45990d6.png](https://i-blog.csdnimg.cn/blog_migrate/2205a67e95a51eb642b636f007893b6e.png)
![a9ea7c01ecf12313d26854a32b86e8ea.png](https://i-blog.csdnimg.cn/blog_migrate/01e2b4fc97ddbd4159ee0640f9acb259.jpeg)
![7cb076c35841941ad89e7232c45990d6.png](https://i-blog.csdnimg.cn/blog_migrate/2205a67e95a51eb642b636f007893b6e.png)
![cd6da09f11d7c4441eddd36112dfc438.gif](https://i-blog.csdnimg.cn/blog_migrate/f1d4f222ac8747d708dd25d1f97c3b71.gif)
那如何让单片机驱动这256个点呢?直接用IO口驱动显然不够且十分浪费。为了解决这个问题,我们要引入动态扫描的方法,它利用了人类的视觉暂留现象:如果让点阵的每一行分别轮流显示,当扫描速度足够高时,我们并不会看到一行一行地闪动,而是一幅完整的图像。
在驱动这个16*16点阵时,单片机会首先选中一行,然后将16位的数据输出以显示一行,在做短时间的停顿后接着再选择下一行输出,如此往复对这16行进行高速扫描就可以在点阵上看到要显示的图像。
先来讲解一下16*16点阵的原理。为了方便大家理解,我们先来看一下8*8点阵的电路图。它实际上由64个LED组成,每行共阴,每列共阳,当某行输出信号为低电平时,整一行LED阴极均为低电平,当在列上分别输入不同的电平信号时,交叉点的LED就会有不同的亮灭情况,以此不断循环扫描,就可以显示完整的图像。
![cc7e3b727f992b3e295a740f17231cf3.png](https://i-blog.csdnimg.cn/blog_migrate/d73f297e9cbe171c5479ee1aeb1f4338.jpeg)