三、软件设计说明
1、模块设计:
初始化模块 :对系统进行初始化,由于程序中有中断源,因此打开相应的中断也放在程序的初始化模块中;
检测开始按键:检测开始按键是否被按下,按下则开始执行循环检测同意与反对按键,为消除按键抖动,此处需调用延时程序;
循环检测同意/反对按键:循环检测同意与反对按键是否被按下,同时统计同意总数与反对总数,然后等待中断到来;
延时程序:用于消除按键的机械抖动,调用0.5s的延时程序;
中断处理:当中断源到来,首先熄灭黄灯,然后将同意总数与反对总数进行比较,并点亮对应的显示灯;
2、软件设计流程图
开始 大于 点亮绿灯 比较同意与反对数的大小 中断程序 等待中断 循环检测同意反对按键 系统初始化 开始按键的检测 调用延时程序 等于 小于 点亮所有灯 点亮红灯 中断返回 结束 6
3、软件总体功能:
软件的总体功能
1.用于检测开始按键是否被按下,按下则表决按键按下才有效,即开始表决; 2.开始表决后循环检测对应的同意与反对按键是否被按下,并统计同意总数与反对总数;
3.等待中断,即等待结束按键被按下,在中断处理中将同意与反对数进行比较,并点亮相应的显示灯,程序结束。
四、程序清单
ORG 0000H AJMP MAIN ;//转主程序// ORG 0013H ;//外部中断1的入口地址// AJMP INT_1 ;//跳转到中断// ORG 0100H
MAIN: MOV SP,#60H ;//给地址指针赋初值// MOV A,#0FFH MOV P1,A ;//给P1口赋初始值// MOV P2,A ;//给P2口赋初始值// MOV P0,A ;//给P0口赋初始值// SETB EA ;//开中断// SETB EX1 ;//打开外部中断1// SETB IT1 ;//设置外部中断1为边沿触发方式// JB P3.2,$ ;//等待外部中断0上的按键按下// LCALL DEL05S ;//调用延时程序// JNB P3.2,$ ;//等待按键弹起// CLR P0.5 ;//点亮黄灯// L10: JB P1.4,L11 ;//判断按键P1.4口上的按键是否被按下// JNB P1.4,$ ;//等待按键弹起// JNB P2.0,L11 ;//检测对应的反对按键是否被按下// LCALL DEL05S ;//调用延时程序// MOV 21H,#00H ;//将21H初始化// MOV A,21H ;//21H中存储第一个同意按键的按下数// INC A ; //对21H地址单元中的值加1// MOV B,A
7
MOV A,#01H CJNE A,B,L11 ;//将寄存器A中的值与1比较,保证只有第一次按下才有效// MOV 21H,A ;//26H中存储第一个反对按键的按下数// MOV 31H,#00H MOV A,31H INC A MOV 31H,A ;//对31H中的同意数加1// L11: JB P1.3,L12 ;//检测按键是否被按下// JNB P1.3,$ ;//等待按键弹起// JNB P2.1,L12 ;//判断对应的反对建是否被按下// LCALL DEL05S ;//调用延时程序// MOV 22H,#00H MOV A,22H ;//同L10注释,下同// INC A MOV B,A CJNE A,B,L12 MOV 22H,A MOV A,31H INC A MOV 31H,A L12: JB P1.2,L13 ;//同上// JNB P1.2,$ JNB P2.2,L13 LCALL DEL05S MOV 23H,#00H MOV A,23H INC A MOV B,A CJNE A,B,L13 MOV 23H,A MOV A,31H INC A MOV 31H,A L13: JB P1.1,L14 ;//同上// JNB P1.1,$ JNB P2.3,L14 LCALL DEL05S MOV 24H,#00H MOV A,24H
8
INC A MOV B,A CJNE A,B,L14 MOV A,31H INC A MOV 31H,A L14: JB P1.0,S0 ;//同上// JNB P1.0,$ JNB P2.4,S0 LCALL DEL05S MOV 25H,#00H MOV A,25H INC A MOV B,A CJNE A,B,S0 MOV 25H,A MOV 30H,A MOV A,31H INC A MOV 31H,A S0: JB P2.0,s1 ;//判断第一个反对建是否被按下// JNB P2.0,$ ;//等待按键弹起// JNB P1.4,s1 ;//判断对应的同意键是否被按下// LCALL DEL05S ;//调用延时程序// MOV 26H,#00H ;//将26H初始化// MOV A,26H ;//将值送入对应的存储空间// INC A;//寄存器A的内容加1// MOV B,A CJNE A,B,S1 ;//与1比较// MOV 26H,A MOV A,32H INC A ;//对寄存器A的内容加1// MOV 32H,A ;//将寄存器A的值赋值给32H// S1: JB P2.1,S2 ;//同上面的S0程序的注释// JNB P2.1,$ JNB P1.3,S2 LCALL DEL05S MOV 27H,#00H MOV A,27H
9
INC A
MOV B,A CJNE A,B,S2 MOV 27H,A MOV A,32H INC A
MOV 32H,A S2: JB P2.2,S3 ;//同上// JNB P2.2,$ JNB P1.2,S3
LCALL DEL05S MOV 28H,#00H MOV A,28H INC A
MOV B,A CJNE A,B,S3 MOV 28H,A MOV A,32H INC A
MOV 32H,A S3: JB P2.3,S4 ;//同上// JNB P2.3,$ JNB P1.1,S4
LCALL DEL05S MOV 29H,#00H MOV A,29H INC A
MOV B,A CJNE A,B,S4 MOV 29H,A MOV A,32H INC A
MOV 32H,A S4: JB P2.4,RT ;//同上// JNB P2.4,$ JNB P1.0,RT
LCALL DEL05S MOV 30H,#00H MOV A,30H
10