第3章 系统的设计与实现
3.2 软件设计与分析
3.2.1 软件设计概述
在软件设计中,一般采用模块化的程序设计方法,它具有明显的优点。把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。
应用系统的程序由包含多个模块的主程序和各种子程序组成。各程序模块都要完成一个明确的任务,实现某个具体的功能,如:加计数、减计数、延时、快加、快减,计数和显示存储等,在具体需要时调用相应的模块即可。
功能描述:用2位LED数码显示\秒表\,显示时间为00~99秒,每秒自动加1;一个\开始\键,一个\复位\键,一个\暂停\键,;一个“记录”键,可同时记录3个相对独立的时间;一个查看“第一次时间”键,一个“第二次时间”键,一个“第3次时间”键,可查看3个不同的计时值;2个设置超限值的按钮,一个“加键”,一个“减键”
20
第3章 系统的设计与实现
3.2.2 程序流程图
开始
初始化
P1.0=0?
Y
P1.1=0? Y P1.2=0?
快减
快加
N N P1.0=0? Y Y
停止
Y N 下翻 够4个? 上翻 P1.0=0? 暂停记录
Y Y P1.3=0? Y P1.4=0? Y P1.5=0? N N N N N N
3.8主程序流程图
21
第3章 系统的设计与实现
(2)加1程序如3.9
(20H) A 进位清零 做加法 到100? N Y (20H)清零 个位十位分开 返回
3.9
3.2.3子程序模块设计
(1)停止子程序
按键后,使秒表停止,即关闭定时器0,1,程序如下:
STOP: CLR TR0
CLR TR1;关闭定时器0,1 ACALL DISP;显示
(2)暂停记录子程序
按键结束后,将此时显示内存中的数送寄存器中保存,并通过条件转移指令判断是否存够3个数,若存够则停止,否则继续。
JILU : MOV A,20H
22
第3章 系统的设计与实现
MOV @R1, A INC R1
DJNZ 50H, HERE;是否够三个数? MOV R1, #71H MOV 50H, #04H MOV 51H, #04H
SJMP STOP;够3个数停止 (3)加1子程序
此程序只为简单的加1,并判断是否到100?到则从0开始,否则继续,另外将显
示内存中的数个位十位分开,以便于动态显示。
JIA1: MOV A,20H ; CLR C INC A
CJNE A, #100, GO1;是否加到100? MOV 20H, #00H RET
GO1: MOV 20H, A;将个位十位分开显示 MOV B, #0AH DIV AB
MOV 31H, A MOV 30H, B RET
(4)显示子程序,采用动态显示
DISP: MOV R0,#30H MOV R3, #0FEH MOV A, R3 PLAY: MOV P2, A MOV A,@R0
MOV DPTR, #DSEG1 MOVC A,@A+DPTR MOV P0, A LCALL DL1
MOV P2, #0FFH MOV A, R3
23
第3章 系统的设计与实现
RL A
JNB ACC.2, LD1 INC R0 MOV R3, A LJMP PLAY LD1: RET
DL1: MOV R7, #05H DL: MOV R6, #0FFH DL6: DJNZ R6, $ DJNZ R7, DL RET
(5)延时子程序
例如延时10ms程序:
DELAY10:MOV R4,#14H DL00: MOV R5, #0FFH DL11: DJNZ R5, DL11 DJNZ R4, DL00 RET
(6)按键消抖程序
延时10ms再次判断该位的状态,若仍是0则说明该键被按下,弹起后去执行该按键功能;若为1,则说明是抖动则继续向下判断。
L1: JB P1.1,L2 ; P1.1=0,快减 ACALL DELAY10 JB P1.1, L2 JNB P1.1, $ LJMP KJIAN
(5)中断服务程序
用外部中断1实现开始,定时器0定时1S,定时器1定时10ms 。
24