找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5149|回复: 0
收起左侧

智能小车单片机程序及报告+流程图+管脚说明

[复制链接]
ID:114472 发表于 2016-4-16 00:25 | 显示全部楼层 |阅读模式
最全单片机智能小车制作资料,希望对大家有帮助
0.png
报告模板:
1.png

元器件:
2.png

流程图:
4.png 0.png

程序:
  1. ORG     0000H
  2. LJMP    MAIN

  3. ORG     0003H
  4. LJMP    MINE_BOMB

  5. ORG     000BH
  6. LJMP    TIMER

  7. ORG     0013H
  8. LJMP    HUOER

  9. ORG     001BH
  10. LJMP    SPEED

  11. ;**************************************************
  12. ORG     0030H
  13. ;**************************************************
  14. MINE_BOMB:
  15.         PUSH    A
  16.         PUSH    PSW

  17.         INC     3AH

  18.         MOV     A,40H
  19.         MOV     3BH,A

  20.         MOV     A,41H
  21.         MOV     3CH,A

  22.         CLR    20H.3
  23.         SETB   P3.4
  24.         SETB   P3.5

  25.         POP     PSW
  26.         POP     A
  27. RETI

  28. ;**************************************************
  29. TIMER:
  30.         PUSH    A
  31.         PUSH    PSW

  32.         MOV       TL0,#0F0H
  33.         MOV       TH0,#0D8H

  34.         INC       37H
  35.         MOV       A,37H

  36.         CJNE      A,#100,TIMEREND
  37. ;is 1second

  38. IS_HUN:
  39.         MOV       37H,#0
  40.         ;            IS C_MINE,STOP AND THAN  XUAN
  41.         JB       20H.0,QI_LAI        ;THIS TIME,THE CAR IS WAITTING IN THE END,
  42.         DEC      39H
  43.         MOV      A,39H
  44.         CJNE     A,#0H,TIMEREND
  45.         SETB     20H.0
  46.         LJMP     TIMEREND

  47. QI_LAI:
  48.         JB       20H.1,WAKE_UP
  49.         DEC      38H
  50.         CPL      P3.4
  51.         MOV      A,38H
  52.         CJNE     A,#0H,WAKE_UP
  53.         SETB     20H.1
  54.         CLR      P3.4
  55.         SETB     TR1
  56.         MOV      5AH,#23

  57. WAKE_UP:
  58.         INC       43H
  59.         MOV       A,43H
  60.         CJNE      A,#30,GOGOGO_DOWN
  61.         MOV       A,42H
  62.         JZ        GOGOGO_DOWN
  63.         LJMP      HOME
  64. GOGOGO_DOWN:
  65.         MOV       A,43H
  66.         CJNE      A,#60,TIMEREND
  67.         MOV       43H,#0

  68.         INC       42H
  69.         MOV       A,42H
  70.         CJNE      A,#60,TIMEREND
  71.         MOV       42H,#0


  72. TIMEREND:
  73.         POP     PSW
  74.         POP     A

  75. RETI

  76. ;**************************************************
  77. HUOER:
  78.         PUSH    A
  79.         PUSH    PSW

  80.         MOV     A,3FH
  81.         CLR     C
  82.         ADD     A,#64    ;加上6.3毫米
  83.         CJNE    A,#100,CHECK_CM
  84. CHECK_CM:
  85.         JC      ADD_CM
  86.         SUBB    A,#100    ;大于10个毫米了,要作调整
  87.         MOV     3FH,A
  88.         INC     41H

  89. ADD_CM:                   ;厘米上要加2
  90.         INC     41H
  91.         INC     41H

  92.         MOV     A,41H
  93.         CJNE    A,#100,CHECK_M
  94. CHECK_M:
  95.         JC      HUOER_END
  96.         SUBB    A,#100    ;大于一米了,要调整一下
  97.         MOV     41H,A
  98.         INC     40H

  99.         ;查看是否是两米了,是的话就算到了B区
  100.         MOV     A,40H
  101.         CJNE    A,#2,HUOER_END
  102.         MOV     36H,#0BH

  103. HUOER_END:
  104.         POP     PSW
  105.         POP     A
  106. RETI

  107. ;**************************************************
  108. SPEED:
  109.         PUSH    A
  110.         PUSH    PSW

  111.         MOV       TL1,#0B0H
  112.         MOV       TH1,#03CH

  113.         INC       5BH
  114.         MOV       A,5BH

  115.         CJNE      A,5AH,SPEED_NO_EQUAL   ; 5A中放了速度值,比5A大,刚置为停,小则行
  116.         CLR       P3.0                   ; 等于5A了,置为停
  117.         LJMP      SP_END

  118. SPEED_NO_EQUAL:                          ; 不是5A

  119.         JC       IS_GOGOGO               ; 小于5A,则向前走
  120.         CJNE     A,#40,SP_BIG_TOTAL      ; 是不是比总脉冲值大
  121.         SETB     P3.0
  122.         MOV      5BH,#0H
  123.         LJMP     SP_END
  124. IS_GOGOGO:                               ;是行,就置行
  125.         SETB     P3.0
  126.         LJMP     SP_END

  127. SP_BIG_TOTAL:                            ; 大于5A,不是40
  128.         CLR      P3.0
  129.         JC       SP_END                  ;比40小则是停,就不管
  130.         MOV      5AH,#0H
  131. SP_END:

  132.         POP     PSW
  133.         POP     A
  134. RETI

  135. ;**************************************************
  136. ;**************************************************


  137. MAIN:
  138.         MOV     SP,#5FH
  139.         LCALL   INIT
  140.     ;   LJMP    HOME;\\\\\\\\\

  141. SIX_SECOND:
  142.         JB      20H.0,GO_MINE_ZEON
  143.         MOV     R1,#39H
  144.         LCALL   SETCODEALL
  145.         LCALL   OUT
  146.         LJMP    SIX_SECOND

  147. GO_MINE_ZEON:
  148.         SETB     TR1
  149.         LJMP     MINE_WAY
  150. RET

  151. ;**************************************************
  152. ;**************************************************

  153. INIT:
  154.      MOV        R1,#36H
  155.      MOV        R2,#34
  156. INIT_LOOP:
  157.      MOV        @R1,#0
  158.      INC        R1
  159.      DJNZ       R2,INIT_LOOP

  160.      MOV        20H,#0H
  161.      SETB       20H.1
  162.      SETB       20H.3


  163.      MOV        39H,#6H      ;倒计时654321
  164.      MOV        38H,#5H      ;倒计时54321
  165.      MOV        5AH,#24      ;用于车速控制

  166.      MOV        36H,#0AH

  167.      MOV        P3,#0CH
  168.      MOV        P2,#0H


  169. INT_ZONE:
  170.      LCALL      SET_INT

  171. RET
  172. ;**************************************************
  173. SET_INT:
  174.      MOV       TMOD,#01H
  175.      MOV       TL0,#0F0H
  176.      MOV       TH0,#0D8H

  177.      MOV       TL1,#0B0H
  178.      MOV       TH1,#03CH
  179.      SETB      TR0
  180.      CLR       TR1

  181.      SETB      EA
  182.      SETB      ET0
  183.      SETB      ET1
  184.      SETB      EX0
  185.      SETB      IT0

  186.      SETB      EX1
  187.      SETB      IT1

  188. RET
  189. ;**************************************************

  190. SETCODEALL:;6543210
  191.         MOV     R0,#30H
  192.         MOV     R2,#6
  193. SETCODEALL_LOOP:
  194.         MOV     A,@R1
  195.         MOV     DPTR,#TAB
  196.         MOVC    A,@A+DPTR
  197.         MOV     @R0,A
  198.         INC     R0
  199.         DJNZ    R2,SETCODEALL_LOOP
  200. RET

  201. ;**************************************************
  202. ;**************************************************

  203. MINE_WAY:
  204.         LCALL TRACK

  205.         JB    20H.3,MINE_WAY
  206.         MOV     C,P3.2           ;下面有雷,就是低
  207.         JC    MINE_WAY

  208.         ;下面是关小灯和蜂鸣器
  209.         CLR     P3.4
  210.         CLR     P3.5

  211.         ;看看长度是否超过4米
  212.         MOV     A,40H
  213.         CJNE    A,#4H,PASS_C
  214.         LJMP    C_POINT

  215. PASS_C:
  216.         JNC     C_POINT

  217.         ;下面调用一般雷的处理方法,再返回主程序
  218.         LCALL   NORMAL_MINE
  219.         LJMP    MINE_WAY

  220.         ;下面是到达C点了
  221. C_POINT:
  222.         CLR     20H.1
  223.         LCALL   FIVE_SECOND
  224.         SETB    20H.3
  225.         SETB    TR1
  226.         MOV     5AH,#23
  227.         LJMP    BOLK

  228. RET

  229. ;****************************************************

  230. TRACK:
  231.       MOV       A,P0
  232.       ANL       A,#07H
  233.       CJNE      A,#7H,SET_TURN
  234.       LJMP      LIGHT_END
  235. SET_TURN:
  236.       CJNE      A,#3H,LIGHT_NEXT
  237. RIGHT_LIGHT:         ;  看右边的光敏元件
  238.       CLR       P2.7        ;这时就要向右转弯了
  239.       SETB      P2.6
  240.       LCALL     TURN_DELAY
  241.       CLR       P2.6
  242.       RET
  243. LIGHT_NEXT:          ; 左转了
  244.       CJNE      A,#06H,LIGHT_END
  245.       SETB      P2.7
  246.       SETB      P2.6
  247.       LCALL     TURN_DELAY
  248.       CLR       P2.6
  249.       RET

  250. LIGHT_END:
  251.       CLR   P2.6
  252. RET
  253. ;****************************************************

  254. TURN_DELAY:
  255.       MOV        5AH,#26
  256.       MOV        C, P0.1
  257.       JC         TURN_DELAY

  258.       MOV        A,36H

  259.       CJNE       A,#0AH,IS_ZONE_B
  260.       MOV        5AH,#24
  261.       LJMP       TURN_DELAY_END

  262. IS_ZONE_B:
  263.       MOV        5AH,#20
  264. TURN_DELAY_END:

  265. RET

  266. ;****************************************************

  267. NORMAL_MINE:
  268.       CLR        TR1
  269.       CLR        P2.6

  270.       ;以下是保存雷长度
  271.       MOV       A,3CH
  272.       ADD       A,#53H
  273.       MOV       R0,A

  274.       CLR       C
  275.       MOV       A,41H
  276.       ADD       A,#100
  277.       SUBB      A,3CH
  278.       CJNE      A,#100,NORMAL_MINE_LENGTH
  279. NORMAL_MINE_LENGTH:
  280.       JC        NO_CHANGE
  281.       SUBB      A,#100
  282. NO_CHANGE:
  283.       MOV       @R0,A


  284.       ;以下是计算中点距起点的距离
  285.       MOV       B,#2H
  286.       DIV       AB

  287.       ADD       A,3CH
  288.       CJNE      A,#100,SET_CENTER
  289. SET_CENTER:
  290.       JC        NO_P_WAY
  291.       SUBB      A,#100
  292.       INC       3BH
  293. NO_P_WAY:
  294.       MOV       3CH,A

  295.       ;保存中点距离
  296.       MOV       A,3AH
  297.       DEC       A
  298.       MOV       B,#2H
  299.       MUL       AB

  300.       MOV       R0,48H
  301.       ADD       A,R0

  302.       MOV       R0,A
  303.       MOV       A,3BH
  304.       MOV       @R0,A

  305.       INC       R0
  306.       MOV       A,3CH
  307.       MOV       @R0,A



  308.       CLR        P3.0
  309.       CLR        P3.1
  310.       CLR        P2.6

  311.       CLR        TR1

  312.       ;以下是延时显示程序
  313.       LCALL      DELAY_MINE2
  314.       CLR        P3.1
  315.       SETB       P3.0
  316.       SETB       TR1
  317.       SETB       20H.3

  318. RET

  319. ;****************************************************
  320. DELAY_MINE1:
  321.       MOV       R6,#2H
  322. DELAY_LOOP_MINE1:
  323.       LCALL      DELAY
  324.       DJNZ       R6,DELAY_LOOP_MINE1
  325. RET

  326. ;****************************************************
  327. ;****************************************************
  328. DELAY_MINE2:
  329.       LCALL     SET_CODE_MINE
  330.       MOV       R5,#03H
  331. DELAY_LOOP_MINE_F:
  332.       MOV       R6,#08FH
  333.       DELAY_LOOP_MINE2:
  334.            LCALL      OUT
  335.            DJNZ       R6,DELAY_LOOP_MINE2
  336.       DJNZ     R5,DELAY_LOOP_MINE_F
  337. RET

  338. ;****************************************************

  339. SET_CODE_MINE:
  340.       MOV     A,3BH
  341.       MOV     B,#0AH
  342.       DIV     AB
  343.       MOV     44H,A
  344.       MOV     45H,B

  345.       MOV     A,3CH
  346.       MOV     B,#0AH
  347.       DIV     AB
  348.       MOV     46H,A
  349.       MOV     47H,B

  350.       LCALL   SET_CODE
  351. RET


  352. ;****************************************************

  353. FIVE_SECOND:
  354.          CLR        TR1
  355.          CLR        P2.6
  356.          SETB       P3.1
  357.          SETB       P3.0
  358.          LCALL      DELAY_MINE1
  359.          CLR        P3.0
  360.          CLR        P3.1
  361.          CLR        P2.6

  362.          SETB       P3.5
  363.          SETB       P3.4
  364.          CLR        TR1

  365. STOP_AT_C:
  366.         MOV     R1,#38H
  367.         LCALL   SETCODEALL
  368.         JB      20H.1,C_WAKE_LE
  369.         LCALL   OUT
  370.         LJMP    STOP_AT_C

  371. C_WAKE_LE:
  372.         SETB    TR1

  373. RET

  374. ;****************************************************
  375. ;****************************************************

  376. BOLK:
  377.         SETB    TR1
  378.         MOV     5AH,#20






  379. SEEK_LAMP:
  380.         LCALL   TURN_TO_LAMP
  381.         MOV     C,P0.1
  382.         JNC     HOME
  383.         JB      20H.6,SEEK_LAMP

  384.         MOV     C,P0.6
  385.         JC      SEEK_LAMP
  386. AV:     LCALL   AVOID_WHITE_BOLK
  387.         MOV     C,P0.6
  388.         JNC     AV
  389.         SETB    20H.6

  390.         LJMP    SEEK_LAMP

  391. RET

  392. ;******************************************************

  393. TURN_TO_LAMP:
  394.         MOV  C,P0.3
  395.         JNC  LOOK_RIGHT
  396.         LCALL  TURN_LEFT_MIDDLE
  397.         RET
  398. LOOK_RIGHT:
  399.         MOV     C,P0.5
  400.         MOV     R6,#4FH
  401. FORWARDLIGHT:
  402.         LCALL   DELAY
  403.         DJNZ    R6,FORWARDLIGHT
  404.         JNC     TURN_TO_LAMP_END
  405.         LCALL   TURN_RIGHT_MIDDLE
  406.         RET

  407. TURN_TO_LAMP_END:
  408. RET

  409. ;******************************************************

  410. ;******************************************************
  411. AVOID_WHITE_BOLK:
  412.          CLR     TR1
  413.          CLR    P2.7
  414.          SETB    P2.6
  415.          SETB    P3.1
  416.          LCALL   DELAY
  417.          
  418.          SETB    TR1

  419.          MOV    R5,#05H
  420. AVOID_R5:
  421.          MOV    R6,#0FFH
  422. AVOID_R6:
  423.          LCALL  DELAY
  424.          DJNZ   R6,AVOID_R6
  425.          DJNZ   R5,AVOID_R5
  426.          


  427.          CLR     TR1
  428.          CLR     P2.6
  429.          CLR     P3.1
  430.                
  431.          LCALL  DELAY
  432.          SETB    TR1  

  433.          MOV    R5,#06H
  434. AVOID_R52:
  435.          MOV    R6,#0FFH
  436. AVOID_R62:
  437.          LCALL  DELAY
  438.          DJNZ   R6,AVOID_R62
  439.          DJNZ   R5,AVOID_R52
  440.                  
  441.          
  442.          MOV     5AH,#30
  443.          MOV    R6,#3FH
  444. AVOID_LOOP:
  445.          LCALL  DELAY
  446.          DJNZ   R6,AVOID_LOOP

  447.          MOV    C,P0.6
  448.          JNC    AVOID_WHITE_BOLK
  449.          MOV    5AH,#20
  450.          CLR     P2.6
  451. RET

  452. ;******************************************************
  453. HOME:
  454.         MOV     IE,#0H
  455.         MOV     IE,#0H

  456.         CLR     P2.6
  457.         CLR     P3.0

  458. HOME_WAIT:
  459.         CLR     P2.6
  460.         CLR     P3.0
  461.         SETB    P3.4
  462.         LCALL   KEY_QUERY     ; 查询键盘
  463.         LCALL   TIP_SET_CODE  ; 设置显示值
  464.          MOV     R1,#44H
  465.          LCALL   SET_CODE
  466.         LCALL   OUT           ; LED 输出
  467.         LJMP    HOME_WAIT
  468. RET

  469. ;******************************************************

  470. KEY_QUERY:
  471.         LCALL   KEY
  472.         JNC    KEY_QUERY_END
  473.         LCALL   KEY
  474.         JNC      KEY_QUERY_END
  475.         LCALL   DEAL_KEY
  476. KEY_WA:
  477.         LCALL   KEY
  478.         JC      KEY_WA
  479. KEY_QUERY_END:
  480. RET


  481. RET

  482. ;******************************************************

  483. TIP_SET_CODE:

  484.         MOV  A,59H
  485.         JZ   SET_TIME

  486.         MOV     R0,#46H
  487.         MOV     B,#02H
  488.         MUL     AB

  489.         ADD     A,R0
  490.         MOV     R0,A
  491. SET_NUM:
  492.         MOV     A,@R0
  493.         MOV     B,#0AH
  494.         DIV     AB
  495.         MOV     44H,A
  496.         MOV     45H,B

  497.         INC     R0
  498.         MOV     B,#0AH
  499.         MOV     A,@R0
  500.         DIV     AB
  501.         MOV     46H,A
  502.         MOV     47H,B
  503.         RET

  504. SET_TIME:
  505.         MOV     R0,#42H
  506.         LJMP    SET_NUM

  507. RET

  508. ;*****************************************************

  509. OUT:
  510.         MOV     R0,#30H
  511.         MOV     R2,#6H
  512.         MOV     R4,#0H
  513. LOOP:
  514.         MOV     A,@R0
  515.         LCALL   OUTPUT
  516.         INC     R0
  517.         INC     R4
  518.         DJNZ    R2,LOOP
  519. RET

  520. ;*******************************************************

  521. OUTPUT: ;在A中是要显示的数据,R4中是要显示的位
  522.         MOV     R3,#8H
  523.         CLR     P1.3

  524. OUT_LOOP:
  525.         RLC     A
  526.         MOV     P1.2,C
  527.         CLR     P1.4
  528.         NOP
  529.         NOP
  530.         NOP
  531.         SETB    P1.4
  532.         NOP
  533.         NOP
  534.         NOP
  535.         DJNZ    R3,OUT_LOOP
  536. OUT_LOOP_END:
  537.         MOV     P1,R4
  538.         SETB    P1.3
  539.         LCALL   DELAY
  540.         CLR     P1.3
  541. RET

  542. ;******************************************************

  543. SET_CODE:
  544.         MOV     R0,#44H
  545.         MOV     R1,#30H
  546.         MOV     R2,#4H
  547. SET_CODE_LOOP:
  548.         MOV     A,@R0
  549.         MOV     DPTR,#TAB
  550.         MOVC    A,@A+DPTR
  551.         MOV     @R1,A
  552.         INC     R0
  553.         INC     R1
  554.         DJNZ    R2,SET_CODE_LOOP

  555.         ;以下是显示是第几个雷
  556.         MOV     A,3AH
  557.         MOV     DPTR,#TAB
  558.         MOVC    A,@A+DPTR
  559.         MOV     35H,A
  560.         ;以下是使一个LED为暗
  561.         MOV     34H,#0H
  562. RET

  563. ;******************************************************

  564. TAB:   DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

  565. ;*****************************************************
  566. KEY:
  567.         MOV     58H,#0FEH;
  568.         MOV     R1,#4H
  569. KEY_LOOP:
  570.         MOV     P1,58H
  571.         MOV     A,P1
  572.         CJNE    A,58H,KEY_NEXT1
  573.         MOV     A,58H ;NO KEY FIND
  574.         RL      A
  575.         MOV     58H,A
  576.         DJNZ    R1,KEY_LOOP
  577.         CLR    C
  578.         LJMP    KEY_END

  579. KEY_NEXT1:
  580.         SETB    C
  581. KEY_END:

  582. RET


  583. DEAL_KEY:
  584.          MOV    A,58H
  585.          MOV    P1,#0F0H
  586.          CJNE   A,#0FEH,TWO

  587. ONE_1:   SETB   P1.1
  588.          NOP
  589.          MOV    C,P1.1
  590.          JC    ONE_2
  591.          MOV    59H,#0EH
  592.          LJMP   DEAL_END

  593. ONE_2:   SETB   P1.2
  594.          MOV    C,P1.2
  595.          JC    ONE_3
  596.          MOV    59H,#07H
  597.          LJMP   DEAL_END
  598. ONE_3:   MOV    59H,#0FH
  599.          LJMP   DEAL_END

  600. TWO:     CJNE   A,#0FDH,THREE
  601. TWO_1:   SETB   P1.0
  602.          MOV    C,P1.0
  603.          JC    TWO_2
  604.          MOV    59H,#2H
  605.          LJMP   DEAL_END

  606. TWO_2:   SETB   P1.2
  607.          MOV    C,P1.2
  608.          JC    TWO_3
  609.          MOV    59H,#6H
  610.          LJMP   DEAL_END
  611. TWO_3:   MOV    59H,#9H
  612.          LJMP   DEAL_END


  613. THREE:   CJNE   A,#0FBH,FOUR


  614. THREE_1: SETB   P1.0
  615.          MOV    C,P1.0
  616.          JC    THREE_2
  617.          MOV    59H,#1H
  618.          LJMP   DEAL_END

  619. THREE_2: SETB   P1.1
  620.          MOV    C,P1.1
  621.          JC    THREE_3
  622.          MOV    59H,#4H
  623.          LJMP   DEAL_END
  624. THREE_3: MOV    59H,#8H
  625.          LJMP   DEAL_END

  626. FOUR:
  627. FOUR_1:  SETB   P1.0
  628.          MOV    C,P1.0
  629.          JC    FOUR_2
  630.          MOV    59H,#0H
  631.          LJMP   DEAL_END

  632. FOUR_2:  SETB   P1.1
  633.          MOV    C,P1.1
  634.          JC    FOUR_3
  635.          MOV    59H,#3H
  636.          LJMP   DEAL_END
  637. FOUR_3:  MOV    59H,#5H
  638.          LJMP   DEAL_END

  639. DEAL_END:

  640. RET

  641. ;******************************************************

  642. DELAY:
  643.         MOV     R7,#0FFH
  644. DELAY_LOOP:
  645.         DJNZ    R7,DELAY_LOOP
  646. RET

  647. ;******************************************************

  648. TURN_RIGHT_MIDDLE:
  649.          MOV      5AH,#30
  650. TURN_RIGHT_MIDDLE_START:
  651.          CLR    P2.7
  652.          SETB   P2.6
  653.          MOV    C,P0.3
  654.          JNC    TURN_RIGHT_MIDDLE_START
  655.          CLR    P2.6
  656.          MOV    5AH,#23
  657. RET

  658. ;******************************************************

  659. TURN_LEFT_MIDDLE:
  660.           MOV    5AH,#30
  661. TURN_LEFT_MIDDLE_START:
  662.          SETB   P2.7
  663.          SETB   P2.6
  664.           MOV    C,P0.5
  665.          JNC    TURN_RIGHT_MIDDLE_START
  666.          CLR    P2.6
  667.          MOV    5AH,#23H
  668. RET

  669. ;*********************************************


  670. END

复制代码



全国大学电子设计大赛_智能小车.rar (512.05 KB, 下载次数: 11)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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