单片机动态扫描接口及程序设计
什么叫动态扫描显示
在单片机单片机
单片机是单片微型计算机(Single-Chip Microcomputer)的简称,是一种将中心处理器微处理器随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)采纳超大规模集成电路技术集成到一块硅片上构成的微型计算机系统。 [全文]
系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线操纵。微处理器向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O操纵的,所以我们就能自行决定何时显示哪一位了。而所谓动态扫描就是指我们采纳分时的办法,轮流操纵各个显示器的COM端,使各个显示器轮流点亮。 在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管二极管
二极管又叫半导体二极管、晶体二极管,是最常用的基本电子元件之一。二极管只往一个方向传送电流,由p型半导体和n型半导体形成的p-n结构成,在其界面处两侧形成空间电荷层,并建有自建电场。当不存在外加电压时,由于p-n 结两边载流子浓度差引起的扩散电流和自建电场引起的漂移电流相等而处于电平衡状态。 [全文]
的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。 由89c51的P0口能灌入较大的电流,所以我们采纳共阳的数码管数码管
数码管是一种以发光二极管为基本单元的半导体发光器件。在我们日常生活中,比如电子秤、电子数码钟等的显示都是利用数码管实现,数码管现今已得到广泛的应用。 [全文]
,并且不用限流电阻
电阻,物质对电流的阻碍作用就叫该物质的电阻。电阻小的物质称为电导体,简称导体。电阻大的物质称为电绝缘体,简称绝缘体。 [全文]
,而只是用两只1N4004进行降压后给数码管供电,这里仅用了两只,实际上还能扩充。它们的公共端则由PNP型三极管
三极管是一种半导体电子器件,有3个引脚,晶体三极管分别为集电极(c),基极(b),发射极(e),电子三极管分别为屏极、栅极、阴极。能够把微弱信号放大成辐值较大的电信号,也称双极型晶体管,晶体三极管。 [全文]
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 ;初始化,所显示器,LEDLED
LED(Light Emitting Diode)即发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。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
从上面的单片机例程中能看出,动态扫描显示必须由微处理器持续地调用显示程序,才能保证持续持续的显示。
上面的这个程序能实现数字的显示,但不太有用,为什么呢?这里仅是显示两个数字,并没有做其他的工作,因此,两个数码管轮流显示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
从上面的单片机程序能看出,动态显示和静态显示相比,程序稍有点复杂,不过,这是值得的。这个程序有一定的通用性,只要改变端口的值及计数器的值就能显示更多位数了。
来源:小小草
该文章来至网络或用户,仅供学习交流之用,版权归原作者所有。
如有侵权,请及时与我们联系!