基于51单片机秒表的程序设计

上传人:工**** 文档编号:557959809 上传时间:2023-07-31 格式:DOC 页数:11 大小:80KB
返回 下载 相关 举报
基于51单片机秒表的程序设计_第1页
第1页 / 共11页
基于51单片机秒表的程序设计_第2页
第2页 / 共11页
基于51单片机秒表的程序设计_第3页
第3页 / 共11页
基于51单片机秒表的程序设计_第4页
第4页 / 共11页
基于51单片机秒表的程序设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《基于51单片机秒表的程序设计》由会员分享,可在线阅读,更多相关《基于51单片机秒表的程序设计(11页珍藏版)》请在金锄头文库上搜索。

1、基于51单片机秒表的程序设计1设计目的:(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。(2)通过LED显示程序的调整,熟悉8155与8051,8155与LED的接口技术,熟悉LED动态显示的控制过程。(3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术,熟悉键盘扫描原理。(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。2 设计步骤与要求 (1)要求:以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。以44矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等

2、功能。(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。(3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。二者间的联系是:主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确

3、性和LED动态显示的稳定性。秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。由上述设计思路可设计出软件流程图如图1.1所示。(5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则跳回按键查询状态。8位LED显示的数据由显示缓冲区30H37H单元中的数据决定,顺序是从左至右,动态显示时,每位显示持续时间为1ms,1ms延时

4、由软件实现,8位显示约耗时8ms。主程序、按键查询子程序采用第0组工作寄存器,显示子程序采用第1组工作寄存器。1秒定时采用定时器T0方式1中断,每50ms中断一次,用21H做50 ms计数单元,每20次为一个循环,计满20次,60秒计数单元(20H)计数1次。60秒计数采用定时器T1方式2计数,计数脉冲采用软件置位、复位P3.5口的方法实现,用20H单元做60秒计数单元,如定时器T1溢出,则20H单元被清零,20H单元的数据采用十进制计数,该数据被拆成个位和十位两个数据后分别送至显示缓冲区的30H、31H单元。按照上述思路可编制源程序如下: ORG 0000H AJMPMAIN ORG000B

5、H AJMPCONT ;主程序 ;初始化程序MAIN:MOVTMOD,#61H ;置T0方式1定时,T1方式2计数 MOVTH0,#3CH;T0置初值 MOVTL0,#0B0H MOVTH1,#0C4H;T1置初值 MOVTL1,#0C4H MOVDPTR,#4400H ;8155控制口地址送DPTR MOVA,#43H ;设置8155工作方式字 MOVXDPTR,A;设置PA、PB口输出,PC口输入 MOV20H,#00H;60秒计数单元置初值 MOV21H,#14H ;50ms计数单元置初值 MOVSP,#3FH;堆栈指针置初值 MOVR2,#08H;LED待显示位数送R2 MOVR0,#

6、30H ;显示缓冲区首址送R0 STAR:MOVR0,#00H;显示缓冲区清零 INCR0 DJNZR2,STAR CLRA ;累加器清零 ;键盘查询程序 KEY: ACALLKS;调按键查询子程序判是否有键按下 JNZK1 ;有键按下转移 ACALLDISP;无键按下,调显示子程序延时 AJMPKEY ;继续查询按键 ;键盘扫描程序 K1: ACALLDISP;键盘去抖延时 ACALLDISP ACALLKS ;再次判别是否有键按下 JNZK2 ;有键按下转移 AJMPKEY ;无按键,误读,继续查询按键 K2: MOVR3,#0FEH;首列扫描字送R3 MOVR4,#00H;首列号送R4

7、K3: MOVDPTR,#4401H;PA口地址送DPTR,开始列扫描 MOVA,R3 MOVXDPTR,A;列扫描字送PA口 INCDPTR ;指向PC口 INCDPTR MOVXA,DPTR;读取行扫描值 JBACC.0,L1;第0行无键按下,转查第1行 MOVA,#00H;第0行有键按下,行首键号送A AJMPLK ;转求键号 L1: JBACC.1,L2;第1行无键按下,转查第2行 MOVA,#08H;第1行有键按下,行首键号送A AJMPLK ;转求键号 L2: JBACC.2,L3;第2行无键按下,转查第3行 MOVA,#10H;第2行有键按下,行首键号送A AJMPLK;转求键号

8、 L3: JBACC.3,NEXT;第3行无键按下,转查下一列 MOVA,#18H ;第3行有键按下,行首键号送A AJMPLK LK: ADDA,R4;形成键码送A PUSHACC;键码入栈保护 K4: ACALLDISP ACALLKS;等待键释放 JNZK4 ;未释放,等待 POPACC ;键释放,弹栈送A AJMPPR;转键盘处理程序 NEXT:INCR4 ;修改列号 MOVA,R3 JNBACC.3,KEY;4列扫描完返回按键查询状态 RLA;未扫描完,改为下列扫描字 MOVR3,A;扫描字暂存R3 AJMPK3;转列扫描程序 ;键盘处理程序 PR: CJNEA,#00H,PR01;

9、不是KE0键码,转KE1键 AJMPKE0;转KE0键处理程序 PR01:CJNEA,#01H,PR02;不是KE1键码,转KE2键 AJMPKE1;转KE1键处理程序 PR02:CJNEA,#02H,PR03;不是KE2键码,返回按键查询 AJMPKE2;转KE2键处理程序 PR03:AJMPKEY KE0: SETBTR0;启动定时器T0 SETBTR1;启动定时器T1 SETBET0;允许定时器T0中断 SETBEA;开中断 AJMPKEY ;返回键盘查询状态 KE1: CLREA;关中断 CLRET0;禁止定时器T0中断 CLRTR1;关定时器T1 CLRTR0;关定时器T0 AJMPKEY KE2: CLREA ;关中断 AJMPMAIN;返回主程序进行初始化 ;按键查询子程序 KS: MOVDPTR,#4401H ;置8155PA口地址 MOVA,#00H MOVXDPTR,A;全扫描字#00H送PA口 INCDPTR ;指向PC口 INCDPTR MOVXA,DPTR;读入PC口状态 CPLA ;变正逻辑,高电平表示有键按下 ANLA,#0FH ;屏蔽高4位 RET ;返回,A0表示有键按下 ;LED动态显示子程序 DISP:PUSHACC;A入栈保护 SETBRS0;保护第0组工作寄存器,启用第1组

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号