新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于51单片机秒表的程序设计

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

作者:时间:2012-07-09来源:网络收藏

KE1: CLR EA ;关中断

CLR ET0 ;禁止T0中断

CLR TR1 ;关T1

CLR TR0 ;关T0

AJMP KEY

KE2: CLR EA ;关中断

AJMP MAIN ;返回主程序进行初始化

;――――――――――按键查询子程序――――――――――――――

KS: MOV DPTR,#4401H ;置8155PA口地址

MOV A,#00H

MOVX @DPTR,A ;全扫描字#00H送PA口

INC DPTR ;指向PC口

INC DPTR

MOVX A,@DPTR ;读入PC口状态

CPL A ;变正逻辑,高电平表示有键按下

ANL A,#0FH ;屏蔽高4位

RET ;返回,A≠0表示有键按下

;―――――――――LED动态显示子程序―――――――――――――

DISP: PUSH ACC ;A入栈保护

SETB RS0 ;保护第0组工作寄存器,启用第1组工作寄存器

MOV R2,#08H ;LED待显示位数送R2

MOV R1,#00H ;设定显示时间

MOV R3,#7FH ;选中最右端LED

MOV R0,#30H ;显示缓冲区首址送R0

MOV A,@R0 ;秒显示个位送A

DISP1: MOV DPTR,#TAB ;指向字形表首址

MOVC A,@A+DPTR ;查表取得字形码

MOV DPTR,#4402H ;指向8155PB口(段码口)

MOVX @DPTR,A ;字形码送PB口

MOV A,R3 ;取位选字

MOV DPTR,#4401H ;指向8155PA口(位选口) , /O:P>

MOVX @DPTR,A ;位码送PA口

DJNZ R1,$ ;延时0.5ms

DJNZ R1,$ ;延时0.5ms

RR A ;位选字移位

MOV R3,A ;移位后的位选字送R3

INC R0 ;指向下一位缓冲区地址

MOV A,@R0 ;缓冲区数据送A

DJNZ R2,DISP1 ;未扫描完,继续循环

CLR RS0 ;恢复第0组工作寄存器

POP ACC ;A弹栈,恢复现场

RET

TAB: DB 3FH,06H,5BH,4FH,66H ;共阴极LED字形表

DB 6DH,7DH,07H,7FH,6FH

;――――――――――定时器中断服务程序―――――――――――――

CONT: PUSH ACC ;保护现场

MOV TH0,#3CH ;定时器T1重置初值

MOV TL0,#0B0H

MOV A,20H ;秒计数器送A

AJMP CONT1

REN: AJMP REN1

CONT1: DJNZ 21H,REN ;1秒定时未到,中断返回

MOV 21H,#14H ;重置50ms计数初值

CLR P3.5 ;软件产生定时器T1计数脉冲

NOP

NOP

SETB P3.5

INC A ;1秒计数值加1

DA A ;换算为10进制计数

JBC TF1,CONT2 ;60秒到,转清零

CONT3: MOV 20H,A ;计数值送60秒计数单元20H

ANL A,#0FH ;屏蔽高4位

MOV 30H,A ;个位待显示数据送显示缓冲区

MOV A,20H

SWAP A ;60秒计数单元高、低4位数据互换

ANL A,#0FH ;屏蔽高4位

MOV 31H,A ;十位待显示数据送显示缓冲区

AJMP REN1

CONT2: MOV A,#00H

AJMP CONT3

REN1: POP ACC ;恢复现场

RET ;中断返回

END

3. 总结与分析

(1)实验采用七段码LED设计(数码管),显示直观;采用定时器中断,计时更准确;功能齐全,可随时启动、停止、清零,后者智能化程度更高。

(2)设计、调试大型程序时,需先根据要求划分模块,优化结构;再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化,设计出程序流程图;最后才根据各模块流程图编制具体程序。调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。本例子将整个程序划分为键盘程序,动态显示程序,秒计时程序三大模块,根据各自的特点确定键盘程序为主程序,动态显示程序为子程序,秒计时程序为定时器中断服务程序。主程序又细分为初始化程序,键盘查询程序,键盘扫描程序,键盘处理程序四大部分。三大模块之间的关系是:键盘程序在无键按下时,不断调用动态显示子程序;在有键按下时,先调用动态显示子程序消抖,再进入键盘处理程序,控制中断服务程序的运行;处理完毕后,再不断调用动态显示子程序。经上述处理后,三大模块运行协调一致,既保持了动态显示的稳定性,又保持了键盘的可靠性,还保持了秒计时的准确性,较好地实现了全部功能。

(3)本例子只用到8位LED显示中的两位,只用到4×4键盘16个按键中的3个,因此,其功能还有较大的扩展空间。只要将上述程序稍加改动即可实现秒、分、时、日显示,并可作全方位修改的实时时钟。如增加LED显示位数或将显示改为LCD显示模块,可实现年、月、周、日、时、分、秒显示。

燃气报警器相关文章:燃气报警器原理

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭