51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 课题设计文章 > 详细内容
51单片机电子秒表设计报告
发布时间:2009/6/4  阅读次数:1250  字体大小: 【】 【】【

作者:未知   来源:网络

电子秒表设计报告
  
设计要求:
       用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。
  
实现原理:
       利用12M晶振的一个机器周期为1微秒,通过循环产生1秒时间延迟,扫描单片机中所存放的时间的值(可正记时,也可倒计时),并通过输出显示在数码管上。
  
电路图:

       p0.0—p0.7对应了两个接数码管的A,B,C,D,E,F,G和小数点位,p2.6接显示个位数的数码管的3、8引角,p2.7则接十位数的。p3.6、p3.7分别接按键。
  
流程框图:
  

程序代码:
a_bit equ 20h ;数码管个位数存放内存位置
b_bit equ 21h ;数码管十位数存放内存位置
temp   equ 22h ;计数器数值存放内存位置
  
;开机初始化
           MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
           MOV P0,#0FFH;使显示时间数码管熄灭
  
;等待按键输入
;根据按键的输入判断执行什么功能
  
;按键1按下则执行功能1
  
START:JB P3.6,$;循环判断开始按钮K1是否按下?
           ACALL DELAY10;延时10毫秒触点消抖
           JB P3.6,START1;如果是干扰就返回
           JNB P3.6,$;等待按键松开
           ljmp gn1          
;
按键2按下则执行功能2
  
start1: jb p3.7,$;循环判断开始按钮K2是否按下?  
               ACALL DELAY10;延时10毫秒触点消抖
               JB P3.7,START;如果是干扰就返回
               jnb p3.7,$
               ljmp gn2
  
;数码管显示秒表时间的程序
gn1:       ;先初始化
               MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
               MOV P0,#0FFH;使显示时间数码管熄灭
  
               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
  
               mov dptr,#numtab ;指定查表启始地址
               mov r0,#4
dpl1:     mov r1,#250 ;
dplop1:   mov a,a_bit ;取个位数
               MOVC A,@A+DPTR ;查个位数的7段代码
               mov p0,a ;送出个位的7段代码
                 mov p0,a ;送出个位的7段代码
               clr p2.7 ;开个位显示
               ACALL     DELY1;显示1毫秒
               setb p2.7;关闭个位显示,防止鬼影
               mov a,b_bit ;取十位数
               MOVC A,@A+DPTR ;查十位数的7段代码
               mov p0,a ;送出十位的7段代码
               clr p2.6 ;开十位显示
               ACALL DELY1;显示1毫秒
               setb p2.6;关闭十位显示,防止鬼影
  
               ;插入一段判断定时过程中是否有按键输入的程序段
C1:         JB P3.6,B1
               ACALL DELAY10;延时10毫秒消抖
               JB P3.6,C1
               JNB P3.6,$;等待按键松开
              
zt1:       MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
               jb p3.6,$;循环判断开始按钮K1是否按下?
               ACALL DELAY10;延时10毫秒触点消抖
               JB P3.6,zt1;如果是干扰就返回
               JNB P3.6,$;等待按键松开
                          
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 ;指定查表启始地址
               mov r0,#4
dpl2:     mov r1,#250 ;
dplop2:   mov a,a_bit ;取个位数
               MOVC A,@A+DPTR ;查个位数的7段代码
               mov p0,a ;送出个位的7段代码
                 mov p0,a ;送出个位的7段代码
               clr p2.7 ;开个位显示
               ACALL     DELY1;显示1毫秒
               setb p2.7;关闭个位显示,防止鬼影
               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 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H
  
end
  
  
敬告:本站论文载自网络,本站不予评论和纠错!所以内容读者自行论证!更多设计论文陆续添加中...
                       >>发表评论
  
  
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号