佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1762|回复: 18

跪求高手幫忙...8051 如何寫上下數?

[复制链接]
发表于 30-12-2007 03:21 PM | 显示全部楼层 |阅读模式
我最近有個project要用到用8051輸出40~80(bcd),
流程是當我按push button1 會從40+1,以此類推...
按下push button2 時會遞減.....
但我只會從40一直上數到99而已,下數更死完全不會動作...
希望各為高手能幫小第的忙...萬分感激!!
回复

使用道具 举报


ADVERTISEMENT

发表于 30-12-2007 03:55 PM | 显示全部楼层
原帖由 brandon6436 于 30-12-2007 03:21 PM 发表
我最近有個project要用到用8051輸出40~80(bcd),
流程是當我按push button1 會從40+1,以此類推...
按下push button2 時會遞減.....
但我只會從40一直上數到99而已,下數更死完全不會動作...
希望各為高手能幫小第的 ...


请提供现有的原代码,让有心人事容易给以援助。
回复

使用道具 举报

发表于 30-12-2007 06:45 PM | 显示全部楼层
高中到现在都没有动了,呵呵……手痒试一下。

        ORG 00H
        MOV A,#40H
START        MOV P1,A
        JNB P2.0,INC
        JNB P2.1,DEC
        CALL DELAY
        JMP START
INC        MOV A,P1
        INC A
        DA A
        MOV P1,A
        JMP START
DEC        MOV A,P1
        DEC A
        DA A
        MOV P1,A
        JMP START
DELAY        MOV R0,#1H
        MOV R1,#99H
DL        DJNZ R1,DL
        DJNZ R0,DELAY
        RET
        END
回复

使用道具 举报

 楼主| 发表于 31-12-2007 01:41 AM | 显示全部楼层

回复 3# 的帖子

高手果然太久沒碰了...有bug...不過我修改了,大家看看,但還是達不到我的要求...我要的是上下數 40~80......
        ORG 00H
        MOV        A, #40H
START:        MOV        P1, A
        JNB        P2.0, INC
        JNB        P2.1, DEC
        CALL        DELAY
        JMP         START

INC:
        MOV        A, P1
        INC        A
                DA        A
                MOV        P1, A
                JMP START

DEC:         MOV        A, P1
                DEC        A
                DA        A
                MOV        P1,A
                JMP START

DELAY:
        MOV        R0, #1H
                MOV        R1, #99H
DL:                DJNZ R1, DL
        DJNZ         R0, DELAY
RET
END
回复

使用道具 举报

发表于 31-12-2007 10:29 AM | 显示全部楼层
原帖由 brandon6436 于 30-12-2007 03:21 PM 发表
我最近有個project要用到用8051輸出40~80(bcd),
流程是當我按push button1 會從40+1,以此類推...
按下push button2 時會遞減.....
但我只會從40一直上數到99而已,下數更死完全不會動作...
希望各為高手能幫小第的 ...

介意upload你的program吗??
没有的话大家只能靠猜测,并不能解决问题。
回复

使用道具 举报

发表于 31-12-2007 10:49 AM | 显示全部楼层
原帖由 brandon6436 于 31-12-2007 01:41 AM 发表
高手果然太久沒碰了...有bug...不過我修改了,大家看看,但還是達不到我的要求...我要的是上下數 40~80......
        ORG 00H
        MOV        A, #40H
START:        MOV        P1, A
        JNB        P2.0, INC
        JNB        P2.1, DEC
        CALL        DELAY
        JMP         START ...



你也别这么拽了,三楼的 GuoHui 也是尽力帮你的。我没看到你改了什么?? 既然你已经有些成就,把你的源代码上传,从你的作品稍加修改就行了。
回复

使用道具 举报

Follow Us
发表于 31-12-2007 12:08 PM | 显示全部楼层
等你upload你自己的了,我才给你我写过的。
不过我写过的那个还没有测试过的,工作中不方便测试。
回复

使用道具 举报

发表于 31-12-2007 11:18 PM | 显示全部楼层
原帖由 GuoHui 于 30-12-2007 06:45 PM 发表
高中到现在都没有动了,呵呵……手痒试一下。


這程式無論按上數或下數,其數字都會跳得飛快,甚至看不清所顯示的數字。

因此,我把你的程式改了一下。
(按着button不放時,數字就會每隔0.5秒增加/遞減一位數。)
若有誤,請各位高手改正。

        ORG 00H
        MOV A,#40H
START:        
        MOV P1,A
        JNB P2.0,INC
        JNB P2.1,DEC
DELAY2:
        CALL DELAY
        JMP START

INC:
        CJNE A,#80H,GO_INC
        JMP START
GO_INC:
        MOV A,P1
        INC A
        DA A
        MOV P1,A
        JMP DELAY2

DEC:
        CJNE A,#40H,GO_DEC
        JMP START
GO_DEC:
        MOV A,P1
        DEC A
        DA A
        MOV P1,A
        JMP DELAY2

DELAY:(在XTal=12MHz之下延遲0.5秒)
        MOV R0,#50
DL1:
        MOV R1,#20
DL2:        
        MOV R2,#248
        DJNZ R2,$
        DJNZ R1,DL2
        DJNZ R0,DL1
        RET
        END
回复

使用道具 举报


ADVERTISEMENT

发表于 1-1-2008 11:50 AM | 显示全部楼层
建议用Timer延迟一个0.5秒触发
回复

使用道具 举报

发表于 1-1-2008 02:14 PM | 显示全部楼层
原帖由 freeman_long 于 31-12-2007 11:18 PM 发表


這程式無論按上數或下數,其數字都會跳得飛快,甚至看不清所顯示的數字。

因此,我把你的程式改了一下。
(按着button不放時,數字就會每隔0.5秒增加/遞減一位數。)
若有誤,請各位高手改正。

        ...


这方法也许已经解决了按键数字跳跃的问题,不过也浪费了mcu 的等待时间。
回复

使用道具 举报

发表于 1-1-2008 02:52 PM | 显示全部楼层
原帖由 rothmans 于 1-1-2008 02:14 PM 发表


这方法也许已经解决了按键数字跳跃的问题,不过也浪费了mcu 的等待时间。


其实楼主的问题出在那里, 大家都不懂。。。。+_+
至于这个问题--這程式無論按上數或下數,其數字都會跳得飛快
可以用debouncing 来解决。
回复

使用道具 举报

发表于 1-1-2008 03:33 PM | 显示全部楼层
原帖由 fritlizt 于 1-1-2008 02:52 PM 发表


其实楼主的问题出在那里, 大家都不懂。。。。+_+
至于这个问题--這程式無論按上數或下數,其數字都會跳得飛快
可以用debouncing 来解决。


呵呵!既然不懂楼主的问题出在那里,大家就来灌水吧!


因为第三楼的源代码没有限制数字在40 ~ 80 里,看来第八楼已经解决了楼主的问题了。。而且他的程序也加入了软件防跳功能。
回复

使用道具 举报

发表于 1-1-2008 11:34 PM | 显示全部楼层
原帖由 rothmans 于 1-1-2008 03:33 PM 发表


呵呵!既然不懂楼主的问题出在那里,大家就来灌水吧!


因为第三楼的源代码没有限制数字在40 ~ 80 里,看来第八楼已经解决了楼主的问题了。。而且他的程序也加入了软件防跳功能。


rothmans果然是高手。

 
回复

使用道具 举报

发表于 2-1-2008 01:04 AM | 显示全部楼层
原帖由 freeman_long 于 1-1-2008 11:34 PM 发表


rothmans果然是高手。

 


呵呵!你也不要这样称赞我 。其实你的程序似乎不是完整的。楼主要的是从40 ~ 80 , 依你的程序看来是限制在 41 ~ 79 范围里。你似乎没有处理到一旦递增至 80 过后必须从40 开始,还有递减至 40 过后必须跳到 80的数字。

再说,楼主这几天也许是度假去了,现在只有下烂摊子给我们空猜想罢了,也不知道这是否是楼主期望的解答。
还是等楼主回来开鼓第五楼,第七楼 及 第十一楼,的疑惑后在给意见也不迟。

[ 本帖最后由 rothmans 于 2-1-2008 01:10 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2-1-2008 05:40 PM | 显示全部楼层
哇!!!我才一會兒沒上就被批評了...
真的對不起啊!我不是你們講的那個意思啊.....
我和guohui是認識的啊...
我沒有很要炫的意思啊...
真的不好意思....
回复

使用道具 举报

 楼主| 发表于 2-1-2008 05:44 PM | 显示全部楼层
我這幾天一直在lab裡面試,終於有點成績了....
動作可以從40一直加到80然後回到40從新在加....
但問題來了.....
當我按減的時候,只會從個位數5,4,3,2,1,0,然後又5,4,3,....
十位數就是不會跟住減啊!為甚麼?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 2-1-2008 05:46 PM | 显示全部楼层
我的源代碼
ORG 00H

MAIN:   MOV A,#39H
START:        
        MOV P1,A
        JNB P2.0,INC
        JNB P2.1,DEC

DELAY2:
        CALL DELAY
        JMP START

INC:
        CJNE A,#80H,GO_INC
        JMP MAIN
GO_INC:
        MOV A,P1
        ADD A,#1
        DA A
        MOV P1,A
        JMP DELAY2

DEC:
        CJNE A,#40H,GO_DEC
        JMP MAIN
GO_DEC:
        MOV A,P1
        SUBB A,#1
        DA A
        MOV P1,A
        JMP DELAY2

DELAY:
        MOV R0,#50
DL1:
        MOV R1,#20
DL2:        
        MOV R2,#248
        DJNZ R2,$
        DJNZ R1,DL2
        DJNZ R0,DL1
        RET
        END
回复

使用道具 举报

发表于 2-1-2008 08:34 PM | 显示全部楼层
原帖由 brandon6436 于 2-1-2008 05:46 PM 发表 ...


从你的源代碼,我做了些修改。主要是加入另一个寄存器 R3。若有错误,自行修改或反馈。

        ORG     00H
MAIN:   MOV     R3,#40H
repeat: MOV     A,R3
        DA      A
        MOV     P1,A
START:
        JNB     P2.0,INC
        NOP
        NOP
        JNB     P2.1,DEC
        NOP
        NOP
DELAY2: CALL    DELAY
        JMP     START
INC:    INC     R3
        CJNE    R3,#81H,convert
        JMP     MAIN
        
DEC:    DEC     R3
        CJNE    A,#3FH,convert
        MOV     R3,#80H
        JMP     repeat
convert:
        MOV     A,R3
        DA      A
        MOV     P1,A
        JMP     DELAY2
        
DELAY:  MOV     R0,#50
DL1:    MOV     R1,#20
DL2:    MOV     R2,#248
        DJNZ    R2,$
        DJNZ    R1,DL2
        DJNZ    R0,DL1
        RET
        END
回复

使用道具 举报

发表于 6-1-2008 07:32 PM | 显示全部楼层
原帖由 brandon6436 于 2-1-2008 05:44 PM 发表

我這幾天一直在lab裡面試,終於有點成績了....
動作可以從40一直加到80然後回到40從新在加....
但問題來了.....
當我按減的時候,只會從個位數5,4,3,2,1,0,然後又5,4,3,....
十位數就是不會跟住減啊!為甚麼?


下數的問題可用以下程式。
這程式我已試過,確定可以正常操作。
(開電時停在40,每按一次上數鍵就加一,當加到80後就自動回到40;
若按下數鍵就減一,減到40後就自動回到80。)


        ORG 00H
MAIN:
        MOV 20H,#40H
START:        
        CALL DISP
        CALL DELAY
        JNB P2.0,INC
        JNB P2.1,DEC
        JMP START
DISP:
        MOV A,20H
        CPL A
        MOV P1,A
        RET
INC:
        INC 20H
        MOV A,20H
        CLR C
        DA A
        CJNE A,#81H,GO1
        JMP MAIN
GO1:
        MOV 20H,A
        JMP START
DEC:
        DEC 20H
        MOV A,20H
        CJNE A,#3FH,GO2
        MOV 20H,#80H
        JMP START
GO2:
        ANL A,#0FH
        CJNE A,#0FH,START
        MOV A,20H
        SUBB A,#06
        CLR C
        MOV 20H,A
        JMP START
DELAY:
        MOV R0,#50
DL1:
        MOV R1,#20
DL2:        
        MOV R2,#248
        DJNZ R2,$
        DJNZ R1,DL2
        DJNZ R0,DL1
        RET
        END
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 26-5-2024 07:35 PM , Processed in 0.066490 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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