当前位置:文档之家› (完整word版)六位LED八段数码管显示

(完整word版)六位LED八段数码管显示

八段数码管显示1.实验目的:(1)了解数码管动态显示的原理。

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

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

3.实验线路:PB0 数据输入PB1 时钟输入说明:这里只是显示草图,详细原理参见"8155 接口实验"4.实验器材:(1)QTH2008下载式综合实验仪 1 台(2)QTH2008仿真器 1 台(3)计算机 1 台5.实验说明:(1)本实验仪提供了8 段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6 位,用动态方式显示。

8 段码是由8155 的PB0、PB1 经74LS164“串转并”后输出得到。

6 位位码由8155(或8255) 的PA0-5 口输出,经uA2003 反向驱动后,选择相应显示位。

74LS164 是串行输入并行输出转换电路,串行输入的数据位由8155 的PB0 控制,时钟位由8155 的PB1 控制输出。

写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位置到74LS164 中,并且实现移位。

向显示位选通地址输出高电平就可以点亮相应的显示位。

本实验仪中数据位输出地址为0e102H,时钟位输出地址为0e102H,位选通输出地址为0e101H。

本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164 器件的工作原理。

7.参考程序(SY10.ASM):OUTBIT equ 0e101h ; 位控制口CLK164 equ 0e102h ; 段控制口(接164 时钟位) DAT164 equ 0e102h ; 段控制口(接164 数据位) IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75horg 0000hljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h Delay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共6 个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #00hmovx @dptr, a ; 关所有八段管mov a, @r0mov B, #8 ; 送164DLP:rlc amov r3, amov acc.0, cANL A, #0FDHmov dptr, #DAT164movx @dptr, amov dptr, #CLK164orl a,#02hmovx @dptr, aanl a,#0fDhmovx @dptr, amov a, r3djnz B, DLPmov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100hmov a,#03hmovx @dptr,amov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ; 数字转换成显示码mov @r0,a ; 显示在码填入显示缓冲inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#30DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopEND八位数码管显示:8155控制参考程序2:对8155初始化,使I/O口控制LED的显示情况。

ORG 0000HMOV DPTR,#4400H ;指向8155命令寄存器MOV A,#03HMOVX @DPTR,A ;写入控制字。

A口、B口为输出,C口为输入INC DPTR ;指向8155A口MOV A,#00HMOVX @DPTR,A ;向A口写入00H,;输出选中所有8个LEDINC DPTR ;指向8155B口MOV A,#0FFHMOVX @DPTR,A ;向B口写入某个字型码,输出点亮8个LEDSJMP $8155控制8位数码管和键盘电路图2) 多位动态显示接口应用采用8051与8155接口,再采用8155的I/O口控制数码管的段码和位码,同时,采用动态扫描方式依次循环点亮各位数码管,即可构成多位动态数码管显示电路。

整体设计思路如下:由8155的A口控制段码输出,C口控制位码输出。

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

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

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

硬件电路设计如下:上图为数码管动态显示电路。

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

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

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

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

六位实现6位显示的秒表:从左到右每2位LED分别显示小时、分和秒,并正常计数进位;上电后小时00 00 00,当显示到23 59 59后,6位显示清零,从头开始显示。

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

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

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

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

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

软件流程图如下页图所示:主程序:MSEC EQU 20H ;50MS计数单元SECOND EQU 21H ;秒单元MIN EQU 22H ;分单元HOUR EQU 23H ;小时单元ORG 0000HLJMP MAINORG 000BHLJMP CONTMAIN: MOV SP, #3FHMOV TMOD #01HMOV TH0,#3CHMOV TL0,#0B0HMOV IE, #82HMOV SECOND, #00HMOV MIN, #00HMOV HOUR, #00HMOV MSEC, #14HMOV 35H, #00HMOV 34H, #00HMOV 33H, #00HMOV 32H, #00HMOV 31H, #00HMOV 30H, #00HSETB TR0START:LCALL DISPSJMP START;LED动态显示子程序;功能:动态显示六个数码管;入口:显示缓冲区30H—35H中待显示的6个数据DISP: MOV R0,#30H ;显示缓冲区首址MOV R7,#00H ;设定每位显示延时时间MOV R2,#06H ;显示位数MOV R3,#20H ;共阳管位码初始值,从右端先亮MOV A,@R0 ;取显示缓冲区的一个数据DISP1:MOV DPTR, #TAB ;查表首址给DPTRMOVC A, @A+DPTR ;查表得到显示字符的字型码MOV P0 , A ; 将字型码送P0口MOV DPTR, #0101HMOVX @DPTR, A ;字型码送8155A口MOV A , R3 ;位选码送AMOV P2 , A ;位码送P2口MOV DPTR, #0103HMOVX @DPTR, A ;位码送8155C口DJNZ R7 , $ ;延时DJNZ R7 , $ ;延时RR A ;位码右移MOV R3,A ;位码回送R3INC R0 ;指向下一位MOV A,@R0 ;取显示缓冲区下一个数据DJNZ R2,DISP1 ;6位显示一遍吗?RETTAB:DB 0C0H, 0F9H, 0A4H , 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H主程序流程图:;定时器中断子程序:;功能:50MS执行一次,完成秒、分、小时单元的刷新并拆开放到显示缓冲区;出口:显示缓冲区30H—35H中存放待显示的6个数据CONT:PUSH ACCMOV TH0,#3CHMOV TL0,#0B0HDJNZ MSEC, RN ;判断到20次吗?(暨1秒)到1秒,返回主程序MOV MSEC, #14H ;1秒到,重置MSEC=20INC SECONDMOV A, SECONDMOV R1,#31H ;指向显示缓冲区的31H单元LCALL BINBCD ;调用拆字子程序,将秒拆开为十位、个位,分别放31H,30HMOV A, SECONDMOV A, #0MOV SECOND, A ;60秒到,秒单元清零显示子程序流程图:MOV R1,#31H ;指向31H单元LCALL BINBCD ;调用拆字子程序MOV A, MININC A ;分单元内容加1MOV MIN, AMOV R1,#33H ;R1指向33H单元LCALL BINBCD ;调用拆字子程序,将分单元拆开为十位、个位,分别存放33H和32H单元MOV A, MINMOV A, #00MOV MIN, A ;60分到,分单元清零MOV R1,#33H ;指向33H单元LCALL BINBCD ;调用拆字子程序MOV A, HOURINC A ;小时单元内容加1MOV HOUR, AMOV R1,#35H ;R1指向35H单元LCALL BINBCD ;调用拆字子程序,将小时拆开为十位、个位,分别存放到35H和34H单元MOV A, HOURCJNE A, #24,RN ;到24小时吗?未到返回主程序MOV A, #00MOV HOUR, A ;到24小时,小时单元清零MOV R1,#35HLCALL BINBCDRN:POP ACCRETI定时中断子程序流程图:;BCD码拆字子程序:;入口参数:A,待拆开的BCD码;R1:拆开后BCD码存放的末地址;功能:将A中的两个十六进制数拆开为哦两个BCD码,分别存放到R1指向的两个缓冲单元BINBCD:MOV B, #10DIV ABMOV @R1,ADEC R1MOV A, BMOV @R1,ARETEND。

相关主题