历史上的今天
返回首页

历史上的今天

今天是: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.优缺点对比

image.png?imageView2/2/w/550

二、如何控制多只数码管

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-

推荐阅读

史海拾趣

鑫雁公司的发展小趣事

在短短几年内,聚洵半导体实现了业绩的快速增长。据公司董事长兼总经理张智才介绍,在2020年这一特殊年份,聚洵依然实现了业绩增长500%的佳绩,累计出货量超过2亿颗,成交客户数量达500多家。这一成绩不仅彰显了聚洵在产品研发和市场销售方面的实力,也赢得了业界的广泛认可。公司的典型终端客户包括美的、格兰仕、小米等知名品牌,进一步证明了聚洵产品在市场上的竞争力和影响力。

Degson Electronics Co Ltd公司的发展小趣事

Degson Electronics Co., Ltd.成立于1990年,当时主要专注于电子连接器的研发和生产。在初创阶段,公司面临了诸多挑战,包括资金短缺、市场竞争激烈以及技术壁垒等。然而,Degson凭借其创始团队对电子行业的深入理解和坚定信念,成功研发出了一系列高质量、性能稳定的电子连接器产品,并逐渐在市场上赢得了客户的认可。

B+B SmartWorx公司的发展小趣事

B+B SmartWorx的前身是B&B Electronics,一个在1981年成立的公司,起初主要为无线和有线网络提供设备连接解决方案。随着技术的快速发展,物联网和M2M连接的需求日益增长,B&B Electronics意识到必须进行创新以应对市场的变化。于是,公司开始致力于开发“边缘智能”技术,使网络连接设备更加智能、自主和响应迅速。这一创新转型使得公司在物联网行业中崭露头角,并在2015年决定将公司名称更改为B+B SmartWorx,以更好地反映其业务重心和技术方向。

Fuji Teminal Industry Co Ltd公司的发展小趣事

B+B SmartWorx一直致力于产品创新,不断推出符合市场需求的新产品。其中,光纤转换器、3G/4G无线路由器以及Wzzard系列无线感测装置等产品受到了市场的广泛认可。这些产品不仅填补了研华在某些领域的空白,也展示了B+B SmartWorx在物联网和工业网通领域的强大实力。此外,公司还积极开发风扇配件、AC插座等电力元件产品线,进一步丰富了其产品体系。

AXTAL公司的发展小趣事

近年来,电子行业面临着诸多市场挑战与机遇。在这场全球供应链的博弈中,AXTAL公司展现出了敏锐的市场洞察力和应变能力。面对中国发布的镓锗禁令,AXTAL巧妙地抓住了第一个漏洞,通过在中国设立的子公司申请出口镓锗的许可证,成功绕过了禁令的限制。这一睿智之举不仅为公司打开了新的市场窗口,也彰显了公司在应对市场挑战时的灵活性和创造力。

BOOKHAM公司的发展小趣事

面对国内市场的饱和,BOOKHAM公司决定实施国际化战略,拓展海外市场。公司先后在多个国家和地区设立了分支机构,积极参加国际电子展会和交流活动,与国际同行建立起了广泛的合作关系。通过不断的努力,BOOKHAM公司的产品逐渐打入国际市场,公司的知名度和影响力也得到了显著提升。

问答坊 | AI 解惑

讲述中国工程师自己的创业故事 转

从全球来看,无数技术专才选择在美国硅谷开创新的事业,众多风险投资机构则成为支撑他们发展的重要力量。多种因素作用之下,美国硅谷仍然是全球科技产业的“圣地”,散发着技术创新和成就梦想的夺目光环。 而在中国大陆来看,上海、北京和深圳等地 ...…

查看全部问答>

第二届ARM中国微控制器技术研讨会详细资料无私奉献

为方便坛友下载,打包成一个附件,内容丰富,要求置顶或加精! 包括内容: pdf1、第二届ARM MCU研讨会 谭军 : 会议开幕,ARM使用领域 pdf2、TSB ARM MCU PR 090612 CN: TOSHIBA ARM内核微控制器 - TX03 和 TX09 介绍 pdf3、ST_ARM_MCU_Sem ...…

查看全部问答>

图片按钮背景点击后消失

   自己重载的CButton,类,捕获OnLButtonUp和OnLButtonDown消息,实现点击时切换背景图片,发现点击之后,绘制完背景之后,按钮背景又回复为默认的无背景的(默认的颜色和问题)。在事件处理时,的确已经将背景画成图片,感觉好像系统的 ...…

查看全部问答>

wince下驱动程序开发

我们用SAMSUNG公司ARM芯片S3C2440设计的板子,硬件原理图参照了朗成公司的同款芯片开发板,加了个FPGA,FPGA以类似SRAM的方式挂在ARM的总线上,ARM可以寻址到FPGA,要求我写个驱动能够快速寻址FPGA,现在没有头绪,请问应该学习哪些知识完成开发?…

查看全部问答>

wince5.0关于生成NK.nbo的问题

在WINCE5.0下无法生成NK.nbo,后来在网上看到相关文章,才知道需要修改config.bib这个文件,需要添加如下参数: ROMSTART ROMWIDTH ROMSIZE ROMSIZE比较好理解,根据操作系统大小直接设定,可ROMSTART 和 ROMWIDTH 代表什么含义呢?如何给它们 ...…

查看全部问答>

VHDL问题

在PROCESS中,这个PROCESS是 TYPE state IS (s0,s1,s2); SIGNAL current_state,next_state,pro:state; process(current_state) 在case语句中为pro赋值(值为state0或1或2),可是到了下一个上升沿,这个值就不存在了,无法持续,这是为什么? ...…

查看全部问答>

wince串口通信时的程序问题。

我用C#编制程序,参考别人的经验,使用CREATEFILE函数,有下面三个参数: private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const int OPEN_EXISTING = 3; GENERIC_READ参数是只读, ...…

查看全部问答>

【征文】从疯狂下载到自己动手

                                              【征文】从疯狂下载到自己动手     我学单片机完全是出于 ...…

查看全部问答>

51单片机数码管不用锁存器显示时程序怎么写

我的程序:#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 ( ...…

查看全部问答>