基于Proteus仿真的交通信号灯设计 您所在的位置:网站首页 Proteus8086和汇编设计电梯 基于Proteus仿真的交通信号灯设计

基于Proteus仿真的交通信号灯设计

2024-07-15 11:35| 来源: 网络整理| 查看: 265

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

文章目录 基于Proteus仿真的交通信号灯设计——利用汇编语言实现设计要求基本信息交通状态 电路仿真原理图电路总体布局复位电路晶振电路LED指示灯电路数码管显示电路 汇编语言代码(注释很详细)资源链接

设计要求 基本信息 采用AT89C51单片机晶振频率:12MHZ红绿灯:发光二极管数字显示:LED数码管东西南北四个方向,一次循环共有六个状态,且每个状态的倒计时时间一样 交通状态 东西红灯22s,南北绿灯22s(数码管从0到21);东西红灯5s,南北绿灯5s且没0.5s闪烁一次(数码管从0到4);东西红灯4s,南北绿灯4s且没0.5s闪烁一次(数码管从0到3);东西绿灯22s,南北红灯22s(数码管从0到21);东西绿灯5s且没0.5s闪烁一次,南北红灯5s(数码管从0到4);东西绿灯4s没0.5s闪烁一次,南北红灯4s(数码管从0到3); 电路仿真原理图 电路总体布局

在这里插入图片描述

复位电路

在这里插入图片描述

晶振电路

在这里插入图片描述

LED指示灯电路

在这里插入图片描述

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

数码管显示电路

在这里插入图片描述

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的分享



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有