LED八段数码管显示.docx

上传人:b****2 文档编号:1423523 上传时间:2023-05-01 格式:DOCX 页数:15 大小:183.24KB
下载 相关 举报
LED八段数码管显示.docx_第1页
第1页 / 共15页
LED八段数码管显示.docx_第2页
第2页 / 共15页
LED八段数码管显示.docx_第3页
第3页 / 共15页
LED八段数码管显示.docx_第4页
第4页 / 共15页
LED八段数码管显示.docx_第5页
第5页 / 共15页
LED八段数码管显示.docx_第6页
第6页 / 共15页
LED八段数码管显示.docx_第7页
第7页 / 共15页
LED八段数码管显示.docx_第8页
第8页 / 共15页
LED八段数码管显示.docx_第9页
第9页 / 共15页
LED八段数码管显示.docx_第10页
第10页 / 共15页
LED八段数码管显示.docx_第11页
第11页 / 共15页
LED八段数码管显示.docx_第12页
第12页 / 共15页
LED八段数码管显示.docx_第13页
第13页 / 共15页
LED八段数码管显示.docx_第14页
第14页 / 共15页
LED八段数码管显示.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

LED八段数码管显示.docx

《LED八段数码管显示.docx》由会员分享,可在线阅读,更多相关《LED八段数码管显示.docx(15页珍藏版)》请在冰点文库上搜索。

LED八段数码管显示.docx

LED八段数码管显示

八段数码管显示

1.实验目的:

(1)了解数码管动态显示的原理。

(2)了解74LS164扩展端口的方法。

2.实验内容:

利用实验仪提供的显示电路,动态显示一行数据。

7.参考程序(SY10.ASM):

OUTBITequ0e101h;位控制口

CLK164equ0e102h;段控制口(接164时钟位)

DAT164equ0e102h;段控制口(接164数据位)

INequ0e103h;键盘读入口

LEDBufequ60h;显示缓冲

Numequ70h;显示的数据

DelayTequ75h

org0000h

ljmpStart

LEDMAP:

;八段管显示码

db3fh,06h,5bh,4fh,66h,6dh,7dh,07h

db7fh,6fh,77h,7ch,39h,5eh,79h,71h

Delay:

;延时子程序

movr7,#0

DelayLoop:

djnzr7,DelayLoop

djnzr6,DelayLoop

ret

DisplayLED:

movr0,#LEDBuf

movr1,#6;共6个八段管

movr2,#00100000b;从左边开始显示

Loop:

movdptr,#OUTBIT

mova,#00h

movx@dptr,a;关所有八段管

mova,@r0

movB,#8;送164

DLP:

rlca

movr3,a

movacc.0,c

ANLA,#0FDH

movdptr,#DAT164

movx@dptr,a

movdptr,#CLK164

orla,#02h

movx@dptr,a

anla,#0fDh

movx@dptr,a

mova,r3

djnzB,DLP

movdptr,#OUTBIT

mova,r2

movx@dptr,a;显示一位八段管

movr6,#1

callDelay

mova,r2;显示下一位

rra

movr2,a

incr0

djnzr1,Loop

movdptr,#OUTBIT

mova,#0

movx@dptr,a;关所有八段管

ret

Start:

movdptr,#0e100h

mova,#03h

movx@dptr,a

movsp,#40h

movNum,#0

MLoop:

incNum

mova,Num

movb,a

movr0,#LEDBuf

FillBuf:

mova,b

anla,#0fh

movdptr,#LEDMap

movca,@a+dptr;数字转换成显示码

mov@r0,a;显示在码填入显示缓冲

incr0

incb

cjner0,#LEDBuf+6,FillBuf

movDelayT,#30

DispAgain:

callDisplayLED;显示

djnzDelayT,DispAgain

ljmpMLoop

END

 

八位数码管显示:

8155控制

参考程序2:

对8155初始化,使I/O口控制LED的显示情况。

ORG0000H

MOVDPTR,#4400H;指向8155命令寄存器

MOVA,#03H

MOVX@DPTR,A;写入控制字。

A口、B口为输出,C口为输入

INCDPTR;指向8155A口

MOVA,#00H

MOVX@DPTR,A;向A口写入00H,

;输出选中所有8个LED

INCDPTR;指向8155B口

MOVA,#0FFH

MOVX@DPTR,A;向B口写入某个字型

码,输出点亮8个LED

SJMP$

8155控制8位数码管和键盘电路图

2)多位动态显示接口应用采用8051与8155接口,再采用8155的I/O口控制数码管的段码和位码,同时,采用动态扫描方式依次循环点亮各位数码管,即可构成多位动态数码管显示电路。

整体设计思路如下:

由8155的A口控制段码输出,C口控制位码输出。

采用定时器中断方式实现动态扫描,每隔20ms扫描一次,每位数码管点亮的时间为1ms。

在单片机内部RAM设置待显示数据缓冲区,由查表程序完成显示译码。

将缓冲区内待显示数据转换成相应的段码,再将段码通过8051的P0口送至8155的A口;位码数据由累加器循环左移指令产生,再通过P0口送至8155的C口。

硬件电路设计如下:

上图为数码管动态显示电路。

其中,8路驱动采用74LS244总线驱动器,6路驱动采用74LS07OC门驱动器。

74LS244输出经300W上拉(或限流)电阻后接至电源,同时,接至数码管的各段,控制数码管的显示字符。

74LS07输出经1kW上拉电阻接至电源,同时接至各位数码管的公共端,控制每位数码管的显示时间,实现动态扫描。

模拟生产线计数的按键信号接至P3.3口。

六位实现6位显示的秒表:

从左到右每2位LED分别显示小时、分和秒,并正常计数进位;上电后小时000000,当显示到235959后,6位显示清零,从头开始显示。

软件设计如下:

以单片机内部RAM的30H~35H单元作为显示数据缓冲区,六位数码管段码的获取及每位数码管的显示时间均由显示子程序完成。

采用定时器中断方式实现动态扫描,每隔50ms扫描一次,每位数码管点亮的时间为1ms。

单片机每接收一次按键信号(即模拟交通灯改变计数信号),显示缓冲区的待显示数据被刷新一次,数码管相应的显示数值也就随之发生变化。

如连续按键进行测试,即可产生计数数据从左至右循环移动的效果。

根据图中IO/、与单片机的连接可知,可以确定命令/状态字A口、B口、C口、计数值低8位寄存器及高6位和方式寄存器地址分别为:

0100H、0101H、0102H、0103H、0104H、0105H。

片内资源分配如下表:

名称

地址分配

用途

初始化值

MSEC

20H

定时器50MS计数单元

14H

SECOND

21H

秒计数单元

00H

MIN

22H

分计数单元

00H

HOUR

23H

小时计数单元

00H

30H—35H

显示缓冲区

30H:

秒的个位

31H:

秒的十位

32H:

分的个位

33H:

分的十位

34H:

小时的个位

35H:

小时的十位

00H

40H以上

堆栈区

软件流程图如下页图所示:

主程序:

MSECEQU20H;50MS计数单元

SECONDEQU21H;秒单元

MINEQU22H;分单元

HOUREQU23H;小时单元

ORG0000H

LJMPMAIN

ORG000BH

LJMPCONT

MAIN:

MOVSP,#3FH

MOVTMOD#01H

MOVTH0,#3CH

MOVTL0,#0B0H

MOVIE,#82H

MOVSECOND,#00H

MOVMIN,#00H

MOVHOUR,#00H

MOVMSEC,#14H

MOV35H,#00H

MOV34H,#00H

MOV33H,#00H

MOV32H,#00H

MOV31H,#00H

MOV30H,#00H

SETBTR0

START:

LCALLDISP

SJMPSTART

;LED动态显示子程序

;功能:

动态显示六个数码管

;入口:

显示缓冲区30H—35H中待显示的6个数据

DISP:

MOVR0,#30H;显示缓冲区首址

MOVR7,#00H;设定每位显示延时时间

MOVR2,#06H;显示位数

MOVR3,#20H;共阳管位码初始值,从右端先亮

MOVA,@R0;取显示缓冲区的一个数据

DISP1:

MOVDPTR,#TAB;查表首址给DPTR

MOVCA,@A+DPTR;查表得到显示字符的字型码

MOVP0,A;将字型码送P0口

MOVDPTR,#0101H

MOVX@DPTR,A;字型码送8155A口

MOVA,R3;位选码送A

MOVP2,A;位码送P2口

MOVDPTR,#0103H

MOVX@DPTR,A;位码送8155C口

DJNZR7,$;延时

DJNZR7,$;延时

RRA;位码右移

MOVR3,A;位码回送R3

INCR0;指向下一位

MOVA,@R0;取显示缓冲区下一个数据

DJNZR2,DISP1;6位显示一遍吗?

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

主程序流程图:

;定时器中断子程序:

;功能:

50MS执行一次,完成秒、分、小时单元的刷新并拆开放到显示缓冲区

;出口:

显示缓冲区30H—35H中存放待显示的6个数据

CONT:

PUSHACC

MOVTH0,#3CH

MOVTL0,#0B0H

DJNZMSEC,RN;判断到20次吗?

(暨1秒)到1秒,返回主程序

MOVMSEC,#14H;1秒到,重置MSEC=20

INCSECOND

MOVA,SECOND

MOVR1,#31H;指向显示缓冲区的31H单元

LCALLBINBCD;调用拆字子程序,将秒拆开为十位、个位,分别放31H,30H

MOVA,SECOND

CJNEA,#60,RN;到60秒?

未到返主程序

MOVA,#0

MOVSECOND,A;60秒到,秒单元清零

显示子程序流程图:

MOVR1,#31H;指向31H单元

LCALLBINBCD;调用拆字子程序

MOVA,MIN

INCA;分单元内容加1

MOVMIN,A

MOVR1,#33H;R1指向33H单元

LCALLBINBCD;调用拆字子程序,将分单元拆开为十位、个位,分别存放33H和32H单元

MOVA,MIN

CJNEA,#60,RN;到60分吗?

未到返主程序

MOVA,#00

MOVMIN,A;60分到,分单元清零

MOVR1,#33H;指向33H单元

LCALLBINBCD;调用拆字子程序

MOVA,HOUR

INCA;小时单元内容加1

MOVHOUR,A

MOVR1,#35H;R1指向35H单元

LCALLBINBCD;调用拆字子程序,将小时拆开为十位、个位,分别存放到35H和34H单元

MOVA,HOUR

CJNEA,#24,RN;到24小时吗?

未到返回主程序

MOVA,#00

MOVHOUR,A;到24小时,小时单元清零

MOVR1,#35H

LCALLBINBCD

RN:

POPACC

RETI

定时中断子程序流程图:

;BCD码拆字子程序:

;入口参数:

A,待拆开的BCD码

;R1:

拆开后BCD码存放的末地址

;功能:

将A中的两个十六进制数拆开为哦两个BCD码,分别存放到R1指向的两个缓冲单元

BINBCD:

MOVB,#10

DIVAB

MOV@R1,A

DECR1

MOVA,B

MOV@R1,A

RET

END

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2