找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机怎么用按位与、或、异来控制流水灯从两端流向中间?

[复制链接]
跳转到指定楼层
楼主
ID:370709 发表于 2018-9-28 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:403712 发表于 2018-9-28 17:50 | 只看该作者
TLOW    EQU  0F0H
THIGH   EQU  0D8H

FLAG_DIR    BIT 20H.0;FANGXIANG

COUNT_INT   DATA 30H
COUNT_K     DATA 31H
LEDVALUE    DATA 32H
COUNT_KEY   DATA 33H
KEY0    EQU P2.0
KEY1    EQU P2.1
KEY2    EQU P2.2
KEY3    EQU P2.3
;--------------------------------------------------
ORG  0000H
JMP  MAIN
ORG  0BH
JMP  T0_INT
;--------------------------------------------------
MAIN:
    MOV  SP,#60H
    CALL  INIT_TIMER
    SETB  TR0
    CLR FLAG_DIR
    MOV LEDVALUE,#01H
    MOV COUNT_KEY,#50
    MOV COUNT_K,#50
MAIN_LOOP:
READKEY0:
    JB KEY0,READKEY1
    JNB KEY0,$
    SETB FLAG_DIR
    AJMP READKEYEND
READKEY1:
    JB KEY1,READKEY2
    JNB KEY1,$
    CLR FLAG_DIR
    AJMP READKEYEND
READKEY2:
    JB KEY3,READKEY3
    JNB KEY3,$
    CLR C
    MOV A,COUNT_KEY
    ADDC A,#5
    JNC COUNT_KEY_NOT_OV
    MOV A,#250
COUNT_KEY_NOT_OV:   
    MOV COUNT_KEY,A
    MOV COUNT_K,A
    AJMP READKEYEND
READKEY3:
    JB KEY2,READKEYEND  
    JNB KEY2,$   
    MOV A,COUNT_KEY
    SUBB A,#5
    JNC COUNT_KEY_NOT_OV2
    MOV A,#5
COUNT_KEY_NOT_OV2:     
    MOV COUNT_KEY,A
    MOV COUNT_K,A
    AJMP READKEYEND
READKEYEND:   
;   MOV A,COUNT_KEY
;    MOV COUNT_K,A
    JMP MAIN_LOOP
;;-------------------------     


;;-------------------------
INIT_TIMER:                ;初始化定时器
    MOV  TMOD,#01H    ;设置定时器0 工作模式为模式1
    MOV  IE,  #82H    ;启用定时器0 中断产生
    MOV  TL0,#TLOW      ;10MS
    MOV  TH0,#THIGH
    RET
;;-------------------------
T0_INT:
    PUSH  ACC
    PUSH  PSW
    MOV  TL0,#TLOW
    MOV  TH0,#THIGH
    INC COUNT_INT
    MOV A,COUNT_INT
    CJNE A,#1,RUNOUT
    MOV COUNT_INT,#0
    DJNZ COUNT_K,RUNOUT
    MOV A,COUNT_KEY
    MOV COUNT_K,A
RUN:   
    JB  FLAG_DIR,RUN_R;
RUN_L:
    MOV A,LEDVALUE
    RL A
    MOV LEDVALUE,A
    AJMP RUNOUT
RUN_R:
    MOV A,LEDVALUE
    RR A
    MOV LEDVALUE,A
    AJMP RUNOUT  
RUNOUT:
;   MOV A,LEDVALUE
    MOV P0,LEDVALUE
T0_T:
    POP PSW
   POP  ACC
    RETI

;;-------------------------   
END
回复

使用道具 举报

板凳
ID:111634 发表于 2018-9-30 06:50 | 只看该作者
用逻辑运算实现花样亮灯操作,不是好方法,且复杂单调,应采用数组调用方法,可做到随心所欲。

评分

参与人数 1黑币 +20 收起 理由
yousunny + 20 赞一个!

查看全部评分

回复

使用道具 举报

地板
ID:396960 发表于 2018-9-30 09:07 | 只看该作者
嗯嗯,赞成 “zl2168” 的说话
“用逻辑运算实现花样亮灯操作,不是好方法,且复杂单调,应采用数组调用方法,可做到随心所欲。”

省心。
回复

使用道具 举报

5#
ID:391338 发表于 2018-9-30 09:38 | 只看该作者
TLOW    EQU  0F0H THIGH   EQU  0D8H FLAG_DIR    BIT 20H.0;FANGXIANG COUNT_INT   DATA 30H COUNT_K     DATA 31H LEDVALUE    DATA 32H COUNT_KEY   DATA 33H KEY0    EQU P2.0 KEY1    EQU P2.1 KEY2    EQU P2.2 KEY3    EQU P2.3 ;-------------------------------------------------- ORG  0000H JMP  MAIN ORG  0BH JMP  T0_INT ;-------------------------------------------------- MAIN:     MOV  SP,#60H     CALL  INIT_TIMER     SETB  TR0     CLR FLAG_DIR     MOV LEDVALUE,#01H     MOV COUNT_KEY,#50     MOV COUNT_K,#50 MAIN_LOOP: READKEY0:     JB KEY0,READKEY1     JNB KEY0,$     SETB FLAG_DIR     AJMP READKEYEND READKEY1:     JB KEY1,READKEY2     JNB KEY1,$     CLR FLAG_DIR     AJMP READKEYEND READKEY2:     JB KEY3,READKEY3     JNB KEY3,$     CLR C     MOV A,COUNT_KEY     ADDC A,#5     JNC COUNT_KEY_NOT_OV     MOV A,#250 COUNT_KEY_NOT_OV:         MOV COUNT_KEY,A     MOV COUNT_K,A      AJMP READKEYEND READKEY3:     JB KEY2,READKEYEND       JNB KEY2,$         MOV A,COUNT_KEY     SUBB A,#5     JNC COUNT_KEY_NOT_OV2     MOV A,#5 COUNT_KEY_NOT_OV2:          MOV COUNT_KEY,A     MOV COUNT_K,A     AJMP READKEYEND READKEYEND:     ;   MOV A,COUNT_KEY ;    MOV COUNT_K,A     JMP MAIN_LOOP ;;-------------------------      ;;------------------------- INIT_TIMER:                ;初始化定时器     MOV  TMOD,#01H    ;设置定时器0 工作模式为模式1     MOV  IE,  #82H    ;启用定时器0 中断产生     MOV  TL0,#TLOW      ;10MS     MOV  TH0,#THIGH     RET ;;------------------------- T0_INT:     PUSH  ACC     PUSH  PSW     MOV  TL0,#TLOW     MOV  TH0,#THIGH     INC COUNT_INT     MOV A,COUNT_INT     CJNE A,#1,RUNOUT     MOV COUNT_INT,#0     DJNZ COUNT_K,RUNOUT     MOV A,COUNT_KEY     MOV COUNT_K,A RUN:        JB  FLAG_DIR,RUN_R; RUN_L:     MOV A,LEDVALUE     RL A     MOV LEDVALUE,A     AJMP RUNOUT RUN_R:     MOV A,LEDVALUE     RR A     MOV LEDVALUE,A     AJMP RUNOUT   RUNOUT: ;   MOV A,LEDVALUE     MOV P0,LEDVALUE T0_T:     POP PSW    POP  ACC     RETI ;;-------------------------     END
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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