找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3428|回复: 2
打印 上一主题 下一主题
收起左侧

单片机闹钟闹铃设计 Proteus仿真+PPT+汇编语言程序

[复制链接]
跳转到指定楼层
楼主
单片机学习资料,如何设置一个闹钟
1. 能显示时时-分分-秒秒;
2. 能够设定定时时间、修改定时时间;
3. 定时时间到能发出报警声。

PPT内容预览:



单片机汇编语言源程序如下:
  1. ORG 0000H
  2. LJMP MAIN
  3. ORG 000BH
  4. LJMP TIME
  5. ORG 0100H
  6. MAIN:
  7. MOV SP,#50H
  8. MOV 20H,#00H         //暂存秒、分、时数字
  9. MOV 21H,#00H
  10. MOV 22H,#00H
  11. MOV 23H,#01H
  12. MOV 24H,#01H
  13. MOV 25H,#00H                                                                        
  14. MOV 30H,#00H  //以下至35H 为当前显示秒钟分钟时钟
  15. MOV 31H,#00H
  16. MOV 32H,#00H
  17. MOV 33H,#00H
  18. MOV 34H,#00H
  19. MOV 35H,#00H
  20. MOV 36H,#01H  //以下至39H 为设定的分钟时钟时间
  21. MOV 37H,#00H
  22. MOV 38H,#01H
  23. MOV 39H,#00H
  24. MOV TMOD,#01H                  //16位计数器
  25. MOV TH0,#3CH                  //计数初值=15536 定时50000微秒=0.05秒
  26. MOV TL0,#0B0H
  27. MOV IE,#87H
  28. SETB TR0                        //启动计数 定时0.5秒后中断跳转 TIME
  29. MOV R2,#14H                //20
  30. MOV P2,#0FFH        //P2口写一
  31. LOOP:
  32.   LCALL TIMEPRO //看当前是否到达设定时间
  33.   LCALL DISPLAY1
  34.   JB P1.1,M1  //设定时间按钮是否按下,未被按下查询下一个键
  35.   MOV R1, #23H           //存储按下状态
  36.   LCALL SETTIME           //跳转至设定当前时间程序
  37.   LJMP LOOP
  38. M1:
  39.   JB P1.2,M2//确认是否进入设定定时时间,未被按下查询下一个键
  40.   MOV R1,#24H          //存储按下状态
  41.   LCALL SETATIME  //跳转至设定定时时间程序
  42.   LJMP LOOP
  43. M2:
  44.   JB P1.5,M4 //确认是否返回  未被按下跳转M4返回
  45. M4:
  46.   LJMP LOOP        //功能键全都未被按下 返回loop继续查询
  47. DELAY: MOV R4,#030H                //延时
  48. DL00:MOV R5,#0FFH
  49. DL11:MOV R6,#9H
  50. DL12:
  51.   DJNZ R6,DL12
  52.   DJNZ R5,DL11
  53.   DJNZ R4,DL00
  54.   RET
  55. SETTIME:
  56. L0:LCALL DISPLAY1  //显示当前时间
  57. MM1:
  58.   JB P1.3,L1 //查看小时+1按钮是否按下 未按下查询下一个键
  59.   MOV C,P1.3        
  60.   JC MM1         //防抖动
  61.   LCALL DELAY1 //延时
  62.   JC MM1 //cy=1跳转 P1.2没被按下跳转
  63. MSTOP1:  //确认p1.3按键松开,按一次键只执行一次
  64.   MOV C,P1.3
  65.   JNC MSTOP1 //未松开按键则死循环 松开跳出
  66.   LCALL DELAY1
  67.   MOV C,P1.3
  68.   JNC MSTOP1//防抖动
  69.   CJNE R1,#23H,NEXT         //区分设定当前时间状态与设定定时状态
  70. L3:
  71.   INC 22H //小时+1
  72.   MOV A,22H //A =1
  73.   CJNE A,#18H,GO12 //A不等于18H(24)则跳转(防溢出)
  74.   MOV 22H,#00H //清零(24H清零)
  75.   MOV 34H,#00H
  76.   MOV 35H,#00H
  77.   LJMP L0 //显示当前时间
  78.   NEXT: LJMP L4
  79. L1:
  80.   JB P1.4,L2 //查询分钟+1按钮是否按下,未按下查询下一个键
  81.   MOV C,P1.4
  82.   JC L1        // 防抖动
  83.   LCALL DELAY1
  84.   JC L1//  直到P1.4按下跳出死循环
  85. MSTOP2:  //确认P1.4松开,按一次键只执行一次加一程序
  86.   MOV C,P1.4 //读取目前按键状态
  87.   JNC MSTOP2 //P1.4未松开进入死循环,松开后跳出
  88.   LCALL DELAY1
  89.   MOV C,P1.4
  90.   JNC MSTOP2//
  91.   CJNE R1,#23H,NEXT1 //判断是否在设定当前时间状态下
  92.   L5:
  93.   INC 21H //分钟+1
  94.   MOV A,21H        
  95.   CJNE A,#3CH,GO11 //分钟不等于60跳转,防溢出
  96.   MOV 21H,#00H        //分钟到达60复位清零
  97.   MOV 32H,#00H
  98.   MOV 33H,#00H
  99.   LJMP L0          //显示当前时间
  100.   NEXT2:CJNE R1,#24H,L0
  101.   LJMP SETATIME
  102.   L2:
  103.   JB P1.5,NEXT2 //查看P1.5是否按下
  104.   MOV C,P1.5
  105.   JC L2 //再次查询
  106.   LCALL DELAY1
  107.   MOV C,P1.5
  108.   JC L2// 防抖动 直到P1.4按下跳出循环
  109. STOP1:        //确认P1.5松开
  110.   MOV C,P1.5
  111.   JNC STOP1// P1.5按下跳转 直到松开
  112.   LCALL DELAY1
  113.   MOV C,P1.5//防抖动
  114.   JNC STOP1
  115.   MOV R1,#00H  //清零按键状态存储
  116.   LJMP LOOP//返回
  117.   NEXT1: LJMP L6
  118. GO11:                //分钟显示预备程序
  119.   MOV B,#0AH  //B=10
  120.   DIV AB         
  121.   MOV 32H,B //放余数        分钟第二位
  122.   MOV 33H,A //放商         分钟第一位
  123.   LJMP L0 //显示
  124. GO12:                   //小时显示预备程序
  125.   MOV B,#0AH //B=10
  126.   DIV AB        
  127.   MOV 34H,B //余数        小时数第二位
  128.   MOV 35H,A //商  小时数第一位
  129.   LJMP L0        //显示
  130. SETATIME:LCALL DISPLAY2 //显示设定时间
  131. N0:LCALL DISPLAY2 //同上
  132. LJMP MM1   //查询按键状态
  133. L4:
  134.   INC 24H        //小时+1
  135.   MOV A,24H        //
  136.   CJNE A,#24,GO22 //如果A不等于24 跳转GO22防溢出
  137.   MOV 24H,#00H        //A=24 小时溢出 复位
  138.   MOV 38H,#00H
  139.   MOV 39H,#00H
  140.   LJMP N0  //跳转显示
  141. L6:
  142.   INC 23H //分钟+1
  143.   MOV A,23H        
  144.   CJNE A,#60,GO21 //不等于60跳转,防溢出
  145.   MOV 23H,#00H        //复位
  146.   MOV 36H,#00H
  147.   MOV 37H,#00H
  148.   LJMP N0  //跳转显示
  149. GO21: //分钟显示预备程序
  150.   MOV B,#0AH //B=10
  151.   DIV AB //
  152.   MOV 36H,B        // 设定的分钟第二位
  153.   MOV 37H,A        // 设定的分钟第一位
  154.   LJMP N0  //跳转显示
  155. GO22:         //小时显示预备程序
  156.   MOV B,#0AH
  157.   DIV AB
  158.   MOV 38H,B        //设定的小时第二位
  159.   MOV 39H,A        //设定的小时第一位
  160.   LJMP N0        //跳转显示
  161. TIMEPRO:         //判断是否到达当前设定时间
  162.   MOV A,21H
  163.   MOV B,23H
  164.   CJNE A,B,BK        // 查询分钟是否相等 A B不相等跳转至BK
  165.   MOV A,22H         
  166.   MOV B,24H        
  167.   CJNE A,B,BK //小时不相等  跳转至BK
  168.   SETB 25H.0  
  169.   MOV C,25H.0  
  170.   JC XX        //跳转至XX 时分相等 到达设定时间
  171. XX:
  172.   LCALL TIMEOUT        //跳转闹铃程序
  173. BK:
  174.   RET
  175. TIMEOUT:
  176. X1:
  177.   LCALL BZ //  跳转喇叭程序
  178.   LCALL DISPLAY2   //显示设定时间
  179.   CLR 25H.0         //复位
  180.   JB P1.5,X1 //查询P1.5状态 按下跳转                                                                                                   
  181.   LCALL DELAY
  182.   MOV 23H,#00H
  183.   MOV 24H,#00H
  184.   CLR 25H.0        
  185.   LJMP LOOP          //显示当前时间
  186. BZ:
  187.   CLR P3.7 // 喇叭程序 清零P3.7
  188.   MOV R7,#10  //延时
  189. T2:
  190.   MOV R6,#64H
  191. T3:
  192.   DJNZ R6,T3
  193.   DJNZ R7,T2
  194.   SETB P3.7        //延时一段时间后取反
  195.   RET //返回X1
  196. DELAY1:MOV R4,#14H          //防抖动专用延时
  197. DL001:MOV R5,#0FFH
  198. DL111:DJNZ R5,DL111
  199. DJNZ R4,DL001
  200. RET   
  201. TIME: //时间运行程序,定时器定时0.05秒后产生中断
  202.   PUSH ACC
  203.   PUSH PSW        //现场保护
  204.   MOV TH0,#3CH
  205.   MOV TL0,#0B0H         //重装初值
  206.   DJNZ R2,RET0        //R2减一不为0跳转至RET0 R2=20 循环20次后以后已定时1秒
  207.   MOV R2,#14H        //重装循环值
  208.   MOV A,20H         //秒钟存储单元
  209.   CLR C         //清零CY
  210.   INC A //秒钟自动加一
  211.   CJNE A,#3CH,GO1 //秒钟A不等于60 跳转GO1 防溢出
  212.   MOV 20H,#0 //复位
  213.   MOV 30H,#0
  214.   MOV 31H,#0
  215.   MOV A,21H        //当前时间分钟存储单元
  216.   INC A         //定时60秒后分钟+1
  217.   CJNE A,#3CH,GO2        //分钟A不等于60跳转
  218.   MOV 21H,#0H          //复位
  219.   MOV 32H,#0
  220.   MOV 33H,#0
  221.   MOV A,22H          //设定小时时间(当前)
  222.   INC A         //定时60min后小时自动加一
  223.   CJNE A,#18H,GO3 //小时A不等于24跳转
  224.   MOV 22H,#00H //复位
  225.   MOV 34H,#0
  226.   MOV 35H,#0
  227.   AJMP RET0         //出栈返回
  228. GO1:   //GO123均为显示预备程序
  229.   MOV 20H,A         //当前秒钟
  230.   MOV B,#0AH
  231.   DIV AB
  232.   MOV 31H,A         //秒钟第一位
  233.   MOV 30H,B         //秒钟第二位
  234.   AJMP RET0
  235. GO2:
  236.   MOV 21H,A         //当前分钟
  237.   MOV B,#0AH
  238.   DIV AB
  239.   MOV 33H,A          //分钟第一位
  240.   MOV 32H,B          //分钟第二位
  241.   AJMP RET0
  242. GO3:
  243.   MOV 22H,A           //当前小时
  244.   MOV B,#0AH
  245.   DIV AB
  246.   MOV 35H,A           //小时第一位
  247.   MOV 34H,B          //小时第二位
  248.   AJMP RET0
  249. RET0:
  250.   POP PSW  //出栈
  251.   POP ACC
  252.   RETI        //中断返回
  253. DISPLAY1:        //显示当前时间
  254.   MOV R0,#30H //
  255.   MOV R3,#0FEH //数码管选择码
  256.   MOV A,R3 //
  257. PLAY1:
  258.   MOV P2,A                //数码管选通 写P2
  259. MOV A,@R0  //秒钟第二位存储单元
  260. MOV DPTR,#DSEG1        //表首地址送DPTR
  261. MOVC A,@A+DPTR         //查表=查对应数字的数码管显示码送对应选通数码管
  262. MOV P0,A   //输出显示
  263. LCALL DL1 //延时
  264. MOV P2,#0FFH //读P2先写一
  265. MOV A,R3
  266. RL A  //向左循环选择数码管
  267. JNB ACC.6,LD1  //循环6次 跳转至LD1返回
  268. INC R0 //30——35以此为秒分时的二位、一位、轮流显示
  269. MOV R3,A
  270. LJMP PLAY1
  271. ……………………

  272. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
仿真ppt程序.7z (7.65 MB, 下载次数: 105)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:765657 发表于 2020-8-23 14:31 | 只看该作者
请问这个里面是没有proteus文件的吗?
回复

使用道具 举报

板凳
ID:765657 发表于 2020-8-25 23:27 | 只看该作者
请问这个如果是用八位LED数码管汇编还能用吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表