找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机汇编LED模拟交通灯 Proteus仿真代码

[复制链接]
跳转到指定楼层
楼主
如题你们要的汇编版本

几年没碰过汇编了,有些生疏。写了三种形式的,程序有不足的地方请见谅,话也不多说

直接 ~giao  啊!!!不对 直接上程序、仿真

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. /**************************第一种**************************************************
  2. RED_A   EQU P0.0
  3. YELLO_A EQU P0.1
  4. GREE_A  EQU P0.2

  5. RED_B   EQU P0.3
  6. YELLO_B EQU P0.4
  7. GREE_B  EQU P0.5

  8. ORG 0000H
  9. AJMP START
  10. ORG 0030H
  11. AJMP MAIN
  12. START:MOV P0,#0FFH                   
  13.       CLR  RED_A                           //东西 南北方向红灯亮
  14.           CLR  RED_B
  15.           LCALL DELAY2S
  16.           MOV P0,#0F7H                    //消影
  17. MAIN:MOV R3,#3                           //闪烁次数设置为3
  18.      
  19. LOOP1:CLR GREE_A                   //东西方向绿灯亮
  20.       CLR RED_B                           //南北方向红灯亮
  21.           LCALL DELAY10S          
  22.           MOV P0,#0F5H
  23. TOP1:CLR YELLO_A                   //东西方向黄灯亮
  24.       LCALL DELAY100MS           //调用100ms延时
  25.           SETB YELLO_A                   //东西方向黄灯灭
  26.           LCALL DELAY100MS
  27.           DJNZ R3,TOP1
  28.           MOV P0,#0DEH                   //南北绿灯亮 东西红灯亮
  29. LOOP2:CLR GREE_B                  //南北方向绿灯亮
  30.           CLR RED_A                          //东西方向红灯亮
  31.           LCALL DELAY10S
  32.           MOV R3,#3                          //赋值南北方向黄灯闪烁次数
  33.           MOV P0,#0FEH
  34. TOP2:CLR YELLO_B                   //南北方向黄灯亮
  35.       LCALL DELAY100MS           //调用延时
  36.           SETB YELLO_B                   //南北方向黄灯灭
  37.           LCALL DELAY100MS           //
  38.           DJNZ R3,TOP2                   //R3减1若不等于0跳转至TOP2处执行,执行3次从而达到闪烁
  39.                                //R3减1等于0则顺序执行
  40.           MOV P0,#0F7H                      //东西方向绿灯 南北方向红灯
  41.           LJMP MAIN                           //跳转至MAIN处循环执行

  42. DELAY100MS:MOV R5,#4          //定时100ms  @11.0592MHz
  43.                MOV R6,#93
  44.                MOV R7,#152
  45.       NEXT:DJNZ R7,NEXT
  46.                DJNZ R6,NEXT
  47.                DJNZ R5,NEXT
  48.                RET

  49. DELAY2S:MOV R7,#20       //延时2S子程序
  50.         MOV R6,#200
  51.         MOV R5,#248
  52.      B1:DJNZ R5,B1
  53.          DJNZ R6,B1
  54.              DJNZ R7,B1
  55.          RET

  56. DELAY10S:MOV R5,#81                     //延时10S
  57.              MOV R6,#47
  58.              MOV R7,#121
  59.       D1:DJNZ R7,D1
  60.              DJNZ R6,D1
  61.              DJNZ R5,D1
  62.              RET
  63. END
  64. ****************************************************************************************/
  65.                                                                                                                                  
  66. /*****************************第二种********************/
  67. ORG 0100H              //预留空间

  68. START:MOV A, #0F6H            //初始化
  69.       MOV P0, A                   //东西南北全红(P0口地址)
  70.       LCALL DELAY           //鉴于空间的大小,这里选用LCALL作为调用函数

  71. LOOP:MOV P0,#0F3H      //东西绿灯亮 南北红的亮
  72.      ACALL DTIME            //进入定时器中断
  73.          MOV R0,#3         //闪烁次数 3

  74. LOOP1:MOV P0,#0F5H            //东西黄灯闪烁,南北红灯  
  75.       ACALL DTIME1     //        ||
  76.       MOV P0,#0F7H     //        ||
  77.       ACALL DTIME1     //
  78.       DJNZ R0,LOOP1    //判断是否闪烁了3次,满足则执行下一条指令,反之回到LOOP1处继续执行
  79.           MOV P0,#0DEH     //南北绿灯,东西红灯
  80.       ACALL DTIME
  81.           
  82.       MOV R0,#3

  83. LOOP2:MOV P0,#0EEH      //南北黄灯闪,东西红灯
  84.       ACALL DTIME1  
  85.       MOV P0,#0FEH  
  86.       ACALL DTIME1
  87.       DJNZ R0,LOOP2   
  88.       JMP LOOP  

  89. DTIME1:MOV TMOD,#01H          //定时器T0工作在方式1 @11.0592MHz
  90.        MOV TH0,#3CH         //定时器高四位
  91.        MOV TL0,#0B0H          //定时器低四位
  92.        MOV R6,#10                  //定时0.5S                R6赋值20表示1S 10*50ms=500ms=0.5s
  93.        SETB TR0                  //启动定时0                                   20*50ms=1000ms=1s
  94. WM:JBC TF0,NEXT1                 //判断中断溢出位为1则清零,并跳转到NEXT1
  95.    AJMP WM
  96. NEXT1:DJNZ R6,NEXT2          //定时0.5S,时间到则返回进入前位置继续执行
  97.       RET
  98. NEXT2:MOV TH0,#3CH                //重装定时器初值
  99.       MOV TL0,#0B0H  
  100.       AJMP WM  
  101.       RET

  102. DTIME:MOV TMOD,#01H         //定时器T0工作在方式1
  103.       MOV TH0,#3CH                 //定时初值
  104.       MOV TL0,#0B0H         //定时时间 50ms
  105.       MOV R6,#20                 //1s时间到
  106.       MOV R7,#2                 //为了方便调试 绿灯亮2S        35s定时则为MOV R7,#35
  107.       SETB TR0                         //20*500ms*2=2s
  108.    LM:JBC TF0,NEXT                 //判断中断溢出位为1则清零,并跳转到NEXT
  109.       AJMP LM                          //检测50ms是否到
  110. NEXT: DJNZ R6,NEXT4
  111.       DJNZ R7,NEXT3  
  112.       AJMP JS
  113. NEXT3:MOV R6,#20                //重装定时器初值
  114. NEXT4:MOV TH0,#3CH
  115.       MOV TL0,#0B0H
  116.       AJMP LM                     //检测50ms是否到
  117.    JS:RET

  118. DELAY: MOV R7,#50       //延时5S子程序
  119.   DL1:MOV R6,#200
  120.   DL2:MOV R5,#248
  121.     DJNZ R5,$
  122.     DJNZ R6,DL2
  123.         DJNZ R7,DL1
  124.     RET
  125. END

  126. /**************************第二种*****************************************************
  127. ORG 0000H
  128. LJMP START
  129. ORG 0030H                            
  130. START:
  131. MOV A, #0F6H             
  132. MOV P0, A                         ;东西南北全红(P0口地址)
  133. LCALL DELAY                         ;鉴于空间的大小,这里选用LCALL作为调用函数
  134. MAIN:
  135. MOV A,#11110011B                  ;东西车道绿灯亮,通行;南北车道红灯亮,禁止通行
  136. MOV P0, A                                 ;CPU中断
  137. LCALL DELAY2                             ;调用延时子程序
  138. MOV R1,#3
  139. LOOP1:
  140.   MOV A,#11110101B                 ;东西车道黄灯闪烁,南北车道红灯亮,禁止通行
  141.   MOV P0, A
  142.   LCALL DELAY1                         ;CPU中断,调用函数
  143.   MOV A,#11110111B
  144.   MOV P0, A
  145.   LCALL DELAY1
  146.   DJNZ R1,LOOP1
  147.   MOV A,#11011110B                 ;东西车道红灯亮,禁止通行,南北车道绿灯亮,通行
  148.   MOV P0, A
  149.   LCALL DELAY2
  150.   MOV R2,#3
  151. LOOP2:
  152.   MOV A,#11101110B                 ;东西车道红灯亮,禁止通行,南北车道黄灯闪烁
  153.   MOV P0, A
  154.   LCALL DELAY1
  155.   MOV A,#11111110B
  156.   MOV P0, A
  157.   LCALL DELAY1
  158.   DJNZ R2,LOOP2
  159. LJMP MAIN                                  ;跳转程序

  160. DELAY: MOV R7,#20       ;延时2S子程序
  161.   DL1:MOV R6,#200
  162.   DL2:MOV R5,#248
  163.     DJNZ R5,$
  164.     DJNZ R6,DL2
  165.         DJNZ R7,DL1
  166.     RET
  167. DELAY1: MOV R5, #3            ;黄灯闪烁3次程序
  168.      Y1: MOV R6, #200
  169.      Y2: MOV R7, #248
  170.      X1: DJNZ R7, X1
  171.          DJNZ R6, Y2
  172.          DJNZ R5, Y1
  173.          RET
  174. DELAY2: MOV R5, #50        ;绿灯通行延时程序
  175.     D1: MOV R6, #200
  176.     D2: MOV R7, #248
  177.     D3:
  178.         DJNZ R7, D3
  179.         DJNZ R6, D2
  180.         DJNZ R5, D1
  181.         RET
  182. END       
  183. */                                 
复制代码

所有资料51hei提供下载:
交通灯.7z (132.36 KB, 下载次数: 44)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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