平凡单片机教学 第二十三讲 动态扫描显示接口

发布者:虚拟现实迷最新更新时间:2016-03-25 来源: eefocus关键字:单片机教学  动态扫描  显示接口 手机看文章 扫描二维码
随时随地手机看文章
动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

 

下图所示就是我们的实验板上的动态扫描接口。由89C51的P0口能灌入较大的电流,所以我们采用共阳的数码管,并且不用限流电阻,而只是用两只1N4004进行降压后给数码管供电,这里仅用了两只,实际上还可以扩充。它们的公共端则由PNP型三极管8550控制,显然,如果8550导通,则相应的数码管就可以亮,而如果8550截止,则对应的数码管就不可能亮,8550是由P2.7,P2.6控制的。这样我们就可以通过控制P27、P26达到控制某个数码管亮或灭的目的。

 

下面的这个程序,就是用实验板上的数码管显示0和1。

 

FIRST EQU P2.7 ;第一位数码管的位控制

SECOND EQU P2.6 ;第二位数码管的位控制

 

DISPBUFF EQU 5AH ;显示缓冲区为5AH和5BH

 

ORG 0000H

 

AJMP START

 

ORG 30H

 

START:

 

MOV SP,#5FH ;设置堆栈

 

MOV P1,#0FFH

 

MOV P0,#0FFH

 

MOV P2,#0FFH ;初始化,所显示器,LED灭

 

MOV DISPBUFF,#0 ;第一位显示0

 

MOV DISPBUFF+1,#1 ;第二握显示1

 

LOOP:

 

LCALL DISP ;调用显示程序

 

AJMP LOOP

 

;主程序到此结束

 

DISP:

 

PUSH ACC ;ACC入栈

 

PUSH PSW ;PSW入栈

 

MOV A,DISPBUFF ;取第一个待显示数

 

MOV DPTR,#DISPTAB ;字形表首地址

 

MOVC A,@A+DPTR ;取字形码

 

MOV P0,A ;将字形码送P0位(段口)

 

CLR FIRST ;开第一位显示器位口

 

LCALL DELAY ;延时1毫秒

 

SETB FIRST ;关闭第一位显示器(开始准备第二位的数据)

 

MOV A,DISPBUFF+1 ;取显示缓冲区的第二位

 

MOV DPTR,#DISPTAB

 

MOVC A,@A+DPTR

 

MOV P0,A ;将第二个字形码送P0口

 

CLR SECOND ;开第二位显示器

 

LCALL DELAY ;延时

 

SETB SECOND ;关第二位显示

 

POP PSW

 

POP ACC

 

RET

 

DELAY: ;延时1毫秒

 

PUSH PSW

 

SETB RS0

 

MOV R7,#50

 

D1: MOV R6,#10

 

D2: DJNZ R6,$

 

DJNZ R7,D1

 

POP PSW

 

RET

 

DISPTAB:DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H

 

END

 

从上面的例子中可以看出,动态扫描显示必须由CPU不断地调用显示程序,才能保证持续不断的显示。

上面的这个程序可以实现数字的显示,但不太实用,为什么呢?这里仅是显示两个数字,并没有做其他的工作,因此,两个数码管轮流显示1毫秒,没有问题,实际的工作中,当然不可能只显示两个数字,还是要做其他的事情的,这样在二次调用显示程序之间的时间间隔就不一不定了,如果时间间隔比较长,就会使显示不连续。而实际工作中是很难保证所有工作都能在很短时间内完成的。况且这个显示程序也有点“浪费”,每个数码管显示都要占用1个毫秒的时间,这在很多合是不允许的,怎么办呢?我们可以借助于定时器,定时时间一到,产生中断,点亮一个数码管,然后马上返回,这个数码管就会一直亮到下一次定时时间到,而不用调用延时程序了,这段时间可以留给主程序干其他的事。到下一次定时时间到则显示下一个数码管,这样就很少浪费了。

 

Counter EQU 59H ;计数器,显示程序通过它得知现正显示哪个数码管

FIRST EQU P2.7 ;第一位数码管的位控制

 

SECOND EQU P2.6 ;第二位数码管的位控制

 

DISPBUFF EQU 5AH ;显示缓冲区为5AH和5BH

 

ORG 0000H

 

AJMP START

 

ORG 000BH ;定时器T0的入口

 

AJMP DISP ;显示程序

 

ORG 30H

 

START:

 

MOV SP,#5FH ;设置堆栈

 

MOV P1,#0FFH

 

MOV P0,#0FFH

 

MOV P2,#0FFH ;初始化,所显示器,LED灭

 

MOV TMOD,#00000001B ;定时器T0工作于模式1(16位定时/计数模式)

 

MOV TH0,#HIGH(65536-2000)

 

MOV TL0,#LOW(65536-2000)

 

SETB TR0

 

SETB EA

 

SETB ET0

 

MOV Counter,#0 ;计数器初始化

 

MOV DISPBUFF,#0 ;第一位始终显示0

 

MOV A,#0

 

LOOP:

 

MOV DISPBUFF+1,A ;第二位轮流显示0-9

 

INC A

 

LCALL DELAY

 

CJNE A,#10,LOOP

 

MOV A,#0

 

AJMP LOOP ;在此中间可以按排任意程序,这里仅作示范。

 

;主程序到此结束

 

DISP: ;定时器T0的中断响应程序

 

PUSH ACC ;ACC入栈

 

PUSH PSW ;PSW入栈

 

MOV TH0,#HIGH(65536-2000) ;定时时间为2000个周期,约2170微秒(11.0592M)

 

MOV TL0,#LOW(65536-2000)

 

SETB FIRST

 

SETB SECOND ;关显示

 

MOV A,#DISPBUFF ;显示缓冲区首地址

 

ADD A,Counter

 

MOV R0,A

 

MOV A,@R0 ;根据计数器的值取相应的显示缓冲区的值

 

MOV DPTR,#DISPTAB ;字形表首地址

 

MOVC A,@A+DPTR ;取字形码

 

MOV P0,A ;将字形码送P0位(段口)

 

MOV A,Counter ;取计数器的值

 

JZ DISPFIRST ;如果是0则显示第一位

 

CLR SECOND ;否则显示第二位

 

AJMP DISPNEXT

 

DISPFIRST:

 

CLR FIRST ;显示第一位

 

DISPNEXT:

 

INC Counter ;计数器加1

 

MOV A,Counter

 

DEC A ;如果计数器计到2,则让它回0

 

DEC A

 

JZ RSTCOUNT

 

AJMP DISPEXIT

 

RSTCOUNT:

 

MOV Counter,#0 ;计数器的值只能是0或1

 

DISPEXIT:

 

POP PSW

 

POP ACC

 

RETI

 

DELAY: ;延时130毫秒

 

PUSH PSW

 

SETB RS0

 

MOV R7,#255

 

D1: MOV R6,#255

 

D2: NOP

 

NOP

 

NOP

 

NOP

 

DJNZ R6,D2

 

DJNZ R7,D1

 

POP PSW

 

RET

 

DISPTAB:DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H

 

END

 

从上面的程序可以看出,和静态显示相比,动态扫描的程序稍有点复杂,不过,这是值得的。这个程序有一定的通用性,只要改变端口的值及计数器的值就可以显示更多位数了。下面给出显示程序的流程图。

 

 

 

关键字:单片机教学  动态扫描  显示接口 引用地址:平凡单片机教学 第二十三讲 动态扫描显示接口

上一篇:平凡单片机教学 第二十二讲 常用接口电路及其编程
下一篇:平凡单片机教学 第二十四讲 键盘接口与编程

推荐阅读最新更新时间:2024-03-16 14:48

PIC16F877单片机的液晶显示模块接口技术
  引言   由于液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄等其他显示器无法比拟的优点,它广泛用于各种智能型仪器和低功耗电子产品中。点阵式(或图形式) LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能,用途十分广泛。本文在简介液晶显示器MG-12232的驱动器SED1520F0A的结构、功能的基础上,介绍了PIC16F877单片机的LCD硬件接口电路和软件编程特点。   一、PIC16F877与MG-12232的硬件接口电路   1.SED1520F0A的接口信号   SED1520F0A属行列驱动及控制合一的小规模液晶显示驱动芯片,电路简单
[单片机]
PIC16F877<font color='red'>单片机</font>的液晶<font color='red'>显示</font>模块<font color='red'>接口</font>技术
平凡单片机教学 实战二 单片机音乐程序的设计与实验
利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。 1.单片机的基本发音实验 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的 高 电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制 高 低 电平的持续时间,就能改变输出频率,从而改变音调。 例如,要产生200HZ的音频信号,按图1接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为: 其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,
[单片机]
平凡<font color='red'>单片机</font><font color='red'>教学</font> 实战二 <font color='red'>单片机</font>音乐程序的设计与实验
LED显示屏高速数据通讯接口设计
1 引言 LED显示屏具有亮度高,故障低、能耗少、使用寿命长、显示内容多样、显示方式丰富等优点,可广泛用于公路、金融、证券、车站、码头、体育场馆等公共场合,其显示数据通常来自上位PC机,这就要求有一个高速通道来传输大量的显示数据,USB2.0接口无疑是一个很好的解决方案。 USB由总线提供电源,传输时具有CRC检错、纠错能力,能实现真正的实时热插拔,并支持多个外设连接到同一个连接器上,从而缓解PC系统资源冲突,这些突出的优点使得USB1.x在PC机外部设备上得到了广泛的应用, USB2.0传输速度高达480Mb/s,是USB1.x的40倍,并向下兼容USB1.x。这样就使得快速大量的数据传输得以实现。 在此强调一下两个
[嵌入式]
大脑扫描器可阅读人类梦境 看到动态梦境内容
  大脑扫描器   通常多数人仅能回忆起睡梦中的片断内容,但目前科学家最新研制的新型装置或将完全复制人们的梦境。   科学家预测我们不久便能使用计算机“看到”自己的梦境内容,甚至人们还能将昨天的梦境复制出来进行观看。德国慕尼黑市马克斯-普朗克协会物理学家表示,他们已证实新型大脑扫描器能够看到神智清晰造梦者的梦境。这意味着近期使用大脑监控器可阅读清醒状态人们思维的新途径又获得新的突破,该技术也可应用于解析呈现人们的梦境。   马克斯-普朗克协会科学家证实扫描神智清晰造梦者大脑的梦境就像扫描其清醒状态大脑思维一样,可用于展示建立动态人类大脑梦境图像的“复原技术”。   神智清晰的造梦者遵循指示面向研究人员展示移动
[医疗电子]
平凡单片机教学 实战一 流水灯
学习了一段时间,有了一定经验的朋友,肯定会觉得不过瘾,老是纸上谈兵,点个LED有什么用?能不能来点实际点的。好的,我们就安排一点实际一点的,这次是点亮真的电灯了,不过要注意安全,莫要发生触电事故,另外这次要用到双向可控硅了,强电没接触过的朋友,先预习吧,正好我要花点时间准备一下了。   上传啦,是一块线路板图,单面板,红线代表跳线。没有原理图,简单地说一下吧。A17是一个8芯的插针,可以用它与单片机的P1口相连,记得我上传的板子吗?在P1口接LED前也有一个8芯插座的位置,装上去,用一根8芯扁平电缆相连就行了,记住,两块板子要用一只电源,也就是要共地。板上用的器件,如果用外接5V电源,那么D1、D2、D3、D4及C1、C2、C3、C
[单片机]
平凡<font color='red'>单片机</font><font color='red'>教学</font> 实战一 流水灯
ARM7TDMI微处理器和液晶显示模块的接口及应用
许多应用领域都采用无线方式进行数据传输,在无线抄表、工业数据采集、天线遥控、计算机遥测遥控,医疗卫生自动化、家庭自动化、安防、汽车仪表数据读取等各方面无线射频数传模块都有广泛的应用。 1 射频数传模块开发平台的构建 建立软硬件开发平台是模块开发的首要任务,比较了几种射频数传模块方案,最后决定采用由LPC900系列FLASH单片机和CC1000射频传输芯片为主芯片的开发方案。 1.1 主芯片简介 LPC2900 FLASH单片机是Philips公司推出的一款高性能、微功耗(完全掉电模式功耗低于1μA)、高速率(6倍于普通51单片机)、小封装的5l内核单片机,主要集成了字节方式的I2C总线、SPI总线、增强
[单片机]
ARM7TDMI微处理器和液晶<font color='red'>显示</font>模块的<font color='red'>接口</font>及应用
C8051F00x与HCMS 2964显示屏的串行接口
引言   HCMS2964是AGILENT TECHNOLOGIES公司生产的新一代点阵显示屏。该产品内部自带CMOS集成电路,可驱动LED,并可直接与处理器串行连接实现数据传输。由于其亮度调节方便快捷,故可广泛地应用在嵌入式系统和单片机控制的仪表、仪器和飞行模拟设备领域中,本文介绍了HCMS2964的显示原理和显示屏的驱动方式、亮度调节以及基层软件的设计方案。 1 HCMS 2964显示屏   HCMS2964模块为双列直插封装,每一个HCMS2964都有12个引脚以及内部晶阵和寄存器。HCMS2964它通过CMOS刷新电路来驱动四个发光的字符块,每个字符的尺寸是1.8 cm×1 cm,这些字符是由5column×8row共
[单片机]
C8051F00x与HCMS 2964<font color='red'>显示</font>屏的串行<font color='red'>接口</font>
PLC实现LED数码管动态扫描数据显示
PLC的数据显示功能一直是困扰PLC使用的难题。在PLC的应用中,经常要监测一些重要数据,但PLC的数据显示通常是使用外部显示设备,如显示屏或触摸屏,而这些显示设备的价格一般比较昂贵,对一些小型系统来说更浪费。因此,如何显示PLC的数据,并尽可能做到高效率、高稳定性、抗干扰能力强、硬件投资少,是许多设计中需要考虑的问题。笔者使用的西门子S7-200 PLC中有专门的指令控制LED数码管显示,SEG IN,OUT指令就是将IN端输入字节的低4位确定的16进制数自动转换为相对应的7段LED数码管各段的代码,并送到输出字节OUT端显示。若采用静态LED数码显示,PLC显示一位十进制数据需要7个输出点予以控制,如果要显示n位数据,则需要
[电源管理]
PLC实现LED数码管<font color='red'>动态</font><font color='red'>扫描</font>数据<font color='red'>显示</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved