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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mylovewanzi/article/details/83177816

控制数码管的动态显示



本次实验任务如下:
任务描述

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

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-

猜你喜欢

转载自blog.csdn.net/mylovewanzi/article/details/83177816