×
单片机 > 单片机程序设计 > 详情

单片机实验----控制数码管的动态显示

发布时间:2021-12-15 发布时间:
|

本次实验任务如下:

一、动态显示与静态显示的比较

1.什么是动态显示

驱动电路可以使数码管正常显示数据,数码管的驱动方式有两种:动态显示驱动和静态显示驱动。


动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起。


另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。


当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制。


2.什么是静态显示

静态显示驱动静态驱动也称直流驱动。


静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。


3.优缺点对比

二、如何控制多只数码管

1.电路图

利用触发器作为中间环节来控制数码管。

U2为段位触发器,控制数码管的显示。

U3为位选触发器,控制数码管的选择。

P0口作为数据的输出口。

2.代码

ORG 0000H

LJMP MAIN

ORG 30H

;..................................................

; 数码管DS0显示‘0’

;..................................................

MAIN: MOV P0,#0C0H ;段选数据0

CLR P1.0 ;选中U2为段选芯片,将U2的Ē写为低电平

CLR P1.2 ;时序引脚CKL为低电平,为接受数据做准备

SETB P1.2 ;时序为上升沿,即将数据传送给U2

SETB P1.0 ;关闭U2,使得U2不在接受数据

////////////////////

MOV P0,#0FEH ;位选数据由P0口给出,选择DS0数码显示

CLR P1.1 ;选中U3位选芯片,将U3的Ē写为低电平

CLR P1.2 ;时序引脚CKL为低电平,为接收数据做准备

SETB P1.2 ;时序为上升沿,即将数据传送给U3

SETB P1.1 ;关闭U3,使得U3不在接收数据

///////////////////

LCALL DELAY ;延时一段时间

MOV P0,#0FFH ;关闭数码管,为下一个数码管显示做准备

CLR P1.0 ;选中U3位选芯片,将U3的Ē写为低电平

CLR P1.2 ;时序引脚CKL为低电平,为接收数据做准备

SETB P1.2 ;时序为上升沿,即将数据传送给U3

SETB P1.1 ;关闭U3,使得U3不在接收数据

///////////////////

;..................................................

; 数码管DS1显示‘1’

;..................................................

MOV P0,#0F9H

CLR P1.0

CLR P1.2

SETB P1.2

SETB P1.0

////////////////////

MOV P0,#0FDH

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

///////////////////

LCALL DELAY

MOV P0,#0FFH

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

///////////////////

;..................................................

; 数码管DS1显示‘2’

;..................................................

MOV P0,#0A4H

CLR P1.0

CLR P1.2

SETB P1.2

SETB P1.0

////////////////////

MOV P0,#0FBH

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

///////////////////

LCALL DELAY

MOV P0,#0FFH

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

///////////////////

;..................................................

; 数码管DS1显示‘3’

;..................................................

MOV P0,#0B0H

CLR P1.0

CLR P1.2

SETB P1.2

SETB P1.0

////////////////////

MOV P0,#0F7H

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

///////////////////

LCALL DELAY

MOV P0,#0FFH

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

///////////////////

;..................................................

; 延时程序

;..................................................

DELAY: MOV R7,#200 ;延时子程序

DJNZ R7,$

RET ;返回主程序

END


3.程序分析

程序分为两个部分:主程序、子程序。

主程序中又分四部分,分别是控制四个数码管的显示。

子程序的作用是延时。

三、控制多只数码管的方法

由上面的实验,我们得知,多只数码管的显示是通过段选和位选一起控制的。

段选程序控制数码管的显示。

位选程序控制数码管的选择。

段选和位选程序如下:

;*****段选程序*********

CLR P1.0

CLR P1.2

MOV P0,#0B0H

SETB P1.2

SETB P1.0

;*****位选程序*********

CLR P1.1

CLR P1.2

MOV P0,#0F7H

SETB P1.2

SETB P1.1


在来一个前面程序的精简版----使用查表发实现

;**************数码管动态显示‘0,1,2,3’*********************

ORG 0000H

LJMP MAIN

ORG 30H

;............................................................

; 初始化定义

;............................................................

MAIN: MOV R0,#0;段选数据指针

MOV R1,#0FEH ;段选数据初始化

MOV DPTR,#TAB ;“0~9”数据表

;............................................................

; 主程序

;............................................................

;****改变段码和位码****

LOOP: MOV A,R0 ;数据指针RO给累加器A

MOVC A,@ A+DPTR ;将数据表中指针所对应的数据传送给A

MOV P0,A ;数据传给数码管各段

CLR P1.0

CLR P1.2

SETB P1.2

SETB P1.0

////////////////////////

MOV P0,R1 ;将位选数据传送给P0口,点亮所需数码管

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

////////////////////////

LCALL DELAY ;延时一段时间

MOV P0,#0FFH ;关闭数码管,为下一个数码管显示做消

CLR P1.1

CLR P1.2

SETB P1.2

SETB P1.1

;****改变段码和位码****

INC R0 ;数据指针加1,指向下一个数据地址

MOV A,R1 ;位选数码管左移,准备得下一个数码管点亮

RL A

MOV R1,A

CJNE R1,#0EFH,LOOP ;判断DS3数码管是否点亮结束

LJMP MAIN ;循环本程序

;............................................................

; 延时程序

;............................................................

DELAY: MOV R7,#200 ;延时子程序

DJNZ R7,$

RET ;返回主程序指令

;............................................................

; 数码管数据表

;............................................................

TAB: DB 000H,0F9H,0A4H,0B0H,099H ;0-9数据表

DB 092H,082H,0F8H,080H,090H

END


时间:2018年10月19日13:28:43


-END-


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法