找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3857|回复: 1
收起左侧

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

[复制链接]
ID:954753 发表于 2021-7-19 22:13 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.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. ;***********************************************
  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         
复制代码

所有资料51hei附件下载:
Keil和Proteus源程序.zip (139.59 KB, 下载次数: 96)

评分

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

查看全部评分

回复

使用道具 举报

ID:95059 发表于 2021-7-21 15:15 | 显示全部楼层
下载下来没有工程仿真文件
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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