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

发布者:心灵之舞最新更新时间:2020-04-11 来源: eefocus关键字:单片机  控制数码管  动态显示 手机看文章 扫描二维码
随时随地手机看文章

本次实验任务如下:

任务描述

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

1.什么是动态显示

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


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


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


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


2.什么是静态显示

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


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


3.优缺点对比

image.png

二、如何控制多只数码管

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 静态和动态显示数码管

推荐阅读最新更新时间:2024-11-03 16:35

51单片机定时器和计数器区别
在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说,这几部分的内容很难理解。但是我个人觉得这几部分内容是单片机学习的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。 在这几部分内容中,计数器/定时器对于初学者说很容易搞混淆,下面我将对这方面的内容结合自己的学习经验谈几点看法。 计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定
[单片机]
在51单片机上用定时器实现按键长按、短按功能
我们在项目中常常需要在只有一个按键的情况下,来实现长按执行某个功能,短按执行另一个功能。 鉴于此,用51搭的核心板实测,亲测可行。好了,废话少说,简单粗暴,直接贴上程序结构。 主函数() { } 在进入while大循环中,先要配置定时器。 在while中核心是:使用两个if块判断,第一个if块判断按键是否按下,在第一个if块里面只进行按键按下标志位设置和定时器计数。 在第二个if块里根据第一个if块定时器计数来执行长短按功能,记得在退出第二个if块时,按键按下标志位(press_flag)和定时器 计数变量(count)都要清零。 …… 定时器配置和中断服务程序就不贴出来了。
[单片机]
在51<font color='red'>单片机</font>上用定时器实现按键长按、短按功能
STM32单片机最小系统设计
序言 我们大多数人在学习stm32过程中都会陷入这样一个误区————只关注软件代码层面而忽视了硬件层面,简单来说就是只会用开发板,一旦需要设计自己的stm32系统就无从下手。本文旨在完成stm32最小系统的设计。 STM32最小系统的组成 STM32最小系统简述 STM32最小系统,就是能让STM32单片机能够正常工作所必须拥有的组成部分的集合,也是STM32单片机正常运行的必要环境。STM32最小系统主要组成部分有: stm32最小系统包括: 1.供电电路; 2.时钟电路; 3.下载电路; 4.复位电路; 5.BOOT启动模式选择。 因为STM32单片机内部已经集成了时钟电路,所以STM32只需有供电和复位电路就能正常运
[单片机]
STM32<font color='red'>单片机</font>最小系统设计
基于中颖SH79F164单片机的电子血压计应用
1.概述:   电子血压计因具有无创性、操作简单、携带方面等优点,目前得到广泛的应用和推广。无创检测血压的方法很多,如柯氏音法,测振法,超声法、双袖带法、恒定袖带法、逐拍跟踪法、张力定测法和恒定容积法等。其中测振法就是我们常说的示波法,由于具有较好的抗干扰能力,能比较可靠地判断血压、实现血压的自动检测而成为无创血压的主流。目前国内外大多数电子血压计都采用示波法。   示波法的原理同柯氏音法,也需要充气袖套来阻断动脉流,但在放气过程中不是检测柯氏音,而是检测气袖内气体的振荡波(测振法由此得名),这些振荡波是袖带与动脉耦合的结果,源于心血管周期内血管壁由于收缩舒张引起的压力脉动。理论计算和实践均证明此振荡波的幅度有一定的规律,与动
[医疗电子]
基于中颖SH79F164<font color='red'>单片机</font>的电子血压计应用
PIC单片机矩阵键盘+线反转法
/*采用行扫描线反转法RAM占用空间较多,因为用到的变量比较多, 但是程序变得简洁。 pic单片机当采用线反转法时端口寄存器要设置成输出*/ #include pic.h __CONFIG(0x3F32); //芯片配置字 #define uchar unsigned char #define uint unsigned int void delay10ms(uchar x); void beep(); void init(); uchar j; uchar LED_CODE ={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0xbf}; uchar KEY_CO
[单片机]
单片机数码管的真值表
数码管的 8 个段,我们直接当成 8 个 LED 小灯来控制,那就是 a、b、c、d、e、f、g、dp 一共 8 个 LED 小灯。我们通过图 5-3 可以看出,如果点亮 b 和 c 这两个 LED 小灯,也就是数码管的 b 段和 c 段,其他的所有的段都熄灭的话,就可以让数码管显示出一个数字 1,那么这个时候实际上 P0 的值就是 0b11111001,十六进制就是 0xF9。那么我们写一个程序进去,来看一看数码管显示的效果。 #include reg52.h sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLE
[单片机]
利用低功耗微控制器开发FFT应用
  今天的低功耗微控制器(μC)也开始集成原先只存在于大型微处理器、ASIC和DSP中的外设功能,使我们有可能以很低的功耗实现复杂的算术运算。本文讨论一种快速傅立叶变换(FFT)应用,并在一个含有单周期硬件乘法器的低功耗μC上实现该应用。 这个FFT应用实时计算一路输入电压(图1中的VIN)的频谱。为完成该任务,用一片模数转换器(ADC)对VIN进行采样,获得的采样传送给μC。然后,μC对这些采样执行256点FFT运算,获得输入电压的频谱。为便于检测,μC将计算出的频谱数据传送给PC,由PC实时显示出来。 图1. 利用FFT应用计算输入电压的频谱。 该FFT应用的固件针对MAXQ2000系列中的一款16位、低
[应用]
闪速存储器AT29C040与单片机的接口设计
1 引言 自1984年第一块闪速存储器问世以来,闪速存储器就以其EPROM的可编程能力和EEPROM的电可擦除性能,以及在线电可改写特性而得到了广泛的应用和发展。随着制造工艺和材料的改进,闪速存储器比EPROM和EEPROM、SRAM及DRAM等存储器的优势越来越明显。 Atmel公司于1998年推出了新一代大容量快闪存储器AT29C040,由于它采用了Fowler-Nordheim隧道效应技术,使编程电流比第一代闪存降低了一个数量级。该芯片只需要+5V电源并支持分页编程,此外,还具有硬件数据保护、软件数据保护、数据查询和自举模块等其他功能。根据笔者的使用情况,本文对AT29C040闪速存储器的结构特点、使用方法等作了简
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved