最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

两位数码管循环显示00

来源:动视网 责编:小OO 时间:2025-10-03 00:44:21
文档

两位数码管循环显示00

两位数码管循环显示00~99的实验  现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,    数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:    网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这
推荐度:
导读两位数码管循环显示00~99的实验  现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,    数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:    网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这
两位数码管循环显示00~99的实验 

   现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,

    数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。

首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:

     网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0口送出数字的显示代码,数码管就能正常显示数字。

     因为要显示两位不同的数字,所以必须用动态扫描的方法来实现,就是先个位显示1毫秒,再十位显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到两位不同的数字稳定显示。

下面我们再介绍一种共阴数码管的单片机驱动方法,电路如下图:

     网友可以看到:+5V通过1K的排阻直接给数码管的8个段位供电,P2.6和 P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,相应的位可以吸入电流。单片机的P0口输出的数据相当于将数码管不要显示的数 字段对地短路,这样数码管就会显示需要的数字。

     网友可以看到,共阴数码管的硬件更简单,所以在批量生产时,硬件开销小,节省PCB面积,减少焊接工作量,降低综合成本,所以采用共阴数码管更有利于批量生产,现在销售的试验板都是采用共阴数码管了。

以下是用ATC51实验板的两位数码管显示00~99依次循环的汇编语言程序

a_bit equ 20h ;数码管个位数存放内存位置

b_bit equ 21h ;数码管十位数存放内存位置

temp equ 22h ;计数器数值存放内存位置

star: mov temp,#0 ;初始化计数器,从0开始

stlop: acall display;调用显示子程序

inc temp;对计数器加1

mov a,temp

cjne a,#100,next ;判断计数器是否满100?

mov temp,#0;满100就清零重新开始

next: ljmp stlop;不满就循环执行

;显示子程序

display: mov a,temp ;将temp中的十六进制数转换成10进制

mov b,#10 ;10进制/10=10进制

div ab

mov b_bit,a ;十位在a

mov a_bit,b ;个位在b

mov dptr,#numtab ;指定查表启始地址

mov r0,#4

dpl1: mov r1,#250 ;

dplop: mov a,a_bit ;取个位数

MOVC A,@A+DPTR ;查个位数的7段代码

mov p0,a ;送出个位的7段代码

clr p2.7 ;开个位显示

acall d1ms ;显示162微秒

setb p2.7;关闭个位显示,防止鬼影

mov a,b_bit ;取十位数

MOVC A,@A+DPTR ;查十位数的7段代码

mov p0,a ;送出十位的7段代码

clr p2.6 ;开十位显示

acall d1ms ;显示162微秒

setb p2.6;关闭十位显示,防止鬼影

djnz r1,dplop ;循环执行250次

djnz r0,dpl1 ;循环执行250X4=1000次

ret

;2+2X80=162微秒,延时按12MHZ计算

D1MS: MOV R7,#80

DJNZ R7,$

RET

;实验板上的7段数码管0~9数字的共阴显示代码

numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

end

;如果是共阳数码管的显示代码

numtab: DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H

两位数码管显示00--99依次循环

实验设备 

JS100A,JS200,JS300等仿真器,实验板都可直接实验。使用Keil51仿真软件,单步运行调试程序,查看寄存器,内部数据存储器的具体变化,使学习者明确每条指令的用途。

实验目的及内容

8段数码管显示.两位数码管显示00--99依次循环(动态扫描方式).p1做LED显示数据输出口.p3.2;p3.3分别控制数码管个位数和十位数显示.

用单片机进行数码显示应具有显示器件;应用最广泛的是8段数码管。

8段数码管从内部接线上分共阳和共阴两种。在电路设计时应根据情况决定采用共阳或共阴,其基本原则是:若单片机IO口直接驱动数码管个段,最好采用共阳数 码管,因为51单片机IO口输出高电平时输出的电流很小,数码管不会太亮;若数码管是通过驱动芯片与单片机相连的,就要看驱动芯片对数码管极性的要求啦。 下面的实验采用共阳数码管。 

;=======================================

;constant define ;常数定义

csp equ 60h ;堆栈开始使用的位置.

;=======================================

;variable define ;变量定义

vadigit equ 30h ;数码管个位数存放内存位置

vbdigit equ 31h ;数码管十位数存放内存位置

vcnt1 equ 32h ;计数器数值存放内存位置

;=======================================

;Func: 程序开始.

;=======================================

org 0000h

ajmp main

org 0030h ;到0030h处避开00-30h的敏感地址

;=======================================

;Func: 程序初始化.

;=======================================

main: ;初始化特殊寄存器及变量

mov sp,#csp ;指定堆栈开始使用的位置.

star:

mov vcnt1,#0 ;初始化计数器,从0开始

lop1:

acall display ;调用显示子程序

inc vcnt1 ;对计数器加1

mov a,vcnt1

cjne a,#100,lop1 ;判断计数器是否满100?

mov vcnt1,#0 ;满100就清零重新开始

ljmp lop1 ;不满就循环执行

;=======================================

;Func: 8.字型LED显示子程序

;Input: vcnt1

;=======================================

display:

mov a,vcnt1 ;将temp中的十六进制数转换成10进制 

mov b,#10 ;10进制/10=10进制

div ab ;a除以b,商在a,余数在b.

mov vbdigit,a ;十位在a

mov vadigit,b ;个位在b

mov dptr,#digittab ;指定查表起始地址

mov r0,#4 

dpl1:

mov r1,#250 ;

dplop:

mov a,vadigit ;取个位数

movc a,@a+dptr ;查个位数的7段代码

mov p1,a ;送出个位的7段代码

clr p3.2 ;开个位显示

acall delayus ;显示162微秒

setb p3.2 ;关闭个位显示,防止鬼影

mov a,vbdigit ;取十位数

movc a,@a+dptr ;查十位数的7段代码

mov p1,a ;送出十位的7段代码

clr p3.3 ;开十位显示

acall delayus ;显示162微秒

setb p3.3 ;关闭十位显示,防止鬼影

djnz r1,dplop ;循环执行250次

djnz r0,dpl1 ;循环执行250X4=1000次

ret

;=======================================

;Func: 162us延时子程序

;=======================================

delayus:

mov r7,#80 ;///2+2X80=162微秒,延时按11.0592MHZ计算

djnz r7,$

ret

org 0600h

;=======================================

digittab: ;实验板上的7段数码管0~9数字的共阳显示代码

db 0c0h;0

db 0f9h;1

db 0a4h;2

db 0b0h;3

db 099h;4

db 092h;5

db 082h;6

db 0f8h;7

db 080h;8

db 090h;9

end

文档

两位数码管循环显示00

两位数码管循环显示00~99的实验  现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,    数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:    网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top