99网
您的当前位置:首页实验七 单片机动态显示实验

实验七 单片机动态显示实验

来源:99网
实验七 动态显示实验

一、 实验目的

1.掌握LED数码管显示及其一般电路结构; 2.掌握LED动态显示程序的一般设计方法。

二、 实验内容

动态显示,也称为扫描显示。显示器由6个共阴极LED数码管构成。单片机的P0口输出显示段码,由一片74LS245输出给LED管;由P1口输出位码,经74LS04输出给LED显示。

三、 实验步骤

1、打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。

实验所用元件清单 元件名称 所属类 所属子类 ATC51 Microprocessor ICs 8051 Family CAP Capacitors Generic CAP-ELEC Capacitors Generic CRYSTAL Miscellaneous - RES Resistors Generic 7SEG-MPX6-CC-BLUE Optoelectronics 7-Segment Displays 74LS04 TTL 74LS Series Gates & Inverters 74LS245 TTL 74LS Series Transeivers 元件全部添加后,在Proteus ISIS的编辑区域中按实验原理图连接硬件电路。

图1 动态显示实验电路原理图

2、 按实验要求在KeilC中创建项目,编辑、编译程序。

3、 将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。 4、 在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。

四、 实验要求

1. 编写一显示程序显示201071; 2. 显示特殊字符good;

3. 调整软件延时子程序的循环初值,逐渐加大每一位LED点亮的时间,观察程

序运行结果。

五、 参考程序

dbuf equ 30h ;temp equ 40h ; org 00h

mov 30h,#2 ; mov 31h,#0 mov 32h,#1 mov 33h,#0 mov 34h,#7 mov 35h,#1 mov r0,#dbuf mov r1,#temp

mov r2,#6 ; mov dptr,#segtab ;dp00: mov a,@r0 ; movc a,@a+dptr ; mov @r1,a ; inc r1 inc r0

djnz r2,dp00

disp0: mov r0,#temp ; mov r1,#6 ; mov r2,#01h ;dp01: mov a,@r0

mov p0,a ; mov a,r2 ; mov p1,a ; acall delay ; mov a,r2 rl a

mov r2,a inc r0

djnz r1,dp01

置存储区首址 置缓冲区首址

存入数据 六位显示器 段码表首地址 取要显示的数据 查表取段码 段码暂存 显示子程序 扫描6次

从第一位开始 段码输出 取位码 位码输出 调用延时 sjmp disp0

segtab: db 3fh,06h,5bh,4fh,66h db 6dh,7dh,07h,7fh,6fh

delay: mov r4,#03h ;延时子程序 aa1: mov r5,0ffh aa: djnz r5,aa djnz r4,aa1 ret end

实验原理

MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。

定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。

定时器的编程包括: 1) 置工作方式。 2) 置计数初值。 3) 中断设置。 4) 启动定时器。

定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常

数也就不同。

在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH和001BH。

中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。

因此,我们在编写中断服务程序时注意。

1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在K字节程序存储器的任何空间。

2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。 3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。

六、 实验内容

编写并调试一个程序,用ATC51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。

计算初值公式

定时模式1 th0=(216-定时时间) /256

tl0=(216-定时时间) mod 256

七、 实验步骤

1、打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。

实验所用元件清单 元件名称 所属类 所属子类 ATC51 Microprocessor ICs 8051 Family CAP Capacitors Generic CAP-ELEC Capacitors Generic CRYSTAL Miscellaneous - RES ResistorsGeneric 7SEG-COM-CAT-GRN Otoelectronics 7-Segment Displays PULLUP Modelling Primitives Digital[Miscellaneous] 元件全部添加后,在Proteus ISIS的编辑区域中按实验原理图连接硬件电路。

图1 定时器实验电路原理图

2、 按实验要求在KeilC中创建项目,编辑、编译程序。

3、 将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。 4、 在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。 五、 参考程序

second equ 30h count equ 31h

org 00h ljmp start org 0bh ljmp int_t0 start: mov second,#00h mov count,#00h

mov dptr,#table ;段码表首址 mov p0,#3fh mov p2,#3fh mov tmod,#01h

mov th0,#(65536-50000)/256

mov tl0,#(65536-50000) mod 256 ;定时50ms setb tr0

mov ie,#82h sjmp $

int_t0: mov th0,#(65536-50000)/256

mov tl0,#(65536-50000) mod 256 inc count mov a,count

cjne a,#20,i2 ;是否到1s mov count,#00h inc second

mov a,second

cjne a,#60,i1 ;是否到60s mov second,#00h i1: mov a,second mov b,#10 div ab

movc a,@a+dptr mov p0,a mov a,b

movc a,@a+dptr mov p2,a i2: reti

table: db 3fh,06h,5bh,4fh,66h db 6dh,7dh,07h,7fh,6fh end

六、 思考

若用定时器1方式2,程序如何修改?

因篇幅问题不能全部显示,请点此查看更多更全内容