单片机数码管静态显示整理版.docx
- 文档编号:4998368
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:9
- 大小:40.78KB
单片机数码管静态显示整理版.docx
《单片机数码管静态显示整理版.docx》由会员分享,可在线阅读,更多相关《单片机数码管静态显示整理版.docx(9页珍藏版)》请在冰豆网上搜索。
单片机数码管静态显示整理版
单片机数码管静态显示[整理版]
动态显示
1(掌握LED数码管显示及其一般电路结构;
2(掌握LED动态显示程序的一般设计方法。
一、实验内容
动态显示,也称为扫描显示。
显示器由6个共阴极LED数码管构成。
单片机的P0口输出显示段码,由一片74LS245输出给LED管;由P1口输出位码,经74LS04输出给LED显示。
二、实验步骤
1、打开ProteusISIS编辑环境,按下表所列的元件清单添加元件。
实验所用元件清单
元件名称所属类所属子类
AT89C51MicroprocessorICs8051amily
CAPCapacitorsGeneric
CAP-ELECCapacitorsGeneric
CRYSTALMiscellaneous-
RESResistorsGeneric7SEG-MPX6-CC-BLUEOptoelectronics7-SegmentDisplays
74LS04TTL74LSSeriesGates&Inverters
74LS245TTL74LSSeriesTranseivers
元件全部添加后,在ProteusISIS的编辑区域中按实验原理图连接硬件电路。
图1动态显示实验电路原理图
2、按实验要求在KeilC中创建项目,编辑、编译程序。
3、将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。
4、在ProteusISIS仿真环境中运行程序,观察实验运行结果并记录。
三、实验要求
1.编写一显示程序显示201071;2.显示特殊字符good;
3.调整软件延时子程序的循环初值,逐渐加大每一位LED点亮的时间,观察程
序运行结果。
四、参考程序
dbuequ30h;置存储区首址
tempequ40h;置缓冲区首址
org00h
mov30h,#2;存入数据
mov31h,#0
mov32h,#1
mov33h,#0
mov34h,#7
mov35h,#1
movr0,#dbu
movr1,#temp
movr2,#6;六位显示器
movdptr,#segtab;段码表首地址dp00:
mova,@r0;取要显示的数据
movca,@a+dptr;查表取段码
mov@r1,a;段码暂存
incr1
incr0
djnzr2,dp00
disp0:
movr0,#temp;显示子程序
movr1,#6;扫描6次
movr2,#01h;从第一位开始dp01:
mova,@r0
movp0,a;段码输出
mova,r2;取位码
movp1,a;位码输出
acalldelay;调用延时
mova,r2
rla
movr2,a
incr0
djnzr1,dp01
sjmpdisp0
segtab:
db3h,06h,5bh,4h,66h
db6dh,7dh,07h,7h,6h
delay:
movr4,#03h;延时子程序aa1:
movr5,0h
aa:
djnzr5,aa
djnzr4,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(在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活
地安排在64K字节程序存储器的任何空间。
2(在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失
原寄存器、累加器的信息。
3(若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU
中断,或禁止某中断源中断,在返回前再开放中断。
五、实验内容
编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。
实验电路原理如图1所示。
计算初值公式16定时模式1th0=(2-定时时间)/25616tl0=(2-定时时间)mod256六、实验步骤
1、打开ProteusISIS编辑环境,按下表所列的元件清单添加元件。
实验所用元件清单
元件名称所属类所属子类
AT89C51MicroprocessorICs8051amily
CAPCapacitorsGeneric
CAP-ELECCapacitorsGeneric
CRYSTALMiscellaneous-
RESResistorsGeneric7SEG-COM-CAT-GRNOtoelectronics7-SegmentDisplays
PULLUPModellingPrimitivesDigital[Miscellaneous]
元件全部添加后,在ProteusISIS的编辑区域中按实验原理图连接硬件电路。
图1定时器实验电路原理图
2、按实验要求在KeilC中创建项目,编辑、编译程序。
3、将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。
4、在ProteusISIS仿真环境中运行程序,观察实验运行结果并记录。
五、参考程序
secondequ30h
countequ31h
org00h
ljmpstart
org0bh
ljmpint_t0
start:
movsecond,#00h
movcount,#00h
movdptr,#table;段码表首址
movp0,#3h
movp2,#3h
movtmod,#01h
movth0,#(65536-50000)/256
movtl0,#(65536-50000)mod256;定时50ms
setbtr0
movie,#82h
sjmp$
int_t0:
movth0,#(65536-50000)/256
movtl0,#(65536-50000)mod256
inccount
mova,count
cjnea,#20,i2;是否到1s
movcount,#00h
incsecond
mova,second
cjnea,#60,i1;是否到60s
movsecond,#00h
i1:
mova,second
movb,#10
divab
movca,@a+dptr
movp0,a
mova,b
movca,@a+dptr
movp2,a
i2:
reti
table:
db3h,06h,5bh,4h,66h
db6dh,7dh,07h,7h,6h
end
六、思考
若用定时器1方式2,程序如何修改,
org0000h
main:
movp2,#00h
movr1,#1
start:
movdptr,#tab;将表头放入DPTR
lcallkey;调用键盘扫描程序
movca,@a+dptr;查表后将键值送入ACC
cjner1,#1,er
incr1
movr2,a
ljmpstart
er:
cjner1,#2,san
incr1
movr3,a
ljmpstart
san:
cjner1,#3,si
incr1
movr0,a
ljmpstart
si:
cjner1,#4,an
movr5,a
xun:
movp3,#00h
movp2,r2
movp3,#01h
lcalldelay3
movp3,#00h
movp2,r3
movp3,#02h
lcalldelay3
movp3,#00h
movp2,r0
movp3,#04h
lcalldelay3
movp3,#00h
movp2,r5
movp3,#08h
lcalldelay3
ljmpxun
an:
ljmpxun
KEY:
LCALLKS;调用检测按键子程序
JNZK1;有键按下继续LCALLDELAY2;无键按调用延时去抖
AJMPKEY;返回继续检测按键
K1:
LCALLDELAY2LCALLDELAY2;有键按下延时去抖动LCALLKS;再调用检测按键程序JNZK2;确认有按下进行下一步AJMPKEY;无键按下返回继续检测K2:
MOVR2,#0EH;将扫描值送入R2暂存MOVR4,#00H;将第一列值送入R4暂存K3:
MOVP1,R2;将R2的值送入P1口L6:
JBP1.0,L1;P1.0等于1跳转到L1MOVA,#00H;将第一行值送入ACCAJMPLK;跳转到键值处理程序L1:
JBP1.1,L2;P1.1等于1跳转到L2MOVA,#04H;将第二行的行值送入ACC
AJMPLK;跳转到键值理程序进行键值处理L2:
JBP1.2,L3;P1.2等于1跳转到L3MOVA,#08H;将第三行的行值送入ACC
AJMPLK;跳转到键值处理程序
L3:
JBP1.3,NEXT;P1.3等于1跳转到NEXT处MOVA,#0cH;将第四行的行值送入ACCLK:
ADDA,R4;行值与列值相加后的键值送入APUSHACC;将A中的值送入堆栈暂存K4:
LCALLDELAY2;调用延时去抖动程序
LCALLKS;调用按键检测程序
JNZK4;按键没有松开继续返回检测
POPACC;将堆栈的值送入ACC
RET
NEXT:
INCR4;将列值加一
MOVA,R2;将R2的值送入AJNBACC.7,KEY;扫描完至KEY处进行下一扫描
RLA;扫描未完将A中的值右移一位进行下一列的扫描MOVR2,A;将ACC的值送入R2暂存
AJMPK3;跳转到K3继续
KS:
MOVP1,#0H;将P1口高四位置0低四位值1
MOVA,P1;读P1口
XRLA,#0H;将A中的值与A中的值相异或
RET;子程序返回
DELAY2:
;40ms延时去抖动子程序
MOVR5,#08H
L7:
MOVR6,#0AH
L8:
DJNZR6,L8
DJNZR5,L7
RET
delay3:
movr7,#10
d1:
movr6,#200
djnzr6,d2
d2:
djnzr7,d1
ret
tab:
db66h,4h,5bh,06h,7h,07h,7dh,6dh,7ch,77h,3h,6h,71h,79h,5eh,39h;0h0hc9878654a321轮流显示键
盘因为无法表达*#就用H表示,B用8表示
end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数码管 静态 显示 整理
![提示](https://static.bdocx.com/images/bang_tan.gif)