⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 秒表的程序
💻 TXT
字号:
秒表的设计程序
用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。
三、程序代码:
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
TEMP  EQU 22H ;计数器数值存放内存位置 
;开机初始化
      MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
      MOV P0,#0FFH;使显示时间数码管熄灭
      CLR F0
CLR F1
MOV DPTR,#NUMTAB ;指定查表启始地址
;等待按键输入
;根据按键的输入判断执行什么功能
;按键1按下则执行功能1
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
        MOV P0,#0FFH;使显示时间数码管熄灭
START:JB P3.6,START1;循环判断开始按钮K1是否按下?
      ACALL DELAY10;延时10毫秒触点消抖
      JB P3.6,START;如果是干扰就返回
      JNB P3.6,$;等待按键松开
      LJMP GN1      
;按键2按下则执行功能2
START1: JB P3.7,START;循环判断开始按钮K2是否按下?  
        ACALL DELAY10;延时10毫秒触点消抖
        JB P3.7,START1;如果是干扰就返回
        JNB P3.7,$
        LJMP GN2
;数码管显示秒表时间的程序
GN1:    ;先初始化
    S1:MOV A,#0
        MOV TEMP,A  
GOON1:  MOV R2,#2
JS1:     MOV R3,#250
TIME1:  MOV A,TEMP ;将TEMP中的十六进制数转换成10进制 
        MOV B,#10 ;10进制/10=10进制
        DIV AB
        MOV B_BIT,A ;十位在A
        MOV A_BIT,B ;个位在B
       LCALL DPLOP1
        ;插入一段判断定时过程中是否有按键输入的程序段
C1:     JB P3.6,B1
        ACALL DELAY10;延时10毫秒消抖
        JB P3.6,C1
        JNB P3.6,$;等待按键松开
        CPL F0
ZT1:   ; MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
        JB P3.6,$;循环判断开始按钮K1是否按下?
        ACALL DELAY10;延时10毫秒触点消抖
        JB P3.6,ZT1;如果是干扰就返回
        JNB P3.6,$;等待按键松开
        LCALL DPLOP1
              
B1:     JB P3.7,LOOP1
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVER
LOOP1:   DJNZ R3,TIME1 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS1       ;循环执行2次,时间为1 秒钟
INC TEMP;满一秒钟对时间加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判断TEMP的数值是否为60?不为60循环 
ACALL OVER
RET

GN2:     MOV A,#14H ; 设定倒计时的时间20S
         MOV TEMP,A
;数码管显示倒计时时间的程序
  ;初始化
        MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
        MOV P0,#14H;使显示时间为设定的倒计时时间
GOON2:  MOV R2,#2
JS2:      MOV R3,#250
TIME2:   MOV A,TEMP ;将TEMP中的十六进制数转换成10进制 
         MOV B,#10 ;10进制/10=10进制
         DIV AB
         MOV B_BIT,A ;十位在A
         MOV A_BIT,B ;个位在B
        MOV DPTR,#NUMTAB ;指定查表启始地址
DPLOP2: MOV A,A_BIT ;取个位数
        MOVC A,@A+DPTR ;查个位数的7段代码
        MOV P0,A ;送出个位的7段代码
         
        CLR P2.5 ;开个位显示
        ACALL   DELY1;显示1毫秒
        SETB P2.5;关闭个位显示,防止鬼影
        MOV A,B_BIT ;取十位数
        MOVC A,@A+DPTR ;查十位数的7段代码                                        
        MOV P0,A ;送出十位的7段代码                                                                                                                                                              
        CLR P2.6 ;开十位显示
        ACALL DELY1;显示1毫秒
        SETB P2.6;关闭十位显示,防止鬼影
        ;插入一段判断定时过程中是否有按键输入的程序段
C2:     JB P3.6,B2
        ACALL DELAY10;延时10毫秒消抖
        JB P3.6,C2
        JNB P3.6,$;等待按键松开
        
ZT2:    MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
        JB P3.6,$;循环判断开始按钮K1是否按下?
        ACALL DELAY10;延时10毫秒触点消抖
        JB P3.6,ZT2;如果是干扰就返回
        JNB P3.6,$;等待按键松开
              
B2:     JB P3.7,LOOP2
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVER
LOOP2:   DJNZ R3,TIME2 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS2      ;循环执行2次,时间为1 秒钟
DEC TEMP;满一秒钟对时间减1
MOV A,TEMP
JNZ GOON2;判断TEMP的数值是否为0?不为0循环 
ACALL OVER
RET
        
;结束定时
OVER:  AJMP START;退到开机初始化状态
;1毫秒延时子程序
DELY1:  MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
;10毫秒延时子程序
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
;实验板上的两位一体的数码管0~9各数字的显示代码
NUMTAB:  DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1:  MOV A,A_BIT ;取个位数
        MOVC A,@A+DPTR ;查个位数的7段代码
        MOV P0,A ;送出个位的7段代码
        
        CLR P2.5 ;开个位显示
        ACALL   DELY1;显示1毫秒
        SETB P2.5;关闭个位显示,防止鬼影
        MOV A,B_BIT ;取十位数
        MOVC A,@A+DPTR ;查十位数的7段代码
        MOV P0,A ;送出十位的7段代码
        CLR P2.6 ;开十位显示
        ACALL DELY1;显示1毫秒
        SETB P2.6;关闭十位显示,防止鬼影
RET
END



单片机课程设计_秒表的设计程序
秒表的设计程序用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,
具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),
并启动倒计时功能。能用按键选择以上两功能之一。
三、程序代码:
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
TEMP EQU 22H ;计数器数值存放内存位置
;开机初始化
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#0FFH;使显示时间数码管熄灭
CLR F0
CLR F1
MOV DPTR,#NUMTAB ;指定查表启始地址
;等待按键输入
;根据按键的输入判断执行什么功能
;按键1按下则执行功能1
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#0FFH;使显示时间数码管熄灭
START:JB P3.6,START1;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,START;如果是干扰就返回
JNB P3.6,$;等待按键松开
LJMP GN1
;按键2按下则执行功能2
START1: JB P3.7,START;循环判断开始按钮K2是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.7,START1;如果是干扰就返回
JNB P3.7,$
LJMP GN2
;数码管显示秒表时间的程序
GN1:    ;先初始化
S1:MOV A,#0
MOV TEMP,A
GOON1:  MOV R2,#2
JS1:     MOV R3,#250
TIME1:  MOV A,TEMP ;将TEMP中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;个位在B
LCALL DPLOP1
;插入一段判断定时过程中是否有按键输入的程序段
C1:     JB P3.6,B1
ACALL DELAY10;延时10毫秒消抖
JB P3.6,C1
JNB P3.6,$;等待按键松开
CPL F0
ZT1:   ; MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
JB P3.6,$;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,ZT1;如果是干扰就返回
JNB P3.6,$;等待按键松开
LCALL DPLOP1
 
B1:     JB P3.7,LOOP1
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVER
LOOP1:   DJNZ R3,TIME1 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS1       ;循环执行2次,时间为1 秒钟
INC TEMP;满一秒钟对时间加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判断TEMP的数值是否为60?不为60循环
ACALL OVER
RET
 
GN2:     MOV A,#14H ; 设定倒计时的时间20S
MOV TEMP,A
;数码管显示倒计时时间的程序
;初始化
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#14H;使显示时间为设定的倒计时时间
GOON2:  MOV R2,#2
JS2:      MOV R3,#250
TIME2:   MOV A,TEMP ;将TEMP中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;个位在B
MOV DPTR,#NUMTAB ;指定查表启始地址
DPLOP2: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
 
CLR P2.5 ;开个位显示
ACALL   DELY1;显示1毫秒
SETB P2.5;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
ACALL DELY1;显示1毫秒
SETB P2.6;关闭十位显示,防止鬼影
;插入一段判断定时过程中是否有按键输入的程序段
C2:     JB P3.6,B2
ACALL DELAY10;延时10毫秒消抖
JB P3.6,C2
JNB P3.6,$;等待按键松开
 
ZT2:    MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
JB P3.6,$;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,ZT2;如果是干扰就返回
JNB P3.6,$;等待按键松开
 
B2:     JB P3.7,LOOP2
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVER
LOOP2:   DJNZ R3,TIME2 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS2      ;循环执行2次,时间为1 秒钟
DEC TEMP;满一秒钟对时间减1
MOV A,TEMP
JNZ GOON2;判断TEMP的数值是否为0?不为0循环
ACALL OVER
RET
 
;结束定时
OVER:  AJMP START;退到开机初始化状态
;1毫秒延时子程序
DELY1:  MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
;10毫秒延时子程序
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET
;实验板上的两位一体的数码管0~9各数字的显示代码
NUMTAB:  DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1:  MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
 
CLR P2.5 ;开个位显示
ACALL   DELY1;显示1毫秒
SETB P2.5;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
ACALL DELY1;显示1毫秒
SETB P2.6;关闭十位显示,防止鬼影
RET
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -