仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机秒表仿真文件要用proteus8.0以上的版本打开.
所有资料下载:
仿真代码.7z
(35.4 KB, 下载次数: 58)
- ORG 00H
- START:
- CLR P1.7 ;p1.7=0 关闭蜂鸣器
- MOV P0,#00H ;两位七段数码管显示“00”
- JB P3.5,[ DISCUZ_CODE_1 ]nbsp; ;如果按钮开关S1没有按下重复执行本行
- CALL FILTER ;如果检测S1被按下,调FILTER子程序,消除开关的抖动
- JNB P3.5,[ DISCUZ_CODE_1 ]nbsp; ;如果S1没有放开则等待,放开后执行下一行
- MOV A,#00H ;累加器A=0
- MOV R1,#50 ;计时50秒的计数器
- PRESS:
- MOV P0,A ;输出至P0,七段数码管显示
- MOV R5,#10 ;为延时1秒设定的寄存器初始值
- ADD_1:
- CALL DELAY ;调延时子程序
- DJNZ R5,ADD_1 ;循环10次完成1秒延时
- ADD A,#01H ;计时值加1
- DA A ;十进制调整
- DJNZ R1,PRESS ;判断是不是到50秒,如果没有就继续倒计时
- MOV R1,#6 ;声音提示计数器
- NOTICE:
- CPL P1.7 ;P1.7反相,蜂鸣器转换状态
- CALL DELAY ;调延时子程序
- DJNZ R1,NOTICE ;判断是否响了3次
- JMP START ;循环
- DELAY: ;本段延时0.1ms
- MOV R6,#200
- D1:
- MOV R7,#248
- DJNZ R7,$
- DJNZ R6,D1
- RET ;延时子程序返回主程序
- FILTER: ;按钮开关过滤抖动子程序
- MOV R6,#60
- F1: MOV R7,#248
- DJNZ R7,$
- DJNZ R6,F1
- RET ;过滤子程序返回主程序
- END ;程序结束点
复制代码
|