找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用单片机汇编语言写的数字钟 按键调节时分秒不能用 求帮助

[复制链接]
跳转到指定楼层
楼主
可以通过按键调节时分秒,用8255扩展了IO口,并且扩展了RAM和ROM各8KB


单片机源程序如下:
  1.                 ORG 0000H
  2.                 AJMP MAIN
  3.                 ORG 000BH
  4.                 LJMP INTT0
  5.                 ORG 0100H
  6. ;/**********主程序***********/
  7. MAIN:
  8.                 MOV SP,#60H ;确立堆栈区
  9.                 MOV PSW,#00H
  10.                 MOV R0,#20H   ;RAM区首地址
  11.                 MOV R7,#5FH ;RAM区单元个数
  12. QL:
  13.                 MOV @R0,#00H ;RAM清零        
  14.                 INC R0
  15.                 DJNZ R7,QL

  16.                 MOV IP,#02H ;IP初始化,优先定时器0
  17.                 MOV IE,#82H ;IE初始化
  18.                 MOV TMOD,#01H ;定时器0方式1工作
  19.                 LCALL PP ;调P.子程序
  20. NEXT:
  21.                 LCALL KEY ;按键检测子程序
  22.                 JB ACC.0,RUNF ;A键按下运行
  23.                 LCALL DISP ;调用显示子程序
  24.                 SJMP NEXT
  25. RUNF:
  26.                 LCALL OUTT ;调传送子程序
  27.                 LCALL TIME ;开电子钟
  28. JK:
  29.                 LCALL DISP
  30.                 LCALL KEY
  31.                 JZ JK
  32.                 LCALL ANKEY        ;调用键功能子程序
  33.                 LCALL DISP
  34.                 SJMP JK
  35. ;/***P点显示的8LED段码初始化子程序***/
  36. PP:
  37.                 MOV 37H,#12 ;P点编码送寄存器,对应最左LED  (共阳极,0CH )
  38.                 MOV R0,#30H ;第8个LED,最右LED,段码存储的地址
  39.                 MOV R7,#07H         ;第8到第2个LED,共7个,初始化段码显示空白
  40. PPP:
  41.                 MOV @R0,#10  ;显示空白
  42.                 INC R0
  43.                 DJNZ R7,PPP
  44.                 RET
  45. ;/*********键扫描子程序***********/
  46. KEY:
  47.                 LCALL KEYS ;调用键值处理子程序
  48.                 JZ EXIT ;没有键按下转到返回
  49.                 LCALL DISP
  50.                 LCALL DISP ;调用显示去抖动
  51.                 LCALL KEYS
  52.                 JZ EXIT
  53.                 MOV B,20H ;保存键值
  54. KEYSF:
  55.                 LCALL KEYS
  56.                 JZ KEYY ;键释放,转到恢复键值
  57.                 LCALL DISP ;调显示子程序延时
  58.                 AJMP KEYSF ;等到键释放
  59. KEYY:
  60.                 MOV A,B ;键值送A
  61. EXIT:        RET
  62. KEYS:
  63.                 ;MOV P1,#0FFH ;先向P1口写1
  64.                 ;MOV A,P1 ;P1口值送A         (有按键按下,对应0,取反后1)
  65.                 ;CPL A
  66.                 ;ANL A,#0FH ;保存P1口的低4位
  67.                 ;MOV 20H,A ;A值送20H保存
  68.                 ;RET
  69.                                 ;MOV A,#82H
  70.                                 ;MOV DPTR,#0003H
  71.                                 ;MOVX @DPTR,A
  72.                                 ;MOV DPTR,#0001H
  73.                                 ;MOVX A,@DPTR
  74.                                 ;CPL A
  75.                                 ;ANL A,#0FH
  76.                                 ;MOV 20H,A
  77.                                 ;RET
  78.                 CLR A
  79.                 MOV A,P3
  80.                 CPL A
  81.                 ANL A,#0FH
  82.                 MOV 20H,A
  83.                 RET
  84. ;/********键功能子程序********/
  85. ANKEY:
  86.                 CLR EA ;关中断
  87. CHECK:
  88.                 JB TR0,YXZ ;判断是否运行
  89. K0:
  90.                 CJNE A,#01H,K1
  91.                 AJMP RUN ;A键按下,恢复运行,转运行
  92. K1:
  93.                 CJNE A,#02H,K2
  94.                 AJMP KEY1 ;转时调整
  95. K2:
  96.                 CJNE A,#04H,K3
  97.                 AJMP KEY2 ;转分调整
  98. K3:
  99.                 CJNE A,#08H,OUT          ;转
  100.                 AJMP KEY3 ;转秒调整
  101. YXZ:
  102.                 JB ACC.0,STOP        ;A键按下,暂停
  103.                 AJMP OUT
  104. KEY1:
  105.                 MOV R0,#45H ;时调整
  106.                 LCALL ADD1 ;调加一子程序
  107.                 CLR C
  108.                 CJNE A,#24H,OUTT ;转传送显示数据子程序
  109.                 ACALL CLR0 ;调时间清理子程序
  110.                 AJMP OUTT
  111. KEY2:
  112.                 MOV R0,#43H ;分调整
  113.                 LCALL ADD1
  114.                 CLR C
  115.                 CJNE A,#60H,OUTT
  116.                 ACALL CLR0
  117.                 AJMP OUTT
  118. KEY3:
  119.                 MOV R0,#41H ;秒调整
  120.                 ACALL ADD1
  121.                 CLR C
  122.                 CJNE A,#60H,OUTT
  123.                 ACALL CLR0
  124. ;/*****传送显示数据子程序*****/
  125. OUTT:
  126.                 MOV 30H,40H ;秒显示单元40H-41H
  127.                 MOV 31H,41H
  128.                 MOV 32H,#11 ;"-"
  129.                 MOV 33H,42H ;分显示单元42H-43H
  130.                 MOV 34H,43H
  131.                 MOV 35H,#11 ;"-"
  132.                 MOV 36H,44H ;时显示单元44H-45H               
  133.                 MOV 37H,45H
  134.                 RET
  135. STOP:
  136.                 CLR TR0
  137.                 RET
  138. RUN:
  139.                 LCALL TIME ;调运行电子钟子程序
  140. OUT:
  141.                 SETB EA ;无键按下或完成功能跳出
  142.                 RET
  143. ;/*****运行电子钟子程序*****/                                                                        
  144. TIME:
  145.                 SETB EA
  146.                 MOV TL0,#0B0H  ;3CB0H
  147.                 MOV TH0,#3CH
  148.                 MOV R4,#20  ;50ms,20次循环
  149.                 SETB TR0 ;启动定时器0
  150.                 RET
  151. ;/******定时器0中断处理子程序******/
  152. INTT0:
  153.                 PUSH ACC
  154.                 PUSH PSW
  155.                 CLR ET0
  156.                 CLR TR0                                                                        
  157.                 MOV TL0,#0B0H  ;重新设置定时初值
  158.                 MOV TH0,#3CH
  159.                 SETB TR0
  160.                 DJNZ R4,OUTT0  ;r4-1 != 0 1秒未到,转OUTTO
  161. ADDSS:
  162.                 MOV R4,#14H  ;20次计数
  163.                 MOV R0,#41H  ;秒十位
  164.                 ACALL ADD1
  165.                 CLR C
  166.                 CJNE A,#60H,ADDMM ;1分到
  167. ADDMM:
  168.                 JC OUTT0         ;1分,60秒未到
  169.                 ACALL CLR0         ;1分到,清零
  170.                 MOV R0,#43H         ;分十位
  171.                 ACALL ADD1
  172.                 CLR C
  173.                 CJNE A,#60H,ADDHH ;1小时到
  174. ADDHH:
  175.                 JC OUTT0
  176.                 ACALL CLR0
  177.                 MOV R0,#45H          ;时十位
  178.                 ACALL ADD1
  179.                 CLR C
  180.                 CJNE A,#24H,HOUR ;1天到
  181. HOUR:
  182.                 JC OUTT0
  183.                 ACALL CLR0
  184. OUTT0:
  185.                 MOV 30H,40H ;秒显示单元40H-41H
  186.                 MOV 31H,41H
  187.                 MOV 32H,#11 ;"-"
  188.                 MOV 33H,42H ;分显示单元42H-43H
  189.                 MOV 34H,43H
  190.                 MOV 35H,#11 ;"-"
  191.                 MOV 36H,44H ;时显示单元44H-45H               
  192.                 MOV 37H,45H
  193.                 POP PSW
  194.                 POP ACC
  195.                 SETB ET0
  196.                 RETI
  197. ;/*****时间清理子程序*****/
  198. CLR0:
  199.                 CLR A
  200.                 MOV @R0,A
  201.                 DEC R0
  202.                 MOV @R0,A
  203.                 RET
  204. ;/*****加一子程序*****/
  205. ADD1:
  206.                 MOV A ,@R0  ;取十位
  207.                 DEC R0
  208.                 SWAP A
  209.                 ORL A,@R0  ;组合十位与个位           
  210.                 ADD A,#01H  ;加1
  211.                 DA A ;十进制调整
  212.                 MOV R3,A  ;暂存
  213.                 ANL A,#0FH  ;屏蔽十位
  214.                 MOV @R0,A  ;放入个位单元
  215.                 MOV A,R3  ;取值
  216.                 INC R0
  217.                 SWAP A
  218.                 ANL A,#0FH  ;屏蔽个位
  219.                 MOV @R0,A  ;放入十位单元
  220.                 MOV A,R3  ;数值放入A中等待判断
  221.                 RET
  222. ;/*****显示子程序*****/
  223. ……………………

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

所有资料51hei提供下载:
汇编语言数字钟.zip (64.58 KB, 下载次数: 4)


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

使用道具 举报

沙发
ID:872319 发表于 2021-1-2 20:45 | 只看该作者
你代码呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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