asp.net网站开发实例视频教程,雄安建站服务,中国建设银行网站密码是什么意思,建站管理域名管理绑定外部域名中为了让大家更深入地了解底层的原理#xff0c;在讲解时特意选择了51单片机(而非STM系列)#xff0c;另外16*16点阵由译码器和移位缓存器直接驱动(而非MAX系列芯片)#xff0c;摇杆也利用ADC功能判断方向。那如何让单片机驱动这256个点呢#xff1f;直接用IO口驱动显然不够且… 为了让大家更深入地了解底层的原理在讲解时特意选择了51单片机(而非STM系列)另外16*16点阵由译码器和移位缓存器直接驱动(而非MAX系列芯片)摇杆也利用ADC功能判断方向。那如何让单片机驱动这256个点呢直接用IO口驱动显然不够且十分浪费。为了解决这个问题我们要引入动态扫描的方法它利用了人类的视觉暂留现象如果让点阵的每一行分别轮流显示当扫描速度足够高时我们并不会看到一行一行地闪动而是一幅完整的图像。在驱动这个16*16点阵时单片机会首先选中一行然后将16位的数据输出以显示一行在做短时间的停顿后接着再选择下一行输出如此往复对这16行进行高速扫描就可以在点阵上看到要显示的图像。先来讲解一下16*16点阵的原理。为了方便大家理解我们先来看一下8*8点阵的电路图。它实际上由64个LED组成每行共阴每列共阳当某行输出信号为低电平时整一行LED阴极均为低电平当在列上分别输入不同的电平信号时交叉点的LED就会有不同的亮灭情况以此不断循环扫描就可以显示完整的图像。8*8点阵的原理图16*16点阵实质上为4个8*8点阵组合而成对它的控制和8*8点阵也是大同小异同样是分别扫描所有的行并输出列的数据以此输出完整的16*16图像。我们首先来考虑点阵行的控制由于要节省单片机的引脚我们使用74HC138译码器来控制不同的行这里采用两个译码器分别对16行进行选择。74HC138引脚图VDD和GND分别为电源正负极A0,A1,A2负责数据输入Y0到Y7进行译码输出E1,E2,E3为使能引脚只有当E1和E2均为低电平E3为高电平时译码器才会正常输出否则只会全部输出高电平。在使用时只需要输入3位二进制加权地址就能提供8个互斥的低有效输出。74HC138架构图由于2^38那3位的二进制数据刚好能用于输出8位的互斥数据我们正是借用这个特性来对点阵进行行扫描。根据译码器数据手册提供数据我们可以得知使用3位二进制加权地址来输出8位的互斥信号的真值表。74HC138真值表由于译码器输出电流较低必须借助三极管分别放大输出信号才能正常驱动LED。此处将译码器的输出接口分别连接到PNP三极管的基极然后发射极连接点阵的行引脚由于所有三极管的发射极均连接在VCC上当输入低电平时集电极就会输出高电平否则就输出低电平以此放大译码器的控制信号。74HC138输出的原理图两个74HC138的连接图对比两个译码器的连接图稍有不同对比一下可以发现它巧妙地利用了74HC138的使能特性当G为高电平时两个译码器均无输出当G为低电平且D为低电平时第一个译码器使能而第二个译码器关闭反之第二个译码器使能而第一个译码器关闭所以这里就可以直接使用A B C D对16行进行选择控制G使能全部输出。同样是为了节省IO口我们使用了两个74HC595级联进行列输出由于列输出内容是不确定的所以我们要借助位移缓存器将串行数据转化为并行数据。74HC595引脚图这里VCC和GND分别为电源正负极Q0到Q7为输出接口DS为数据输入口SHCP为数据输入时钟STCP为输出存储器锁存时钟线MR用于清零移位寄存器OE为输出使能Q7S可以连接到下一级位移缓存器的DS。查阅数据手册可知当SHCP产生一个上升沿的时候移位寄存器读入DS上的电平信号并且所有的数据都向后移动了一位。当数据输入完毕时在STCP上发送一个上升沿可以让移位寄存器的数据锁存输出由于有移位寄存器的存在进行数据输入的时候可以有效避免“鬼影”问题。此处为了方便大家理解引入了IC的架构图。74HC595架构图在这个制作中我们不需要对移位缓存器进行单独操作因此将OE接地MR接VCC即可。把SHCP和STCP分别合并同时引出为CLK和LATCH输入线第二个IC的DS接到第一个IC的级联输出端上以实现多个74HC595的级联再将第一个IC的DS端引出为DATA输入线这样子我们用三根线就可以实现16位数据的串行输出。两个74HC595的连接图 总结一下这个16*16点阵需要两根电源线和八根数据线进行驱动其中A B C D和G进行选择DATA,CLK和LATCH串行输出16位的列显示数据。在选通一行后74HC595输出该行数据总共16行依次循环进行动态扫描让16*16的点阵显示出来需要的文字或者图形。 接着我们用摇杆来控制蛇的走向。摇杆的本质是X轴和Y轴的两个电位器在摇杆运动的时候通过读取两个电位器的输出电压就可以分别得到X轴和Y轴的坐标。由于得到是模拟数据利用单片机的ADC功能来获取电压大小即可得到前后左右的运动数据。 目前国内大部分51单片机为STC的产品因此我们选用了STC8单片机作为控制中心来驱动整个游戏。鉴于贪吃蛇程序在系统平台上编写过于简单这里就不再赘述游戏逻辑的编程。下面的C语言代码用Keil编译后通过串口烧录进单片机即可。头文件及常量定义全局变量定义定义八个数据线的引脚位置全局初始化向74HC595发送8bits的数据的函数借助位运算进行行选驱动整个点阵对摇杆的扫描及响应定时器中断生成随机点贪吃蛇的游戏逻辑简易的main函数以上就是整个贪吃蛇游戏的主要代码分为从硬件上驱动IC和在软件上进行游戏的过程虽然很简单但能让初学者了解51单片机对74系列IC的使用和ADC的读取也能对单片机的编程加强认知。谢谢大家图文林钜聪排版刘杨审核梁庆铧