历史上的今天
今天是:2025年04月11日(星期五)
2020年04月11日 | 单片机实验----控制数码管的动态显示
2020-04-11 来源:eefocus
本次实验任务如下:

一、动态显示与静态显示的比较
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单片机一位数码管汇编程序
下一篇:51 静态和动态显示数码管
史海拾趣
|
从全球来看,无数技术专才选择在美国硅谷开创新的事业,众多风险投资机构则成为支撑他们发展的重要力量。多种因素作用之下,美国硅谷仍然是全球科技产业的“圣地”,散发着技术创新和成就梦想的夺目光环。 而在中国大陆来看,上海、北京和深圳等地 ...… 查看全部问答> |
|
为方便坛友下载,打包成一个附件,内容丰富,要求置顶或加精! 包括内容: pdf1、第二届ARM MCU研讨会 谭军 : 会议开幕,ARM使用领域 pdf2、TSB ARM MCU PR 090612 CN: TOSHIBA ARM内核微控制器 - TX03 和 TX09 介绍 pdf3、ST_ARM_MCU_Sem ...… 查看全部问答> |
|
自己重载的CButton,类,捕获OnLButtonUp和OnLButtonDown消息,实现点击时切换背景图片,发现点击之后,绘制完背景之后,按钮背景又回复为默认的无背景的(默认的颜色和问题)。在事件处理时,的确已经将背景画成图片,感觉好像系统的 ...… 查看全部问答> |
|
我们用SAMSUNG公司ARM芯片S3C2440设计的板子,硬件原理图参照了朗成公司的同款芯片开发板,加了个FPGA,FPGA以类似SRAM的方式挂在ARM的总线上,ARM可以寻址到FPGA,要求我写个驱动能够快速寻址FPGA,现在没有头绪,请问应该学习哪些知识完成开发?… 查看全部问答> |
|
在WINCE5.0下无法生成NK.nbo,后来在网上看到相关文章,才知道需要修改config.bib这个文件,需要添加如下参数: ROMSTART ROMWIDTH ROMSIZE ROMSIZE比较好理解,根据操作系统大小直接设定,可ROMSTART 和 ROMWIDTH 代表什么含义呢?如何给它们 ...… 查看全部问答> |
|
我用C#编制程序,参考别人的经验,使用CREATEFILE函数,有下面三个参数: private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const int OPEN_EXISTING = 3; GENERIC_READ参数是只读, ...… 查看全部问答> |
|
我的程序:#include <reg52.h>unsigned int ms;unsigned char shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//sbit wei1=P2^4;sbit wei2=P2^5;sbit wei3=P2^6;sbit wei4=P2^7;void delay ( ...… 查看全部问答> |




