51单片机汇编语言十字路口交通灯控制器Proteus仿真注释详细

[复制链接]
查看36 | 回复0 | 2021-7-20 16:58:28 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
3.gif
1. 设计一个智能十字路口交通灯控制器。
2.用单片机控制控制LED红、黄、绿指示灯,模拟指示十字路口通行状态。
3.控制东西、南北方向的十字路口交通信号灯。
4.东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。
5.东西方向红灯时间=南北方向绿灯时间+黄灯缓冲时间,反之亦然。
6.鼓励新创意,增加新功能。
第二章 系统设计方案2.1设计思路
1.采用AT89S52单片机作为主控芯片及外围控制芯片,设计十字路口交通灯控制器的硬件电路。
2.采用AT89S52单片机汇编语言,完成十字路口交通灯控制器的软件编程。
3.采用LED显示和中断定时电路,利用定时器T0产生每10ms一次的中断,每100次中断为1s。对两个方向分别显示红、绿、黄灯,以及相应的剩余时间(倒计时)。
4.用独立式按键实现特殊车辆(消防车、救护车、警车)通行的控制功能。
5.设置闯红灯报警功能
2.2方案设计
利用AT89S52单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,数码管显示剩余时间
。红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯,8个共阴极数码管显示剩余时间。
设计文档目录:
目录
第一章 绪论        1
1.1设计目的        1
1.2设计内容        1
第二章 系统设计方案        2
2.1设计思路        2
2.2方案设计        2
第三章 系统硬件电路设计        3
3.1 AT89S52单片机        3
3.1.1晶振电路设计        5
3.1.2复位电路设计        5
3.2显示部分电路设计        6
3.2.1数码管选择        6
3.2.2十字路口交通灯设计        6
3.3系统硬件总电路图        7
第四章 系统软件程序设计        8
4.1主程序设计        8
4.1.1总体流程图        8
4.2其他子程序设计        9
4.2.1循环流程控制思路        9
4.3单片机源程序设计        10
第五章 调试与仿真        15
5.1 Proteus软件系统仿真        15
5.2仿真结果        15
第六章 总结        19
参考文献        21


完整文档见本文尾部附件。
单片机源程序如下:部分源码,完整见附件
  1. ;***********************************************
  2. ;***********************************************
  3. ;*********内存、IO口分配************************
  4. SHANSHUO        EQU        20H                ;闪烁标志
  5. JISHU1        EQU        30H                ;计数变量
  6. JISHU2        EQU        31H
  7. TIME_0        EQU        32H                ;中断变量
  8. TIME_1        EQU        33H                ;
  9. SHUCHU        EQU        P0                ;数码管段输出
  10. G_1                BIT        P1.0                ;定义LED
  11. Y_1                BIT        P1.1
  12. R_1                BIT        P1.2
  13. G_2                BIT        P1.3
  14. Y_2                BIT        P1.4
  15. R_2                BIT        P1.5
  16. WEI1                BIT        P2.0                ;数码管片选
  17. WEI2                BIT        P2.1
  18. WEI3                BIT        P2.2
  19. WEI4                BIT        P2.3

  20. K1       BIT   P3.0      ;紧急按键

  21. ;********************************************
  22.         ORG        0000H
  23.         SJMP        START
  24.         ORG        000BH                         ;定时器0中断入口
  25.         LJMP        T0_0
  26.         ORG        0030H
  27. START:
  28.         MOV        P1,#0                         ;LED高电平有效,清零
  29.         MOV        P2,#0                         ;数码管片选高电平有效,清零
  30.         CLR        SHANSHUO                 ;闪烁标志清零
  31.         CLR        JISHU1                 ;计数变量清零
  32.         CLR        JISHU2                 ;
  33.         CLR        TIME_0                 ;中断变量清零
  34.         CLR         TIME_1                 ;
  35.         MOV        TMOD,#01H                 ;定时器0方式1
  36.         MOV        TH0,#3CH                 ;装初值,50MS
  37.         MOV        TL0,#0B0H                 ;
  38.         SETB        EA                         ;开总中断
  39.         SETB        ET0                         ;开定时器中断
  40.         SETB        TR0                         ;启动定时器
  41. ;***************状态1*************************
  42. ZT1:                                         
  43.         MOV        P1,#0                         ;LED清零
  44.         MOV        JISHU1,#83                 ;计数装初值
  45.         MOV        JISHU2,#80                 ;
  46.         MOV        R6,JISHU1                 ;
  47.         MOV        R7,JISHU2                 ;
  48.         SETB        G_1                         ;东西绿灯亮
  49.         SETB        R_2                         ;南北红灯亮
  50. AA:        CALL        DISPLAY                 ;显示
  51.         MOV        A,R7                         ;
  52.         CJNE        A,#0,AA                 ;判断时间是否已到
  53. ;*************状态2***************************
  54. ZT2:      
  55.         MOV        P1,#0                           ;LED清零
  56.         MOV        JISHU1,#3                 ;计数器重装初值
  57.         MOV        JISHU2,#3                 ;
  58.         MOV        R6,JISHU1                 ;
  59.         MOV        R7,JISHU2                 ;
  60.         SETB        Y_1                         ;东西黄灯点亮
  61.         SETB        R_2                         ;南北红灯继续亮
  62. BB:        JNB        SHANSHUO,CC                 ;判断闪烁标志位
  63.         SETB        Y_1                         ;是一则点亮黄灯
  64.         AJMP        QW                         ;跳到显示
  65. CC:        CLR        Y_1                         ;是零则熄灭黄灯,达到闪烁的效果
  66. QW:        CALL        DISPLAY                 ;显示
  67.         MOV        A,R6                         ;
  68.         CJNE        A,#0,BB                 ;判断是否到了三秒
  69.         CLR        SHANSHUO                 ;清闪烁
  70. ;*************状态3***************************
  71. ZT3:
  72.         MOV        P1,#0                         ;LED清零
  73.         MOV        JISHU1,#60                 ;计数器重新装初值
  74.         MOV        JISHU2,#63                 ;
  75.         MOV        R6,JISHU1                 ;
  76.         MOV        R7,JISHU2                 ;
  77.         SETB        R_1                         ;东西红灯点亮
  78.         SETB        G_2                         ;南北绿灯点亮
  79. EE:        CALL        DISPLAY                 ;显示
  80.         MOV        A,R6                         ;
  81.         CJNE        A,#0,EE                  ;判断时间是否到了
  82. ;*************状态4***************************
  83. ZT4:      
  84.         MOV        P1,#0                         ;LED清零
  85.         MOV        JISHU1,#3                 ;计数器重新装初值
  86.         MOV        JISHU2,#3                 ;
  87.         MOV        R6,JISHU1                 ;
  88.         MOV        R7,JISHU2                 ;
  89.         SETB        R_1                         ;东西红灯点亮
  90.         SETB        Y_2                         ;南北黄灯点亮
  91. FF:        JNB        SHANSHUO,QR                 ;判断闪烁位是1/0
  92.         SETB        Y_2                         ;1则点亮黄灯
  93.         SJMP        QE                         ;显示
  94. QR:        CLR        Y_2                         ;0则熄灭黄灯
  95. QE:        CALL        DISPLAY                 ;显示
  96.         MOV        A,R6                         ;
  97.         CJNE        A,#0,FF                 ;判断时间到没
  98.         CLR        SHANSHUO                 ;闪烁清零
  99.         LJMP        START                         ;跳 循环
  100. ;**************中断子程序*********************
  101. T0_0:
  102.         CLR        EA                         ;关总中断
  103.         MOV        TH0,#3CH                 ;重新装初值
  104.         MOV        TL0,#0B0H                 ;
  105.         INC        TIME_0                 ;定时器变量加1
  106.         INC        TIME_1                 ;
  107.         MOV        A,TIME_0                 ;
  108.         CJNE        A,#0AH,NEXT                 ;判断是否到了500MS
  109.         MOV        TIME_0,#0                 ;到则清变量
  110.         CPL        SHANSHUO                 ;给闪烁位取反
  111.         JB  K1,NEXT                  ; 按键K1处理,紧急处理
  112.         MOV   A,P1                        ;读取当前LED显示
  113.         MOV        P1,#0                         ;LED清零
  114.         MOV   P0,#0                        ;P0口输出0
  115.         MOV   P2,#0     ;P2口输出0,不显示
  116.         SETB  R_1                        ;点亮红色指示灯
  117.         SETB  R_2                ;点亮红色指示灯
  118.         JNB  K1,$                ;等待按键松开
  119.         MOV  P1,A        ;P1口LED还原
  120. NEXT:        MOV        A,TIME_1                 ;
  121.         CJNE        A,#20,QUIT                 ;判断是否到了1S,没到则退出
  122.         MOV        TIME_1,#0                 ;到则清变量
  123.         DEC        R7                         ;寄存器自减一
  124.         DEC        R6                         ;寄存器自减一
  125. QUIT:        SETB        EA                         ;开总中断
  126.         RETI                                 ;中断返回
  127. ;**************显示子程序*********************
  128. DISPLAY:
  129.         PUSH        ACC                         ;进堆栈
  130.         MOV        A,R7                         ;装载东西方向显示缓存值到寄存器A
  131.         MOV        B,#0AH                 ;寄存器B装载10
  132.         DIV        AB                         ;进制转换
  133.         MOV        DPTR,#TAB                 ;十位
  134.         MOVC        A,@A+DPTR                 ;查表,获得东西方向10位上的显示段码
  135.         MOV        SHUCHU,A                 ;        显示段码输出到显示端口
  136.         SETB        WEI1                         ; 10位的数码管位选信号设置为1,点亮数码管
  137.         CALL        DELAY1MS                 ; 延时1ms
  138.         CLR        WEI1                         ; 10位的数码管位选信号设置为0,熄灭数码管
  139.         MOV        A,B                         ;个位
  140.         MOV        DPTR,#TAB                 ;查表,获得东西方向个位上的显示段码
  141.         MOVC        A,@A+DPTR                 ;
  142.         MOV        SHUCHU,A                 ;显示段码输出到显示端口
  143.         SETB        WEI2                         ;个位的数码管位选信号设置为1,点亮数码管
  144.         CALL        DELAY1MS                 ;延时1ms
  145.         CLR        WEI2                         ;个位的数码管位选信号设置为0,熄灭数码管

  146.         MOV        A,R6                         ;装载东西方向显示缓存值到寄存器A
  147.         MOV        B,#0AH                 ;寄存器B装载10
  148.         DIV        AB                         ;进制转换
  149.         MOV        DPTR,#TAB                 ;十位
  150.         MOVC        A,@A+DPTR                 ;查表,获得南北方向10位上的显示段码
  151.         MOV        SHUCHU,A                 ;显示段码输出到显示端口
  152.         SETB        WEI3                         ;10位的数码管位选信号设置为1,点亮数码管
  153.         CALL        DELAY1MS                 ;延时1ms
  154.         CLR        WEI3                         ;10位的数码管位选信号设置为0,熄灭数码管
  155.         MOV        A,B                         ;个位
  156.         MOV        DPTR,#TAB                 ;查表,获得东西方向个位上的显示段码
  157.         MOVC        A,@A+DPTR                 ;
  158.         MOV        SHUCHU,A                 ;显示段码输出到显示端口
  159.         SETB        WEI4                         ;个位的数码管位选信号设置为1,点亮数码管
  160.         CALL        DELAY1MS                 ;延时1ms
  161.         CLR        WEI4                         ;个位的数码管位选信号设置为0,熄灭数码管
  162.         POP        ACC                         ;退出堆栈
  163.         RET                                 ;返回
  164. ;**************** 延时 ***********************
  165. DELAY1MS:        ;延时1ms子函数
  166.         MOV R1,#01H
  167.       MOV R2,#0FFH
  168. DD:   DJNZ R2,DD
  169.       DJNZ R1,DD
  170.       RET
  171. ;****************共阳数码管字符表******************************
  172. TAB:        DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H        
  173.         END         
复制代码
十字路口交通灯.docx (570.03 KB, 售价: 3 工控币)
源码和Proteus源程序.zip (139.59 KB, 售价: 3 工控币)
回复

使用道具 举报

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

本版积分规则