搜索
bottom↓
回复: 9

我在用51做一个数字时钟,显示时老是串着显示(已解决)

[复制链接]

出0入0汤圆

发表于 2014-12-17 16:52:43 | 显示全部楼层 |阅读模式
本帖最后由 thy110 于 2014-12-17 18:14 编辑

我在用51做一个数字时钟,显示时老是串着显示,
我单独测试时,每个位都正常显示的是正确的时间,
但是一起显示时,显示很混乱,仔细观察了一下,秒钟个位同时在秒钟的十位和个位显示,秒钟的十位同时在秒钟的十位和分钟的个位显示,分钟的个位在分钟的各位和十位显示,造成了显示重叠了。但是我的程序逻辑上不应该这样啊
不知道怎么回事啊,求助
  1. BUF_HOUR_H        DATA        30H                ; 小时十位
  2. BUF_HOUR_L        DATA        31H        ; 小时个位
  3. BUF_MIN_H        DATA        32H        ; 分十位
  4. BUF_MIN_L        DATA        33H        ; 分个位
  5. BUF_SEC_H        DATA    34H        ; 秒十位
  6. BUF_SEC_L        DATA        35H        ; 秒个位

  7. ORG 0000H
  8. LJMP MAIN
  9. ORG 001BH
  10. AJMP SERVE1
  11. ORG 0100H

  12. MAIN:
  13.      MOV P1,#0FFH
  14.          MOV P0,#0FFH
  15.          MOV R0,#00H
  16.          MOV R1,#00H
  17.          MOV R2,#00H  
  18.          MOV R3,#14H   //20
  19.          MOV BUF_HOUR_H,#0FFH
  20.          MOV BUF_HOUR_L,#0FFH
  21.          MOV BUF_MIN_H,#0FFH
  22.          MOV BUF_MIN_L,#0FFH
  23.          MOV BUF_SEC_H,#0FFH
  24.          MOV BUF_SEC_L,#0FFH
  25.          MOV TMOD,#10H
  26.          MOV TL1,#0B0H                 //50MS
  27.          MOV TH1,#3CH
  28.          SETB TR1
  29.          SETB ET1
  30.          SETB EA

  31.         LJMP DISPLAY   //显示函数
  32. SERVE1:
  33.       MOV TL1,#0B0H
  34.           MOV TH1,#3CH
  35.       DJNZ R3,LOOP     ;是否中断20次(达到1s)
  36.           MOV R3,#14H    ; 达到1s
  37.           CPL P0.4  
  38.           LCALL        INC_SEC                        ;秒加1           
  39. LOOP:RETI
  40. INC_SEC:INC          R0                ;秒加1
  41.             MOV          A,        R0   
  42.             SETB         C
  43.             SUBB         A,#59                        ;如果秒等于60,则秒清0,分加1
  44.             JC           L1                  ;显示秒
  45.             MOV          R0,#00H
  46.             LCALL        INC_MIN
  47. L1: MOV          A,R0
  48.         MOV          B,#10
  49.         DIV          AB                        ; A = SEC / 10
  50.         MOV          DPTR,#DIS_CODE
  51.         MOVC         A,@A+DPTR                ;
  52.         MOV          BUF_SEC_H,A                ;
  53.        
  54.         MOV          A,R0
  55.         MOV          B,#10
  56.         DIV          AB
  57.         MOV          A,B                        ; A = SEC % 10
  58.         MOVC         A,@A+DPTR
  59.         MOV          BUF_SEC_L,A
  60.         RET         
  61. INC_MIN:
  62.         INC          R1                        ; 分钟加1
  63.         MOV          A,R1                        ;
  64.         SETB         C
  65.         SUBB         A,#59       
  66.         JC           L2                ; 如果分钟等于60,则分清0,小时加1
  67.         MOV          R1,#00H
  68.         LCALL        INC_HOUR                ; 小时加1
  69. L2:  MOV          A,R1
  70.         MOV          B,#10
  71.         DIV          AB                        ; A = MIN / 10       
  72.         MOV          DPTR,#DIS_CODE
  73.         MOVC         A,@A+DPTR
  74.         MOV          BUF_MIN_H,A                ; 更新分十位       
  75.         MOV          A,R1
  76.         MOV          B,#10
  77.         DIV          AB
  78.         MOV          A,B                        ; A = MIN % 10
  79.         MOVC         A,@A+DPTR
  80.         MOV          BUF_MIN_L,A                ; 更新分个位       
  81.         RET         
  82. INC_HOUR:
  83.         INC          R2                ; 小时加1
  84.         MOV          A,R2
  85.         SETB         C
  86.         SUBB         A,#24
  87.         JC           L3                ; 如果小时等于24,则小时清0
  88.         MOV     R2,#00H                ; 小时清0                  
  89. L3: MOV          A,R2
  90.         SETB         C
  91.         SUBB         A,#10
  92.         JC           L4        ; 如果小时小于10,则十位0不显示
  93.       MOV A,R2  //时 十位
  94.           MOV B,#10
  95.           DIV AB
  96.             MOV          A,R2
  97.              MOV          B,#10
  98.             DIV          AB
  99.             MOV          DPTR,#DIS_CODE
  100.             MOVC         A,@A+DPTR                ;
  101.             MOV          BUF_HOUR_H,A
  102.           SJMP L5
  103. L4:  MOV          BUF_HOUR_H,#0FFH                 //时 十位         
  104. L5:  MOV         A,R2   //时 个位
  105.          MOV          B,#10
  106.            DIV          AB
  107.          MOV          A,B
  108.          MOV          DPTR,#DIS_CODE
  109.          MOVC         A,@A+DPTR
  110.          MOV          BUF_HOUR_L,A
  111.          RET  
  112. DISPLAY:   /*SETB P0.0         
  113.            MOV P1,BUF_HOUR_H
  114.                CLR P0.0
  115.                ACALL DELAY_1MS
  116.                SETB P0.1
  117.                MOV P1,#01H
  118.                CLR P0.1
  119.                ACALL DELAY_1MS

  120.                    SETB P0.0         
  121.            MOV P1,BUF_HOUR_L
  122.                CLR P0.0
  123.                ACALL DELAY_1MS
  124.                SETB P0.1
  125.                MOV P1,#02H
  126.                CLR P0.1
  127.                ACALL DELAY_1MS

  128.                    SETB P0.0         
  129.            MOV P1,BUF_MIN_H
  130.                CLR P0.0
  131.                ACALL DELAY_1MS         
  132.                SETB P0.1
  133.                MOV P1,#04H
  134.                CLR P0.1
  135.                ACALL DELAY_1MS */

  136.                    SETB P0.0         
  137.            MOV P1,BUF_MIN_L
  138.                CLR P0.0
  139.                ACALL DELAY_1MS         
  140.                SETB P0.1
  141.                MOV P1,#08H
  142.                CLR P0.1
  143.                ACALL DELAY_1MS         

  144.                   
  145.                   /* SETB P0.0         
  146.            MOV P1,BUF_SEC_H
  147.                CLR P0.0
  148.                ACALL DELAY_1MS         
  149.                SETB P0.1
  150.                MOV P1,#10H
  151.                CLR P0.1
  152.                ACALL DELAY_1MS
  153.                   SETB P0.0                            
  154.            MOV P1,BUF_SEC_L
  155.                CLR P0.0
  156.                ACALL DELAY_1MS         
  157.                SETB P0.1
  158.                MOV P1,#20H
  159.                CLR P0.1
  160.                ACALL DELAY_1MS*/
  161.                    SJMP DISPLAY

  162. DELAY_1MS:MOV R7,#01H
  163. TS1:       MOV R6,#0FFH
  164. TS2:       DJNZ R6,TS2
  165.            DJNZ R7,TS1
  166.                    RET
  167. DIS_CODE:
  168.         DB        0C0H
  169.         DB        0F9H
  170.         DB        0A4H
  171.         DB        0B0H
  172.         DB        099H
  173.         DB        092H
  174.         DB        082H
  175.         DB        0F8H
  176.         DB        080H
  177.         DB        090H
  178.         DB        0FFH
  179.       END
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-12-17 17:03:10 | 显示全部楼层
应该是位选的问题去查相关变量

出0入0汤圆

 楼主| 发表于 2014-12-17 17:09:23 | 显示全部楼层
磊磊映画 发表于 2014-12-17 17:03
应该是位选的问题去查相关变量

位选我是一个一个设置的 啊

  1. DISPLAY:   /*SETB P0.0         
  2.            MOV P1,BUF_HOUR_H
  3.                CLR P0.0
  4.                ACALL DELAY_1MS
  5.         [color=Red]       SETB P0.1
  6.                MOV P1,#01H   
  7.                CLR P0.1[/color]
  8.                ACALL DELAY_1MS

  9.                    SETB P0.0         
  10.            MOV P1,BUF_HOUR_L
  11.                CLR P0.0
  12.                ACALL DELAY_1MS
  13.         [color=Red]       SETB P0.1
  14.                MOV P1,#02H
  15.                CLR P0.1[/color]
  16.                ACALL DELAY_1MS

  17.                    SETB P0.0         
  18.            MOV P1,BUF_MIN_H
  19.                CLR P0.0
  20.                ACALL DELAY_1MS         
  21.         [color=Red]       SETB P0.1
  22.                MOV P1,#04H
  23.                CLR P0.1[/color]
  24.                ACALL DELAY_1MS */

  25.                    SETB P0.0         
  26.            MOV P1,BUF_MIN_L
  27.                CLR P0.0
  28.                ACALL DELAY_1MS         
  29. [color=Red]               SETB P0.1
  30.                MOV P1,#08H
  31.                CLR P0.1[/color]
  32.                ACALL DELAY_1MS         

  33.                   
  34.                   SETB P0.0         
  35.            MOV P1,BUF_SEC_H
  36.                CLR P0.0
  37.                ACALL DELAY_1MS         
  38. [color=Red]               SETB P0.1
  39.                MOV P1,#10H
  40.                CLR P0.1[/color]
  41.                ACALL DELAY_1MS
  42.                   SETB P0.0                            
  43.            MOV P1,BUF_SEC_L
  44.                CLR P0.0
  45.                ACALL DELAY_1MS         
  46. [color=Red]               SETB P0.1
  47.                MOV P1,#20H
  48.                CLR P0.1[/color]
  49.                ACALL DELAY_1MS
  50.                    SJMP DISPLAY
复制代码

出0入0汤圆

发表于 2014-12-17 17:19:43 | 显示全部楼层
thy110 发表于 2014-12-17 17:09
位选我是一个一个设置的 啊

P0口你作为位选了P1口作为 段选了,我看你P0口只是循环P0.0 和P0.1         了也就是只有这两位
参考一下我之前做的代码





  1. DISP:  
  2. MOV   A,A_BIT
  3. MOV   DPTR,#TAB
  4. MOVC   A,@A+DPTR
  5. MOV   P0,A   
  6. CLR   P1.2  
  7. ACALL   D1MS  
  8. SETB   P1.2

  9. MOV   A,B_BIT  
  10. MOVC   A,@A+DPTR  
  11. MOV   P0,A   
  12. CLR   P1.3  
  13. ACALL   D1MS   
  14. SETB P1.3
  15.   
  16. MOV A,C_BIT
  17. MOVC   A,@A+DPTR   
  18. MOV   P0,A
  19. SETB P0.7   
  20. CLR   P1.4
  21. ACALL   D1MS   ;显示1ms
  22. SETB P1.4

  23. MOV   A,D_BIT  ;取
  24. MOVC   A,@A+DPTR  ;
  25. MOV   P0,A   
  26. CLR  P1.5  
  27. ACALL   D1MS   ;显示1ms
  28. SETB P1.5

  29. MOV   A,E_BIT  ;取
  30. MOVC   A,@A+DPTR  ;
  31. MOV   P0,A
  32. SETB P0.7   
  33. CLR   P1.6  
  34. ACALL   D1MS   ;显示1ms
  35. SETB P1.6

  36. MOV   A,F_BIT  ;取
  37. MOVC   A,@A+DPTR  ;
  38. MOV   P0,A   
  39. CLR   P1.7  
  40. ACALL   D1MS   ;显示1ms
  41. SETB P1.7
  42. RET
复制代码





出0入0汤圆

发表于 2014-12-17 17:25:41 | 显示全部楼层
貌似这年头用汇编的不多啊。。。

出0入0汤圆

发表于 2014-12-17 17:27:42 | 显示全部楼层
怎么还用汇编啊,改用C吧

出0入0汤圆

发表于 2014-12-17 17:38:40 | 显示全部楼层
楼主的显示代码太乱
看我的:

;显示xsz子程序<占用区0>********************************************
org 0020h
xsz:push dph
push dpl
push acc
push psw             ;保护现场
clr psw.3            ;进入第0组工作寄存器
clr psw.4
mov r6,#00h
mov dptr,#00e0h
mov a,2ah            ;取秒个位数据
movc a,@a+dptr
mov p1,a
clr p3.0             ;送秒个位
s01:djnz r6,s01      ;延时约0.5mS
setb p3.0            ;关闭显示
mov a,2bh            ;取秒十位数据
movc a,@a+dptr
mov p1,a
clr p3.1             ;送秒十位
s02:djnz r6,s02      ;延时约0.5mS
setb p3.1
mov a,2ch            ;取分个位数据
movc a,@a+dptr
mov p1,a
clr p3.2             ;送分个位
s03:djnz r6,s03      ;延时约0.5mS
setb p3.2            ;关闭显示
mov a,2dh            ;取分十位数据
movc a,@a+dptr
mov p1,a
clr p3.4             ;送分十位
s04:djnz r6,s04      ;延时约0.5mS
setb p3.4            ;关闭显示
mov a,2eh            ;取时个位数据
movc a,@a+dptr
mov c,07h
mov acc.7,c
mov p1,a
clr p3.5             ;送时个位
s05:djnz r6,s05      ;延时约0.5mS
setb p3.5            ;关闭显示
mov a,2fh            ;取时十位数据
jz s07               ;时十位为0就跳转不显示
movc a,@a+dptr
mov p1,a
clr p3.7             ;送时十位
s06:djnz r6,s06      ;延时约0.5mS
setb p3.7            ;关闭显示
s07:pop psw          ;回复现场
pop acc
pop dph
pop dpl
ret                  ;返回


org 00e0h
db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;共阳
org 00f0h
DB 03FH,06H,05BH,04FH,066H,06DH,07DH,07H,07FH,06FH  ;共阴

出0入0汤圆

 楼主| 发表于 2014-12-17 18:16:38 | 显示全部楼层
磊磊映画 发表于 2014-12-17 17:19
P0口你作为位选了P1口作为 段选了,我看你P0口只是循环P0.0 和P0.1         了也就是只有这两位
参考一下我之前 ...

我和你的电路不太一样,我用了两个74hc573,p1口既当段选又当位选,p0.0,p0.是控制573的


不过谢谢了,我已经解决了

出0入0汤圆

发表于 2014-12-17 21:22:15 | 显示全部楼层
不懂汇编,帮顶了

出0入0汤圆

发表于 2014-12-20 22:52:50 | 显示全部楼层
以前用汇编,好难入门.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 10:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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