项目十二 多个数码管的静态显示_第1页
项目十二 多个数码管的静态显示_第2页
项目十二 多个数码管的静态显示_第3页
项目十二 多个数码管的静态显示_第4页
项目十二 多个数码管的静态显示_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

多个数码管的静态显示项目十二1(1)掌握移位寄存器的级联方法。234项目指南(2)掌握移位寄存器控制多个数码管的编程方法。(3)掌握锁存器的功能。(4)掌握锁存器控制多个数码管的编程方法。用Proteus软件仿真锁存器控制的多数码管静态显示。(1)实物电路制作锁存器控制的多数码管静态显示。(2)实践清单多个数码管的静态显示指多个数码管显示各自指定的数字,且当指定数字未变时,每个数码管保持所显示的数字不变的显示方法。数码管的动态显示指每位数码管轮流点亮,利用视觉暂留效应造成多位数码管同时显示的观感的显示方法。本项目介绍静态显示,下一个项目介绍动态显示。知识链接我们在项目十一学习了移位寄存器74LS595,它能将收到的串行通信数据移位至并行输出引脚输出。一、利用移位寄存器控制多个数码管的静态显示知识链接74LS595有一个级联输出端QH'或Q7',当74LS595已经接收了8位数据后,如果再接收数据和同步移位脉冲,已接收的数据将会移位至级联输出端,因此只要将级联输出端接下一个移位寄存器的串行数据输入端,当从第一个移位寄存器的串行输入端输入2个8位二进制数时,第一个8位二进制数会从第一个移位寄存器的级联输出端输入第二个移位寄存器,并可以从第二个移位寄存器的并行输出口输出,而第二个8位二进制数可以从第一个移位寄存器的并行口输出。以此类推,可以利用单片机串行口输出多个8位二进制数,并利用移位寄存器的级联将这些8位二进制数从各移位寄存器的并行口输出。图12-1为单片机利用串行通信控制3个数码管静态显示的电路图。图中第一个74LS595的级联输出端Q7'接第二个74LS595的串行输入端DS,第二个74LS595的级联输出端Q7'接第三个74LS595的串行输入端DS。知识链接3个74LS595的SH_CP端同接单片机的TXD,一起接收单片机发出的同步移位脉冲。3个74LS595的ST_CP端同接单片机的P3.2,当接收数据完毕后,由P3.2提供上升沿,使3个74LS595将数据从并行口输出,控制数码管显示指定的数字。3个74LS595的OE端同接单片机的P3.3,可通过P3.3控制3个数码管同时熄灭或同时正常工作。由于不需要使移位寄存器数据清零,因此3个74LS595的MR端都接VCC。知识链接图12-1单片机串行通信控制3个数码管静态显示知识链接【程序12-1】为单片机串行通信控制3个数码管静态显示7、8、9的程序。由于串行通信先发送的数据会被移位至最后一个移位寄存器,要依次显示7、8、9,在程序中先发送的是9的字码。同时请注意数码管输入引脚与排阻引脚的连接顺序,由于串行通信先发送低位数据,因此数码管的a线连接的是排阻的9线,如果连线顺序不对,数码管将不能正确工作。知识链接【程序12-1】MOVSBUF,#90HJNBTI,$CLRTIMOVSBUF,#80HJNBTI,$CLRTIMOVSBUF,#0F8HJNBTI,$CLRTICLRp3.2SETBP3.2CLRp3.3END;发送9的字码;发送8的字码;发送7的字码;发送上升沿使字码进入移位寄存器的数据寄存器;解除移位寄存器输出端高阻态,使字码输出给数码管,显示指定的数字知识链接锁存器是数字电路中的一种具有记忆功能的逻辑元件,锁存就是把信号暂存以维持某种电平状态,下面以74LS373为例进行讲解。图12-274LS373的引脚二、利用锁存器控制多个数码管的静态显示图12-2是74LS373的引脚,其中1D~8D为输入端,1Q~8Q为输出端,OC为三态允许控制端,C为锁存允许控制端。知识链接表12-1是74LS373的功能表,从表中可见,OC为低电平时输出引脚才能输出电平,OC为高电平时输出引脚为高阻态。若OC为低电平,当C为高电平时输出电平与输入电平一致,当C为低电平时输出端将保持原状态不变,而不受输入端状态的影响,即当C为低电平时输出状态被“锁定”。1.74LS373的引脚2.74LS373的功能知识链接表12-174LS373的功能表知识链接查询数据手册,74LS373的推荐电源电压为+5V,输入高电平最小值为2V,输入低电平最大值为0.8V,最大允许输入电流为0.4mA。输出高电平典型值为3.1V,输出低电平典型值为0.35V,高电平最大输出电流为2.6mA,低电平最大输入电流为24mA。根据74LS373的主要电气特征可知,74LS373的输入端与单片机输出的电平和电流可以匹配,74LS373的输出端在灌电流方式下可以驱动数码管。3.74LS373的主要电气特征知识链接图12-3为利用74LS373控制3个数码管的电路。在Proteus软件中OE对应前文数据手册中的OC,LE对应前文数据手册中的C。数码管字码从P2输出,P2与3个74LS373的输入端同时相连,3个74LS373的输出端通过排阻连接至3个数码管。74LS373的OE连接至地线,当需要数码管熄灭时,通过输出FFH字码给数码管实现。74LS373的LE端连接P3.2~P3.0,以便分时控制3个74LS373的锁存。4.利用74LS373控制多个数码管的电路图知识链接图12-3利用74LS373控制3个数码管的电路知识链接【程序12-2】为利用74LS373控制3个数码管分别显示9、8、7的程序。也许有的同学自行编写程序比给出的程序简短,但是请注意本任务是要让3个数码管分别显示9、8、7,严格来说除熄灭状态第一个数码管只能显示9,第二个数码管只能显示8,第三个数码管只能显示7。如果在执行程序的过程中某些时刻各数码管有显示其他数字的情况,但最后三个数码管实现了分别显示9、8、7的状态,那么实际上程序是有瑕疵的。关于在程序执行过程中一个数码管有没有错误显示其他数字,同学们可以通过将单片机工作频率修改至12Hz来放慢程序执行速度观察或者采用单步执行的方式来观察执行每一条指令后数码管的状态。5.利用74LS373控制多个数码管的程序知识链接【程序12-2】MOVP2,#0FFHMOVP3,#00000000BMOVP2,#90HMOVP3,#00000001BMOVP3,#00000000BMOVP2,#80H;输出熄灭码;锁存熄灭码;输出9的字码;解除第一个锁存器锁存状态,使第一个数码管显示9;恢复第一个锁存器锁存状态;输出8的字码知识链接【程序12-2】MOVP3,#00000010BMOVP3,#00000000BMOVP2,#0F8HMOVP3,#00000100BMOVP3,#00000000BEND;解除第二个锁存器锁存状态,使第二个数码管显示8;恢复第二个锁存器锁存状态;输出7的字码;解除第三个锁存器锁存状态,使第三个数码管显示7;恢复第三个锁存器锁存状态项目训练(1)画出用串行通信方式控制4个数码管并依次显示1、2、3、4的电路,并编写程序用Proteus软件仿真。(2)画出用一个按钮和串行通信方式控制4个数码管的电路,要求单片机上电时4个数码管都熄灭,按一次按钮第一个数码管显示1,其余熄灭;再按一次按钮,前两个数码管显示1、2其余熄灭;再按一次按钮,前三个数码管显示1、2、3其余熄灭;再按一次按钮,四个数码管依次显示1、2、3、4;再按一次按钮,四个数码管全部熄灭。编写程序并用Proteus软件仿真。项目训练(3)绘制用锁存器控制4个数码管显示1、2、3、4的电路,并编写程序,要求在编写程序时使用循环结构和调用子程序实现,用Proteus软件仿真。(4)绘制用锁存器控制4个数码管显示1、2、3、4的电路,要求编写程序使四个数码管间隔1s分别显示1、2、3、4。仿真运行参照电路如图12-3所示。一、参照电路参照程序如【程序12-2】所示。二、参照程序仿真元件列表见表12-2。三、所用元件列表表12-2仿真元件列表点击图标可观看仿真运行:锁存器控制的多数码管静态显示拓展延伸在前面学习的单片机存储的数值都是正数,那么单片机能不能存储负数,对负数做运算呢?可以的,当数值有正负时称为有符号数,单片机存储有符号数的方式是将最高位作为符号位,其余位作为数值位。我们已经知道单片机是以二进制数的形式存储数值的,那么单片机存储的数值的最高位只有两个数值0和1,规定当单片机存储有符号数时,最高位为0时表示正数,最高位为1时表示负数。例如:一、有符号数的表示方法有符号数和补码拓展延伸有符号数00001001B,由于最高位是0,后7位的数字0001001B表示十进制数9,因此这个有符号数表示的数值是十进制数+9。有符号数10010110B,由于最高位是1,后7位的数字0010110B表示十进制数22,因此这个有符号数表示的数值是十进制数-22。拓展延伸二、有符号数的计算图12-4是单片机运行乘法程序的寄存器数值观察结果,图12-4(a)是执行程序,图12-4(b)是执行程序后相关寄存器的数值,数据格式为有符号整数。图中0x表示后面的数是十六进制,0x后面的数表示寄存器的地址,R0的地址是00H,R1的地址是01H,因此0x00是R0,0x01是R1,ACC是A。从图中可以看到单片机能够对有符号数进行存储和计算。图12-4单片机运行乘法程序的寄存器数值观察结果拓展延伸将0x00的数据显示格式改为二进制数,则观察结果如图12-5所示。图中-9变为0b11110111,0b表示后面的数是二进制数,也就是说单片机中-9的二进制数是11110111B。我们知道数值在单片机中实际是以二进制形式存储和处理的,因此在单片机中-9实际是以11110111B存储和参与运算的。那么11110111B是什么?它是-9在8位单片机中的补码。图12-5观察结果拓展延伸什么是补码?我们来看图12-6所示钟表的例子。如果将钟表看作一个能储存数值的元件,以指针指到某一时刻来代表当前数值,钟表能储存的数值为0~11,即指针有12个不同的状态代表0~11共12个数。在钟表里12和0是同一个状态,指针指向同一个位置,可以理解为当数值从0增加到12时,钟表所储存的数值归零了,又从0开始了,在这里把12称为钟表的模。图12-6钟表拓展延伸如果钟表的指针指到6,代表当前数值为6,做6+5的计算,将指针顺时针拨动5个格,指针指向11,即6+5=11;做6-7的计算,将指针逆时针拨动7个格,指针也指向11,即对钟表来说6-7=11。我们看到对钟表来说6+5=6-7,而5+7=12,12是钟表的模,对其他符合这种规律的数字上述等式都成立,如9+8=9-4。在这里5=12-7,5是7的补码;8=12-4,8是4的补码;可见一个数值的补码=模-数值本身。拓展延伸所有存储容量有限的元件的存储数值都具有上述性质。51单片机是8位单片机,它的寄存器能够存储8位二进制数,它的寄存器能够存储的最大数值是00000000B(8个0),当这个数值再加1时会变为100000000B(9位数),寄存器只会存储后面的8位,也就是00000000B(8个0),这就好比钟表的11+1变成0一样。因此对51单片机的寄存器来说,它的模是100000000B(9位数)。2-19所示。上述规律可以总结为A数值-B数值=A数值+B数值的补码。回到前面-9在单片机中以11110111B存储和参与运算的问题。在单片机中规定正数的补码为数值本身,负数的补码为保持符号位不变,数值位取反后加1。-9在单片机中本应表示为10001001B,符号位为最高位(即左数第一位)1,数值位为后7位0001001B。将数值位取反为1110110B,+1为1110111B,再加上符号位为11110111B,对比前面图中R0的数值可以看到,负数在单片机中是以补码形式储存和参与运算的。拓展延伸图2-19元件放置完毕拓展延伸从上面的讲解我们知道:数值+自身的补码=模。9的二进制形式为

00001001B-9的补码为

11110111B两数相加等于

100000000B可以看出,实际上-9的补码=9的补码,负数在单片机中实际是以它的绝对值的补码的形式存储和参与运算的,而正数就是以本身存储和参与运算的。以钟表的例子进行类比,当单片机运算16-9时,实际做的是16+(9的补码)的运算:16的二进制

00010000B-9的二进制

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论