完整word版六位LED八段数码管显示精Word格式.docx
- 文档编号:4435646
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:15
- 大小:225.95KB
完整word版六位LED八段数码管显示精Word格式.docx
《完整word版六位LED八段数码管显示精Word格式.docx》由会员分享,可在线阅读,更多相关《完整word版六位LED八段数码管显示精Word格式.docx(15页珍藏版)》请在冰点文库上搜索。
CLK164equ0e102h;
段控制口(接164时钟位DAT164equ0e102h;
段控制口(接164数据位INequ0e103h;
键盘读入口
LEDBufequ60h;
显示缓冲
Numequ70h;
显示的数据
DelayTequ75h
org0000h
ljmpStart
LEDMAP:
;
八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07hdb7fh,6fh,77h,7ch,39h,5eh,79h,71hDelay:
延时子程序
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
anla,#0fDh
mova,r3
djnzB,DLP
mova,r2
显示一位八段管movr6,#1
callDelay
mova,r2;
显示下一位
rra
movr2,a
incr0
djnzr1,Loop
mova,#0
Start:
movdptr,#0e100h
mova,#03h
movx@dptr,a
movsp,#40h
movNum,#0
MLoop:
incNum
mova,Num
movb,a
FillBuf:
mova,b
anla,#0fh
movdptr,#LEDMap
movca,@a+dptr;
数字转换成显示码
mov@r0,a;
显示在码填入显示缓冲
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
向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输出经300Ω上拉(或限流电阻后接至电源,同时,接至数码管的各段,控制数码管的显示字符。
74LS07输出经1kΩ上拉电阻接至电源,同时接至各位数码管的公共端,控制每位数码管的显示时间,实现动态扫描。
模拟生产线计数的按键信号接至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。
片内资源分配如下表:
主程序:
MSECEQU20H;
50MS计数单元
SECONDEQU21H;
秒单元
MINEQU22H;
分单元
HOUREQU23H;
小时单元
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
字型码送8155A口
MOVA,R3;
位选码送A
MOVP2,A;
位码送P2口
MOVDPTR,#0103H
位码送8155C口
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
DJNZMSEC,RN;
判断到20次吗?
(暨1秒到1秒,返回主程序
MOVMSEC,#14H;
1秒到,重置MSEC=20
INCSECOND
MOVA,SECOND
MOVR1,#31H;
指向显示缓冲区的31H单元
LCALLBINBCD;
调用拆字子程序,将秒拆开为十位、个位,分别放31H,30HMOVA,SECOND
CJNEA,#60,RN;
到60秒?
未到返主程序
MOVA,#0
MOVSECOND,A;
60秒到,秒单元清零
显示子程序流程图:
指向31H单元
调用拆字子程序
MOVA,MIN
INCA;
分单元内容加1
MOVMIN,A
MOVR1,#33H;
R1指向33H单元
调用拆字子程序,将分单元拆开为十位、个位,分别存放33H和32H单元
到60分吗?
MOVA,#00
MOVMIN,A;
60分到,分单元清零
指向33H单元
MOVA,HOUR
小时单元内容加1
MOVHOUR,A
MOVR1,#35H;
R1指向35H单元
调用拆字子程序,将小时拆开为十位、个位,分别存放到35H和34H单元
CJNEA,#24,RN;
到24小时吗?
未到返回主程序
MOVHOUR,A;
到24小时,小时单元清零
MOVR1,#35H
LCALLBINBCD
RN:
POPACC
RETI
定时中断子程序流程图:
BCD码拆字子程序:
入口参数:
A,待拆开的BCD码
;
R1:
拆开后BCD码存放的末地址;
功能:
将A中的两个十六进制数拆开为哦两个BCD码,分别存放到R1指向的两个缓冲单元BINBCD:
MOVB,#10DIVABMOV@R1,ADECR1MOVA,BMOV@R1,ARETEND
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 版六位 LED 数码管 显示