基于Proteus仿真的交通信号灯设计——利用汇编语言实现

这篇具有很好参考价值的文章主要介绍了基于Proteus仿真的交通信号灯设计——利用汇编语言实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于Proteus仿真的交通信号灯设计——利用汇编语言实现

设计要求

基本信息

  1. 采用AT89C51单片机
  2. 晶振频率:12MHZ
  3. 红绿灯:发光二极管
  4. 数字显示:LED数码管
  5. 东西南北四个方向,一次循环共有六个状态,且每个状态的倒计时时间一样

交通状态

  1. 东西红灯22s,南北绿灯22s(数码管从0到21);
  2. 东西红灯5s,南北绿灯5s且没0.5s闪烁一次(数码管从0到4);
  3. 东西红灯4s,南北绿灯4s且没0.5s闪烁一次(数码管从0到3);
  4. 东西绿灯22s,南北红灯22s(数码管从0到21);
  5. 东西绿灯5s且没0.5s闪烁一次,南北红灯5s(数码管从0到4);
  6. 东西绿灯4s没0.5s闪烁一次,南北红灯4s(数码管从0到3);

电路仿真原理图

电路总体布局

基于Proteus仿真的交通信号灯设计——利用汇编语言实现

复位电路

基于Proteus仿真的交通信号灯设计——利用汇编语言实现

晶振电路

基于Proteus仿真的交通信号灯设计——利用汇编语言实现

LED指示灯电路

基于Proteus仿真的交通信号灯设计——利用汇编语言实现

P1口控制LED灯的亮灭,高电平点亮,低电平熄灭

数码管显示电路

基于Proteus仿真的交通信号灯设计——利用汇编语言实现

P0与P2口控制数码管的显示,低电平点亮,高电平熄灭;由于P0口不能输出高电平,故接一个上拉电阻RP1(此处解释来自网络——上拉电阻RP1的目的是使P0口可输出高电平)

汇编语言代码(注释很详细)

;分配内存和IO口
DATE_EW EQU 30H;定义两个计数变量
DATE_NS EQU 31H
R_EW BIT P1.0;定义信号灯变量
Y_EW BIT P1.1
G_EW BIT P1.2
G_NS BIT P1.3
Y_NS BIT P1.4
R_NS BIT P1.5

ORG 0000H

;初始化程序
START:MOV P1,#0;控制9个红绿灯,高电平,高电平点亮,此处清零
      MOV P2,#0FFH;控制数码管十位,低电平点亮,此处全灭
      MOV P0,#0FFH;控制数码管个位,低电平点亮,此处全灭
;***************状态1**************东西红灯22s,南北绿灯22s
STATE1:MOV P1,#0;清除上一状态的灯况
       SETB R_EW;点亮东西红灯
       SETB G_NS;点亮南北绿灯
       MOV DATE_EW,#21;赋值
       MOV DATE_NS,#21
       MOV R6,DATE_EW
       MOV R7,DATE_NS
LOOP1:LCALL DISPLAY1;调用数码管显示子程序
      DEC R7;数码管数字减一,东西南北倒计时一样
      DEC R6
      MOV A,R7
      CJNE A,#0,LOOP1;A不等于0,则继续循环
      LCALL DISPLAY1;再执行一遍,0也要显示
      LJMP STATE2;执行状态2
;***************状态2**************东西红灯5s,南北绿灯5s且带闪烁    
STATE2:MOV P1,#0;清除上一状态的灯况
       MOV DATE_EW,#4;赋值
       MOV DATE_NS,#4
       MOV R6,DATE_EW
       MOV R7,DATE_NS
LOOP2:LCALL DISPLAY2;调用数码管显示子程序
      SETB R_EW;点亮东西红灯
      SETB G_NS;点亮南北绿灯
      LCALL DELAY1
      CLR G_NS;熄灭南北绿灯
      DEC R7;数码管数字减一,东西南北倒计时一样
      DEC R6
      MOV A,R7
      CJNE A,#0,LOOP2;A不等于0,则继续循环
      LCALL DISPLAY2;再执行一遍,0也要显示
      LJMP STATE3;执行状态3
;***************状态3**************东西红灯5s,南北绿灯5s且带闪烁    
STATE3:MOV P1,#0;清除上一状态的灯况
        MOV DATE_EW,#3;赋值
        MOV DATE_NS,#3
        MOV R6,DATE_EW
        MOV R7,DATE_NS
LOOP3:LCALL DISPLAY2;调用数码管显示子程序
        SETB R_EW;点亮东西红灯
        SETB Y_NS;点亮南北黄灯
        LCALL DELAY1
        CLR Y_NS;熄灭南北黄灯
        DEC R7;数码管数字减一,东西南北倒计时一样
        DEC R6
        MOV A,R7
        CJNE A,#0,LOOP3;A不等于0,则继续循环
        LCALL DISPLAY2;再执行一遍,0也要显示
        LJMP STATE4;执行状态4
;***************状态4**************东西绿灯22s,南北红灯22s
STATE4:MOV P1,#0;清除上一状态的灯况
        SETB G_EW;点亮东西绿灯
        SETB R_NS;点亮南北红灯
        MOV DATE_EW,#21;赋值
        MOV DATE_NS,#21
        MOV R6,DATE_EW
        MOV R7,DATE_NS
LOOP4:LCALL DISPLAY1;调用数码管显示子程序
        DEC R7;数码管数字减一,东西南北倒计时一样
        DEC R6
        MOV A,R7
        CJNE A,#0,LOOP4;A不等于0,则继续循环
        LCALL DISPLAY1;再执行一遍,0也要显示
        LJMP STATE5;执行状态5
;***************状态5**************东西绿灯5s且带闪烁 ,南北红灯5s   
STATE5:MOV P1,#0;清除上一状态的灯况
        MOV DATE_EW,#4;赋值
        MOV DATE_NS,#4
        MOV R6,DATE_EW
        MOV R7,DATE_NS
LOOP5:LCALL DISPLAY2;调用数码管显示子程序
        SETB G_EW;点亮东西绿灯
        SETB R_NS;点亮南北红灯
        LCALL DELAY1
        CLR G_EW;熄灭东西绿灯
        DEC R7;数码管数字减一,东西南北倒计时一样
        DEC R6
        MOV A,R7
        CJNE A,#0,LOOP5;A不等于0,则继续循环
        LCALL DISPLAY2;再执行一遍,0也要显示
        LJMP STATE6;执行状态6
;***************状态6**************东西黄灯4s且带闪烁 ,南北红灯4s   
STATE6:MOV P1,#0;清除上一状态的灯况
        MOV DATE_EW,#3;赋值
        MOV DATE_NS,#3
        MOV R6,DATE_EW
        MOV R7,DATE_NS
LOOP6:LCALL DISPLAY2;调用数码管显示子程序
        SETB Y_EW;点亮东西黄灯
        SETB R_NS;点亮南北红灯
        LCALL DELAY1
        CLR Y_EW;熄灭东西黄灯
        DEC R7;数码管数字减一,东西南北倒计时一样
        DEC R6
        MOV A,R7
        CJNE A,#0,LOOP6;A不等于0,则继续循环
        LCALL DISPLAY2;再执行一遍,0也要显示
LJMP STATE1

;不闪烁状态调用
DISPLAY1:PUSH ACC;保护现场
        MOV A,R6;东西方向数值进累加器A
        MOV B,#10;为寄存器B赋值10
        DIV AB;进制转换,十位给A,个位给B
        MOV DPTR,#TABLE;查表指令三剑客,配合TABLE使用
        MOVC A,@A+DPTR
        MOV P2,A;十位数码管点亮
        MOV A,B
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P0,A;个位数码管点亮

        MOV A,R7;南北方向数值进累加器A
        MOV B,#10;为寄存器B赋值10
        DIV AB;进制转换,十位给A,个位给B
        MOV DPTR,#TABLE;查表指令三剑客,配合TABLE使用
        MOVC A,@A+DPTR
        MOV P2,A;十位数码管点亮
        MOV A,B
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P0,A;个位数码管点亮
        LCALL DELAY1;调用延时程序,调用两次0.5,不用写1s的延时程序了hhh
        LCALL DELAY1
        POP ACC;恢复现场
        RET
;闪烁的状态调用
DISPLAY2:PUSH ACC;保护现场
        MOV A,R6;东西方向数值进累加器A
        MOV B,#10;为寄存器B赋值10
        DIV AB;进制转换,十位给A,个位给B
        MOV DPTR,#TABLE;查表指令三剑客,配合TABLE使用
        MOVC A,@A+DPTR
        MOV P2,A;十位数码管点亮
        MOV A,B
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P0,A;个位数码管点亮

        MOV A,R7;南北方向数值进累加器A
        MOV B,#10;为寄存器B赋值10
        DIV AB;进制转换,十位给A,个位给B
        MOV DPTR,#TABLE;查表指令三剑客,配合TABLE使用
        MOVC A,@A+DPTR
        MOV P2,A;十位数码管点亮
        MOV A,B
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P0,A;个位数码管点亮
        LCALL DELAY1;调用延时程序
        POP ACC;恢复现场
        RET
;********闪烁程序,间隔0.5s************这里不用了,直接写到主程序内部
SPARKLE:SETB R_EW;点亮东西红灯
        SETB G_NS;点亮南北绿灯
        LCALL DELAY1
        CLR G_NS;熄灭南北绿灯
        LCALL DELAY1
        RET      
;********延时程序,延时0.5s************
DELAY1:MOV R0,#15
       D1:MOV R1,#202
       D2:MOV R2,#81
       D3:DJNZ R2,$;  R2一直减1,直到减为0,执行下面语句
       DJNZ R1,D2
       DJNZ R0,D1
       RET
;***********数码管共阳极字符表(低电平点亮)*********
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;配合查表指令使用        
END 

资源链接

链接:https://pan.baidu.com/s/1FOfYZcAPmIF6ZxGwyE21LQ?pwd=0000
提取码:0000
–来自百度网盘超级会员V4的分享文章来源地址https://www.toymoban.com/news/detail-490551.html

到了这里,关于基于Proteus仿真的交通信号灯设计——利用汇编语言实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于AT89C52单片机的交通信号灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87772657 源码获取 主要内容: 本次设计所提出的一种基于单片机技术的简易计算器的方案,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功

    2024年02月10日
    浏览(42)
  • Verilog设计交通信号灯

    目录 一、设计要求 二、模块总和 三、模块设计 1.顶层模块 2.分频模块 3.计数模块 4.状态机模块 5.倒计时模块 6.数码显示模块 7.约束代码 四、引脚分配 五、板上测试 总结 1.利用 NEXYS4 DDR 开发板设计一款交通灯控制系统,能够显示红、黄、绿灯; 2.交通灯控制系统具有秒表倒

    2024年02月12日
    浏览(37)
  • 【论文笔记】IntelliLight智能交通灯:一种基于强化学习的智能交通信号灯控制方法

    博客声明:本文仅为个人论文阅读笔记,大部分原文对照的中文为翻译而来,只对其中错误明显的部分作了修改。其他一些个人理解不到位或有误的地方也尽请见谅。 标题原文: IntelliLight:A Reinforcement Learning Approach for Intelligent Traffic Light Control 论文来源: Proceedings of the 24

    2024年04月12日
    浏览(43)
  • 交通信号灯课程设计(红绿灯)

    一、设计指标 1.1对设计课题进行简要阐述        由一条主干道和一条支干道的汇合点形成十字交叉路口,为确保车辆安全、迅速地通行,在交叉路口的每个人口处设置了红、绿、黄三色信号灯。        (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关

    2024年02月09日
    浏览(44)
  • Verilog设计实例(二):交通信号灯设计实例

    本文为Verilog实例开发的第二弹,缺少Verilog代码练手或者有些生疏的可以在这里参考一些设计实例进行练习。 本系列导航: Verilog设计实例(一):自动售货机设计实例 设计一个交通灯控制电路,红灯30s后转为绿灯。共x,y方向两组交通灯,每组红绿灯各一个,红灯亮30s,绿

    2024年02月03日
    浏览(77)
  • 数电课程设计——课设二:交通信号灯

     一、实验内容 (1)十字路口有 x、y 方向两组交通信号灯,每组有红、黄、绿灯各一个; (2)设计一个交通灯控制电路,模拟十字路口交通灯工作情况,红灯亮 35s,黄灯亮 5s,绿 灯亮 30s; (3)设系统时钟频率为 50MHz,要求用数码管显示计时结果; (4)掌握 Verilog HDL 的

    2024年02月09日
    浏览(42)
  • 基于51单片机的交通信号灯

    本设计学校的一次单片机实训。 利用51单片机控制各个路口红绿灯及时间显示。 1、题目要求 1、各个路口红绿灯亮灭的规则,暂不考虑左转方向; 2、倒计时的实现,利用单片机的定时器进行计数得到秒信号; 3、时间显示:东西南北四个方向的时间一致,当东西方向为60秒绿

    2024年01月24日
    浏览(41)
  • 基于单片机的交通信号灯控制

    目录 一、方案流程及技术规格书设计 二、系统硬件电路设计 三、系统软件设计 四、系统调试测试与分析 前言        伴随着越来越多的家用小轿车的出现,道路安全问题也越来越被人们重视,当今,红绿灯也被安装在各个路口,来规范人们的驾驶习惯,红灯停,绿灯行的

    2024年02月03日
    浏览(31)
  • AI:05- - 基于深度学习的道路交通信号灯的检测与识别

    🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、

    2024年02月03日
    浏览(38)
  • 基于FPGA的倒计时交通信号灯系统(使用quartusII)

    好久没更新,转眼大二下了,去年我的城市经历新冠疫情,我自己也沉迷于某csgo游戏开摆500小时,终于在上个月醒悟,正式开始fpga的学习,是跟这实验室的一位带工程师学习的,话不多说开始。 主要看着B站开源骚客和小梅哥的视频,开源骚客的视频我看完了,最近在看小梅

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包