400-810-1218加入收藏夹|设为主页|广告服务|网币|登录|注册
当前位置:首页 >> 技术频道 >> 单片机开发

用单片机设计15s倒计时器

来源: 作者:佚名 发布时间:2009-10-29 10:22:05 发表评论

  *

  跳线设置:默认跳线位置,注意蜂鸣器选择跳线J5要选23端

  程序效果:利用单片机的定时/计数器设计一个15到0倒计时器,

  按S4后启动,要求精确显示到百分之一秒。

  发挥部分:

  1、定时结束后有提示音报警,并可重新定时

  2、定时过程中按独立键盘s5可暂停,按S4继续

  运行环境:51hei单片机学习板

  */

  ORG 0000H

  LJMP START //主程序必须避开地址000BH

  ORG 000BH //定时器0的中段服务程序,起始地址为000BH

  LJMP IT00

  ORG 0030H

  START: MOV TH0,#0EBH //装入初始值,定时时间为10ms

  MOV TL0,#64H

  MOV TMOD,#01H //工作方式1

  MOV 33H,#01 //显示初值为15s

  MOV 32H,#05

  MOV 31H,#00

  MOV 30H,#00

  SETB ET0 //打开定时0

  SETB EA //开总中断

  LOOP1: JB P3.6,LOOP //判断高低位,即按键KEY0是否按 下

  LCALL DISPLAY //为低,即按键按下,延时消抖

  LCALL DISPLAY

  JB P3.6,LOOP //按键真的按下,并不是外界的干扰

  SETB TR0 //启动定时器

  HERE: LCALL DISPLAY //调用显示

  JB P3.7,LOOP3 //判断高低,即KEY1按键是否按下

  CLR TR0 //按下,关闭定时器,这里并没有消抖

  LJMP LOOP1 //等待KEY0的按下

  LOOP3: SJMP HERE //KEY1没有按下,就需显示

  LOOP: LCALL DISPLAY //KEY1没有按下,就需显示

  LJMP LOOP1

  //减10ms子程序

  SUB1: DEC 30H //百分位减1

  MOV A,30H

  CJNE A,#0FFH,LOOP2 //判断百分位减到0之后是否 再减1

  MOV 30H,#09 //是,装入初值9

  DEC 31H //十分位减1

  MOV A,31H

  CJNE A,#0FFH,LOOP2 //判断百分位减到0之后是否 再减1

  MOV 31H,#09

  DEC 32H

  MOV A,32H

  CJNE A,#0FFH,LOOP2

  MOV 32H,#09

  DEC 33H

  MOV A,33H

  CJNE A,#0FFH,LOOP2

  clr P2.2 //从15s减到0s后,驱动蜂鸣器

  LCALL DELAY //延时

  LCALL DELAY

  SETB P2.2 //关闭蜂鸣器

  MOV 33H,#01 //装入初值15s

  MOV 32H,#05

  MOV 31H,#00

  MOV 30H,#00

  LOOP2: NOP //空指令

  RET //返回

  //显示子程序

  DISPLAY: MOV DPTR,#TAB //赋表首地址

  MOV A,#0FBH

  SETB P2.7

  MOV P0,A //亮最左边的数码管

  CLR P2.7

  XCH A,R0 //暂存A的值

  MOV A,33H

  MOVC A,@A+DPTR //根据表值查找所需的值

  SETB P2.6

  MOV P0,A //显示值

  CLR P2.6

  LCALL DELAY //延时

  XCH A,R0 //恢复原值

  RL A //循环左移,为下次做准备

  SETB P2.7

  MOV P0,A

  CLR P2.7

  XCH A,R0

  MOV A,32H

  MOVC A,@A+DPTR

  SETB P2.6

  MOV P0,A

  CLR P2.6

  LCALL DELAY

  XCH A,R0

  RL A

  SETB P2.7

  MOV P0,A

  clr P2.7

  XCH A,R0

  MOV A,31H

  MOVC A,@A+DPTR

  SETB P2.6

  MOV P0,A

  clr P2.6

  LCALL DELAY

  XCH A,R0

  RL A

  SETB P2.7

  MOV P0,A

  clr P2.7

  XCH A,R0

  MOV A,30H

  MOVC A,@A+DPTR

  SETB P2.6

  MOV P0,A

  clr P2.6

  LCALL DELAY

  RET

  TAB: DB 3FH,06H,5BH,4FH,66H ;数码管显示的数值

  DB 6DH,7DH,07H,7FH,6FH

  IT00: MOV TH0,#0EBH //装入初值,时间为10ms

  MOV TL0,#64H

  LCALL SUB1 //减10ms

  RETI //返回

  DELAY: MOV R7,#04 //延时子程序,时间大约为:2us*4*250

  DEL2: MOV R6,#250

  DEL1: DJNZ R6,DEL1

  DJNZ R7,DEL2

  RET

  END //结束


0
顶一下
0
踩一下

发表评论

请自觉遵守互联网相关政策法规,作者管理后台可以删除恶意评论、广告和违禁词语。