单片机模拟交通灯系统带多功能加蜂鸣器含源代码仿真图
- 格式:doc
- 大小:423.00 KB
- 文档页数:21
目录摘要......................................................................................I1概述 (1)1.1引言 (1)1.2设计任务和要求 (1)1.3系统总设计 (1)1.4交通灯过程分析 (1)2详细设计 (4)2.1硬件设计 (4)2.2软件设计 (6)3仿真与调试 (7)3.1调试 (7)3.2仿真结果 (8)4硬件电路优化 (10)结束语 (11)参考文献 (12)致谢 (13)附录1 (14)1概述1.1引言随着微控技术的日益完善和发展,单片机的应用在不断走向深入。
它的应用比定导致传统的控制技术从根本上发生变革。
也就是说单片机应用的出现是对传统控制技术的革命。
它在工业控制、数据采集、智能化仪表、机电一体化、家用电器等领路得到了广泛应用,极大的提高了这些领域的技术水平和自动化控制。
因此单片机的开发应用已成为高技术工程领域的一项重大课题。
因此了解单片机知识,掌握单片机的应用技术具有重大的意义。
本文主要从计算机的应用上来实现十字路口交通灯智能化的管理,用以控制过往车辆的正常运作。
1.2 设计任务和要求在一个十字路口,四个流向的主车道,各主车道有左行车道、直行车道、右行车道以及人行道,各有表示左转、直行、右转和人行道的交通信号灯。
红灯停30秒后,由红灯转为黄灯,黄灯停5秒。
同时显示时间,且紧急情况全路口为红灯。
1.3 系统总设计图1.1系统框图1.4 交通灯过程分析分别用1、2、3、4表明四个流向的主车道,用A、B、C、P分别表示各主车道的左行车道、直行车道、右行车道以及人行道。
用a、b、c、p分别表示左转、直行、右转和人行道的交通信号灯。
图1.2一个十字路口交通示意图交通灯闪亮的过程:路口1的车直行时的所有指示灯情况为:3a3b2p绿3c红+4a4b4c 3p全红+1c 绿1a1b4p红+2c绿2a2b1p红路口2的车直行时的所有指示灯情况为:4a4b3p绿4c红+ 1a1b1c 4p全红+ 2c绿2a2b1p红+3c绿3a3b2p红路口3的车直行时的所有指示灯情况为:1a1b4p绿1c红+ 2a2b2c 1p全红+3c绿3a3b2p红+4c 绿4a4b3p红路口4的车直行时的所有指示灯情况为:2a2b1p绿2c红+3c3a3b2p全红+4c 绿4a4b3p红+1c绿1a1b4p红。
/*交通灯控制系统C语言源程序*//*Author:ZhaoWenjie All Rights Reserved*/ /*2009/10/18*/#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar data buf[4];uchar data sec_dx=20;//东西数默认uchar data sec_nb=30;//南北默认值uchar data set_timedx=20;uchar data set_timenb=30;int n;uchar data b;//定时器中断次数//sbit k1=P1^6;//定义5组开关//sbit k2=P1^7;//sbit k3=P2^7;//sbit k4=P3^0;//sbit k5=P3^1;//定义5组开关sbit k4=P3^7; //切换方向sbit k1=P3^5; //时间加sbit k2=P3^6; //时间减sbit k3=P3^4; //确认sbit k5=P3^1; //禁止// P3^2 //只允许东西方向通行// P3^3 //只允许南北方向通行sbit Y ellow_nb=P2^5; //南北黄灯标志sbit Y ellow_dx=P2^2; //东西黄灯标志sbit Green_nb=P2^4;sbit Green_dx=P2^1;sbit Buzz=P3^0;bit Buzzer_Indicate;bit time=0;//灯状态循环标志bit set=1;//调时方向切换键标志uchar code table[11]={ //共阴极字型码0x3f, //--00x06, //--10x5b, //--20x4f, //--30x66, //--40x6d, //--50x7d, //--60x07, //--70x7f, //--80x6f, //--90x00 //--NULL};//函数的声明部分void delay(int ms);//延时子程序void key();//按键扫描子程序void key_to1();//键处理子程序void key_to2();void key_to3();void display();//显示子程序void logo(); //开机LOGOvoid Buzzer();//主程序void main(){TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET0=1;TR0=1;EX0=1;EX1=1;logo();P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯sec_nb=sec_dx+5;while(1){key(); //调用按键扫描程序display(); //调用显示程序Buzzer();}}//函数的定义部分void key() //按键扫描子程序{if(k1!=1){delay(10);if(k1!=1){while(k1!=1){key_to1();for(n=0;n<40;n++){ display();}}}}if(k2!=1){delay(10);if(k2!=1){while(k2!=1){key_to2();for(n=0;n<40;n++){ display();}}}}if(k3!=1){TR0=1; //启动定时器Buzzer_Indicate=0;sec_nb=set_timenb; //从中断回复,仍显示设置过的数值sec_dx=set_timedx;if(time==0){ P2=0X99;sec_nb=sec_dx+5; }else { P2=0xC3;sec_dx=sec_nb+5; }}if(k4!=1){delay(5);if(k4!=1){while(k4!=1);set=!set;}}if(k5!=1){delay(5);if(k5!=1){while(k5!=1)key_to3();}}}void display() //显示子程序{buf[1]=sec_dx/10; //第1位东西秒十位buf[2]=sec_dx%10; //第2位东西秒个位buf[3]=sec_nb/10; //第3位南北秒十位buf[0]=sec_nb%10; //第4位南北秒个位P1=0xff; // 初始灯为灭的P0=0x00;P1=0xfe; //片选LCD1P0=table[buf[1]];delay(1);P1=0xff;P0=0x00;P1=0xfd; //片选LCD2P0=table[buf[2]];delay(1);P1=0xff;P0=0x00;P1=0Xfb; //片选LCD3P0=table[buf[3]];delay(1);P1=0xff;P0=0x00;P1=0Xf7;P0=table[buf[0]]; //片选LCD4delay(1);}void time0(void) interrupt 1 using 1 //定时中断子程序{b++;if(b==19) // 定时器中断次数{ b=0;sec_dx--;sec_nb--;if(sec_nb<=5&&time==0) //东西黄灯闪{ Green_dx=0;Y ellow_dx=!Y ellow_dx;}if(sec_dx<=5&&time==1) //南北黄灯闪{ Green_nb=0;Y ellow_nb=!Y ellow_nb;}if(sec_dx==0&&sec_nb==5)sec_dx=5;if(sec_nb==0&&sec_dx==5)sec_nb=5;if(time==0&&sec_nb==0){ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}if(time==1&&sec_dx==0){P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}}}void key_to1() //键盘处理子程序之+{TR0=0; //关定时器if(set==0)set_timenb++; //南北加1Selseset_timedx++; //东西加1Sif(set_timenb==100)set_timenb=1;if( set_timedx==100)set_timedx=1; //加到100置1sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;}void key_to2() //键盘处理子程序之-{TR0=0; //关定时器if(set==0)set_timenb--; //南北减1Selseset_timedx--; //东西减1Sif(set_timenb==0)set_timenb=99;if( set_timedx==0 )set_timedx=99; //减到1重置99sec_nb=set_timenb ; //设置的数值赋给东西南北sec_dx=set_timedx;}void key_to3() //键盘处理之紧急车通行{TR0=0;P2=0Xc9;sec_dx=00;sec_nb=00;Buzzer_Indicate=1;}void int0(void) interrupt 0 using 1 //只允许东西通行{TR0=0;P2=0Xc3;Buzzer_Indicate=0;sec_dx=00;sec_nb=00;}void int1(void) interrupt 2 using 1 //只允许南北通行{TR0=0;P2=0X99;Buzzer_Indicate=0;sec_nb=00;sec_dx=00;}void logo()//开机的Logo "- - - -"{ for(n=0;n<50;n++){P0=0x40;P1=0xfe;delay(1);P1=0xfd;delay(1);P1=0Xfb;delay(1);P1=0Xf7;delay(1);P1 = 0xff;}}void Buzzer(){if(Buzzer_Indicate==1)Buzz=!Buzz;else Buzz=0;}void delay(int ms) //延时子程序{uint j,k;for(j=0;j<ms;j++)for(k=0;k<124;k++);}。
51单片机交通灯仿真原理交通灯是城市道路交通指示设施中最重要的一种,它可以用来引导车辆和行人在道路上安全通行。
在交通繁忙的路口,交通灯起到了非常关键的作用。
本文将介绍使用51单片机对交通灯进行仿真的原理。
交通灯通常包括红灯、黄灯和绿灯这三种状态。
红灯表示停止,黄灯表示警告,绿灯表示行驶。
在信号灯中,红灯和绿灯的时间比较长,黄灯的时间比较短。
下面是使用51单片机进行交通灯模拟的步骤:1.硬件连接:首先,我们需要将51单片机与LED灯连接起来。
假设使用3个LED灯分别模拟红灯、黄灯和绿灯,将它们分别连接到单片机的3个IO口上。
2.程序编写:使用汇编或C语言编写程序,实现交通灯的工作逻辑。
以下是一个简单的示例代码:```#include <reg51.h>#define LED_RED P0 // 定义红灯连接的IO口#define LED_YELLOW P1 // 定义黄灯连接的IO口#define LED_GREEN P2 // 定义绿灯连接的IO口void delay(unsigned int t)while(t--);void mainwhile(1)//红灯亮,其他灯灭LED_RED=0x01;LED_YELLOW=0x00;LED_GREEN=0x00;delay(5000); //等待5秒//绿灯亮,其他灯灭LED_RED=0x00;LED_YELLOW=0x00;LED_GREEN=0x01;delay(5000); //等待5秒//黄灯亮,其他灯灭LED_RED=0x00;LED_YELLOW=0x01;LED_GREEN=0x00;delay(2000); //等待2秒}```4.运行仿真:将单片机连接到电源后,程序开始执行。
红灯亮起5秒后,绿灯亮起5秒,然后黄灯亮起2秒,然后循环往复。
通过以上步骤,我们成功完成了51单片机交通灯仿真。
在实际应用中,可以通过增加传感器等组件实现更多的功能,如人行道上的行人信号灯、车辆流量检测等,进一步提高交通灯的智能化和人性化。
基于单片机的交通灯系统设计仿真交通信号灯系统是城市交通管理中的重要组成部分,其稳定性和可靠性对交通安全和交通效率有着重要的影响。
为了提高交通信号灯系统的灵活性和智能化程度,本文将基于单片机技术对一种交通信号灯系统进行设计和仿真。
一、系统设计1.系统功能需求本交通信号灯系统需要能够智能地控制交通信号灯的状态,根据不同车辆和行人的需求进行合理的信号灯切换。
系统需要包括红灯、绿灯、黄灯三种状态,并能够根据不同条件进行合理的切换,保障交通的顺利进行。
2.系统硬件设计本系统主要由单片机、交通信号灯、传感器和显示器等硬件组成。
单片机作为系统的核心控制器,能够根据传感器的信号进行智能判断,并控制交通信号灯的状态。
交通信号灯模块包括红灯、黄灯和绿灯,能够根据单片机的控制信号进行状态显示。
传感器主要用于检测车辆和行人的情况,传输给单片机进行处理。
显示器用于显示当前的交通信号灯状态,方便行人和车辆进行参考。
3.系统软件设计系统软件主要包括单片机的程序设计和交通信号灯的状态控制算法。
单片机的程序设计需要根据传感器的信号进行智能判断,根据交通情况合理地控制交通信号灯的状态。
交通信号灯的状态控制算法需要考虑到各种交通情况,包括车辆的数量、行人的情况、交通流量等因素,通过合理的算法进行信号灯状态的切换。
二、系统仿真针对以上设计的交通信号灯系统,我们进行了基于单片机的系统仿真。
我们利用Keil C编程软件对单片机的程序进行开发,并通过Proteus进行系统的仿真。
2.系统硬件连接我们将设计好的单片机程序和交通信号灯模块通过Proteus进行硬件连接,模拟真实的系统环境。
我们通过传感器模拟车辆和行人的情况,检测信号传输给单片机进行处理。
3.系统仿真测试在系统硬件连接完成后,我们进行了系统的仿真测试。
我们模拟了不同情况下的交通流量,观察交通信号灯的状态切换情况,并对系统的稳定性和可靠性进行了测试。
通过对系统仿真的观察和结果分析,我们对系统的性能进行了评估并对系统进行了改进和优化。
电气工程学院单片机课程设计实验报告班级:…………姓名:学号:…………设计题目:十字路口交通灯系统设计设计时间:…………………………评定成绩:评定教师:目录一、调试过程 (2)1.1调试详细步骤和过程: (2)1.2软件调试遇到的问题及解决过程说明 (2)1.3软件仿真运行和硬件实际验证的区别 (2)二、运行效果 (4)2.1 Proteus仿真运行结果: (4)2.2硬件调试效果 (7)三、系统优化 (8)3.1软件设计 (8)3.2硬件设计 (8)四、设计总结 (9)附件 (11)一、调试过程1.1调试详细步骤和过程:(1)用Keil5软件编写好源程序,编译后无错误,生成hex文件。
(2)在Proteus中画出所设计的硬件电路原理图,将生成的hex文件导入Proteus 中AT89C51单片机中。
(3)点击运行按钮进行模拟仿真。
在矩阵键盘中依次输入不同的数值观察数码管所显示的数字是否是减计数的显示方式,同时观察LED二极管是否实现:东西为绿灯黄灯时,南北为红灯;南北为绿灯黄灯时,东西为红灯。
绿灯最后 3 秒内具有闪烁功能,绿灯转为红灯前,黄灯时间持续3 秒。
(4)记录仿真结果。
仿真调试中出现了矩阵键盘输入有时不能识别的问题,经过调整延时时间和扫描矩阵键盘时间,减小了不能识别矩阵键盘输入数值的几率。
同时还出现了LED 发光二极管显示过慢问题,同样经过修改了延时时间问题得到了解决。
1.2软件调试遇到的问题及解决过程说明在编译代码完成后进行仿真调试时数码管总是会显示乱码,经检查后发现是数码管数组代码书写有误,改正后能正确显示,无乱码。
在数码管显示无误后发现时间减一显示时,总是会有跳动不稳定,后来经过网络查询后,发现可能是没有进行消隐,在进行消音后,此现象消失,代码运行非常顺畅。
1.3软件仿真运行和硬件实际验证的区别Proteus作为单片机仿真软件具有很多优点,它不仅能仿真单片机CPU的工作情况,而且能仿真单片机外围电路等其他情况,以极度理想化的情况实现理论上可行的实验,给我们开发节省大量的材料和时间精力,然而,Proteus仿真成功并不能代表实际上可行。
基于单片机STC89C52RC的交通灯摘要:本交通灯系统采用STC89C52RC作为核心控制器,控制红绿黄三盏灯,来达到模拟日常交通灯系统,其中倒计时时间通过1602显示出来。
关键词:交通灯1602液晶一、设计方案整个模拟交通灯系统用单片机STC89C52RC作为核心控制器,有序的控制着红黄绿三盏灯的运行,实际交通灯系统所需的倒计时时间采用1602显示出来,并且其倒计时时间可通过独立式键盘进行调整。
系统框图二、主程序流程图三、附录------源程序(C)一、the main function of this system/**用stc52实现简易交通灯*/#include<reg52.h>#include<intrins.h>#include "define.h"#include "lcd_1602.h"#include "delay.h"#include "some_inits.h"#include "control.h"/****************************************主函数void main()****************************************/void main(){sys_init();while(1){key_scan(); //扫描键盘delay_ms(100);}}二、include Some .h files(1)defines.h#ifndef _define_h#define _define_h#define uchar unsigned char#define unint unsigned int/* 液晶数据区*/sfr lcd_bus=0x80; //液晶数据口sbit E=P2^7;sbit RW=P2^6;sbit RS=P2^5;/* 定义三盏led */sbit red=P2^0;sbit green=P2^1;sbit yellow=P2^2;/* 定义三个开关*/sbit jia=P1^0; //加一键sbit jian=P1^1; //减一键sbit ok=P1^2; //确认键uchar flag=1; //1,2,3:绿灯,黄灯,红灯bit first=0;/* 蜂鸣器*/sbit bell=P1^4;uchar sec_h; //秒针十位uchar sec_l; //秒针个位uchar g_h=1,g_l=0;//绿灯计时数据uchar y_h=1,y_l=0;//黄灯计时数据uchar r_h=1,r_l=0;//红灯计时数据#endif(2)some_inits.h#ifndef _some_inits_h#define _some_inits_h#include "lcd_1602.h"#include "define.h"//state some functionsvoid L1602_init();void Time0_init();/*系统初始化*/void sys_init(){flag=1; //绿灯green=1;red=0;yellow=0;L1602_init();//1602液晶初始化Time0_init();//定时器0初始化}/*1602初始化*/void L1602_init(void){enable(0x01);enable(0x38);enable(0x0c);enable(0x06);enable(0xd0);L1602_string(1,2,"traffic lights");sec_h=g_h;sec_l=g_l;L1602_char(2,8,sec_h+0x30);L1602_char(2,9,sec_l+0x30);}/* 定时器0初始化*/void Time0_init(){TMOD=0x01; //time0,time1工作在方式一IE=0x8a; //开EA,允许ET0,允许ET1TH0=0x4c; //50ms,晶振是11.0592MTL0=0x00;//TH1=0xfc; //1ms//TL1=0x66;TR0=1; //time0开始计数}#endif(3)control.h #ifndef _control_h_#define _control_h_#include <intrins.h>#include "lcd_1602.h"#include "define.h"#include "delay.h"/* state some functions */void inc();void dec();void fmq();/* 键盘扫描函数*/void key_scan(){if(ok==0){delay_ms(5);if(ok==0){fmq();enable(0x0c); //关光标first=0;TR0=1; //开始计数}else _nop_();}else if(jia==0 || jian==0){delay_ms(5);if(jia==0 || jian==0){TR0=0; // 停止计数fmq();while(!first){first=1;enable(0x0f); //开光标,开反白}if(jia==0) inc();else if(jian==0) d ec();}else{_nop_();}}}/* 加一*/void inc(void){_nop_();if(green==1 && yellow==0 && red==0) {if(g_l<9 && g_h<5) g_l++;else{if(g_h<5){g_h++;g_l=0;}else{g_h=5;g_l=0;}}sec_h=g_h;sec_l=g_l;}else if(yellow==1 && red==0 && green==0) {if(y_l<9 && y_h<5) y_l++;else{if(y_h<5){y_h++;y_l=0;}else{y_h=5;y_l=0;}}sec_h=y_h;sec_l=y_l;}else if(red==1 && green==0 && yellow==0 ) {if(r_l<9 && r_h<5) r_l++;else{if(r_h<5){r_h++;r_l=0;}else{r_h=5;r_l=0;}}sec_h=r_h;sec_l=r_l;}L1602_char(2,9,sec_l+0x30);L1602_char(2,8,sec_h+0x30);}/* 减一*/void dec(void){_nop_();if(green==1 && yellow==0 && red==0){if(g_l>0 && g_h>0){g_l--;}else{if(g_h>0){g_h--;g_l=9;}else if(g_l>0){g_l--;}else{g_h=0;g_l=0;}}sec_h=g_h;sec_l=g_l;}else if(yellow==1 && green==0 && red==0) {if(y_l>0 && y_h>0){y_l--;}else{if(y_h>0){y_h--;y_l=9;}else if(y_l>0){y_l--;}else{y_h=0;y_l=0;}}sec_h=y_h;sec_l=y_l;}else if(red==1 && yellow==0 && green==0) {if(r_l>0 && r_h>0){r_l--;}else{if(r_h>0){r_h--;r_l=9;}else if(r_l>0){r_l--;}else{r_h=0;r_l=0;}}sec_h=r_h;sec_l=r_l;}L1602_char(2,9,sec_l+0x30);L1602_char(2,8,sec_h+0x30);}/* 蜂鸣器鸣响一声*/void fmq(){unint i=150;while(i--){bell=~bell;delay_ms(1);}}/* time0 service function */void time0() interrupt 1{static count=0;TR0=0;if(count==20) //1s{count=0;if(sec_l==0){if(sec_h==0) //30s结束{if(flag==1){flag++;green=1;red=0;yellow=0;sec_h=g_h;sec_l=g_l;}else if(flag==2) //状态二,亮黄灯{flag++;green=0;red=0;yellow=1;sec_h=y_h;sec_l=y_l;}else if(flag==3)//状态三,红灯亮{flag=1; //回到状态一,绿灯亮green=0;red=1;yellow=0;sec_h=r_h;sec_l=r_l;}}else //个位为0而已{sec_h--;sec_l=9;}}else{sec_l--;}L1602_char(2,8,sec_h+0x30);L1602_char(2,9,sec_l+0x30);}else{count++;}TH0=0x4c;TL0=0x00;TR0=1;}#endif(4)lcd_1602.h#ifndef _lcd_1602_h#define _lcd_1602_h#include "define.h"#include "delay.h"uchar Convert(uchar In_Date){uchar i, Out_Date = 0, temp = 0;for(i=0; i<8; i++){temp = (In_Date >> i) & 0x01;Out_Date |= (temp << (7 - i));}return Out_Date;}/*写命令*/void enable(uchar del){P0 = Convert(del);RS = 0;RW = 0;E = 0;delay();E = 1;delay();}/*写数据*/void write(uchar del){P0 = Convert(del);RS = 1;RW = 0;E = 0;delay();E = 1;delay();}/*写字符*/void L1602_char(uchar hang,uchar lie,char sign) {uchar a;if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);write(sign);}/*写字符串*/void L1602_string(uchar hang,uchar lie,uchar *p) {uchar a;if(hang == 1) a = 0x80;if(hang == 2) a = 0xc0;a = a + lie - 1;enable(a);while(1){if(*p == '\0') break;write(*p);p++;}}#endif。
ORG 0000HLJMP MAINORG 0003HLJMP INTT0ORG 0013HLJMP INTT1ORG 001BHLJMP TT1ORG 0100HTT1: MOV TH1,#0D8H ;定时器1,定时10us MOV TL1,#0F0HDJNZ R6,EXITMOV R6,#100 ;定时器定时100次MOV R1,#0FFHEXIT: RETIINTT0:PUSH PSWMOV P1,#0EEH ;全红灯POP PSWRETIORG 1000HINTT1:PUSH PSWPUSH ACCSS: ORL P2,#0FFH ;置p2口为全高LCALL DELAY1ANL P2,#00H ;置p2口为全低LCALL DELAY1LJMP SSPOP ACCPOP PSWRETIORG 1000HMAIN: SETB EA ;CPU开放中断CLR IT0 ;设为电平触发方式SETB EX0CLR IT1 ;设为电平触发方式SETB EX1MOV R6,#100 ;主程序;MOV R1,#00HMOV TMOD,#10H ;初始化MOV TH1,#0D8HMOV TL1,#0F0HMOV IE,#8DHMOV 20H,#20MOV 21H,#5MOV 22H,#20MOV 23H,#25MOV 24H,#25SETB TR1ST1: MOV P1,#0EBH ;第一个状态,主干道亮绿灯、支干道亮红灯;CJNE R1,#0FFH,TZ1MOV R1,#00HDEC 20HDEC 23HMOV R3,23HLCALL DISP ;调用显示子程序。
MOV A,20HCJNE A,#00H,ST1MOV 20H,#20ST2: MOV P1,#0EDH ;第二个状态,主干道亮黄灯、支干道亮红灯;CJNE R1,#0FFH,TZ2MOV R1,#00HDEC 21HDEC 23HTZ2: MOV R2,21HMOV R3,23HLCALL DISP ;调用显示子程序。
实验报告实验名称:交通灯实验姓名班级日期实验要求:1. 请使用单片机系统主机板和单片机系统键盘、显示板设计一个硬件系统,最终实现一个交通路口红绿灯的控制。
用两个数码管显示秒,8个LED灯分成四组,分别作为十字交叉路口的红绿灯。
2. 相对双向绿灯的最后几秒时,绿灯要闪烁,即亮灭交替,亮灭时间均为0.5秒,然后变成红灯。
3. 每组同学可自行设计进行连接,形成一个单片机硬件系统。
4. 模拟调试完成后,用STC-ISP下载编程软件将生成的*。
HEX文件在线下载到单片机中。
5.下载后,按复位键执行程序,检验程序运行结果。
硬件连线方案:程序流程图:源代码:#include<reg51.h> //51单片机头文件声明unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //定义无符号数组,定义的数据要放在ROM(程序存储区)里面sbit dula=P1^3; //特殊功能位定义,数码管段码控制信号sbit G1=P1^4; //数码管位选控制信号sbit c=P1^5; //c表示P1.0口,地址最高位sbit b=P1^6; //地址次高位sbit a=P1^7; //地址最低位sbit xl=P2^0; //特殊功能位声明,xl表示P2.0口sbit xh=P2^1; //sbit yl=P2^2;sbit yh=P2^3;sbit sl=P2^4;sbit sh=P2^5;sbit zl=P2^7;sbit zh=P2^6;char count=100; //定时时间取10ms,循环100次即为1sunsigned char ssx=14; //秒上下,为上下绿灯亮时倒计数unsigned char szy=10; //秒左右,为左右绿灯亮时倒计数char sx=1; //方向标志,上下绿灯亮void delay(char x) //延时函数,通过for循环进行延时{char a,b;for(a=x;a>0;a--)for(b=100;b>0;b--);}void shumaguanxianshi() //数码管显示函数{if(sx==1) //方向标志假如为上下{ P0=tab[ssx/10]; dula=1; //选择2号管显示秒十位(上下) c=0;b=1;a=0; G1=1;delay(2); //在晶振频率12MHz,延时2ms。
51单片机用C语言实现交通灯(红绿灯)源程序2009-10-29 23:00交通灯,红黄绿灯交替亮,怎样实现呢?其实就是根据单片机定时器及倒计时的程序修改。
源程序如下:/*1、程序目的:使用定时器学习倒计时红绿灯原理主要程序和倒计时一样2、硬件要求:数码管、晶振12M*/#include <reg52.h>bit red,green,yellow,turnred; //定义红、黄、绿及转红标志code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管 0-9unsigned char Dis_Shiwei;//定义十位unsigned char Dis_Gewei; //定义个位void delay(unsigned int cnt) //用于动态扫描数码管的延时程序{while(--cnt);}main(){TMOD |=0x01;//定时器设置 10ms in 12M crystal定时器0,工作方式1,16位定时器TH0=0xd8; //65535-10000=55535=D8F0(十六进制)TL0=0xf0;IE= 0x82; //中断控制,EA=1开总中断,ET0=1:定时器0中断允许TR0=1; //开定时器0中断P1=0xfc;//红灯亮,根据红黄绿接灯的顺序。
red =1;while(1){P0=Dis_Shiwei;//显示十位,这里实现用8位数码管,即左1位P2=0;delay(300);//短暂延时P0=Dis_Gewei; //显示个位,左数,2位P2=1;delay(300);}}/********************************//* 定时中断 *//********************************/void tim(void) interrupt 1 using 1{static unsigned char second=60,count; //初值60TH0=0xd8;//重新赋值,10毫秒定时TL0=0xf0;count++;if (count==100){count=0;second--;//秒减1if(second==0){ //这里添加定时到0的代码,可以是灯电路,继电器吸合等,或者执行一个程序if(red) //红灭,先转黄{red=0;yellow=1;second=4;P1=0xF3;//黄灯亮4秒,黄灯为过渡灯,再根据情况转绿或转红}else if(yellow && !turnred){yellow=0;green=1;second=25;P1=0xCF;//绿灯亮25秒,}else if(green){yellow=1;green=0;second=4;P1=0xF3;//黄灯亮4秒turnred=1;}else if(yellow && turnred) //绿灯灭,转黄灯,后红灯,turnred=1时{red=1;yellow=0;P1=0xFC;//红灯亮60秒second=60;turnred=0; //接下来是转黄,绿。
基于单片机的交通信号灯模拟系统设计主要内容:利用单片机中的定时器、IO接口、中断系统等资源,设计一个十字路口交通信号灯的控制模拟系统。
基本要求:(1)利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭。
(2)可通过按键对红绿灯点亮和熄灭时间进行调整及设置。
(3)能对红绿灯点亮和熄灭时间进行倒计时时间显示。
提高部分:(4)可进行紧急或特殊情况的人工处理控制。
(5)有内部24小时钟,可根据时间表对对红绿灯点亮和熄灭时间进行自动调整。
(如高峰期:7:30-8:30,17:00-18:30或夜间时段红绿灯主次干道时长比等)。
(6)可根据交通流量自动调整对红绿灯点亮和熄灭时间。
程序:Z8279 EQU 0FF82H ;8279 状态/命令口地址D8279 EQU 0FF80H ;8279 数据口地址LEDMOD EQU 00H ;左边输入八位字符显示;外部译码键扫描方式,双键互锁LEDFEQ EQU 2FH ;扫描速率LEDCLS EQU 0C1H ;清除显示RAMLEDWR0 EQU 80H ;设定的将要写入的显示RAM地址READKB EQU 40H ;读FIFO RAM 地址0 的命令字;-------------------------------------------------------------------------------------ORG 0000HLJMP STARTORG 0003HLJMP EMERGENCYORG 000BH ;定时器中断的入口地址LJMP COUNTERORG 0040HSTART:MOV SP,#60HLCALL INIT8279 ;初始化MOV TMOD,#01HMOV TL0,#056H ;50ms时间常数MOV TH0,#4CHMOV R2,#20 ;设置循环次数20次,定时1sMOV R3,#1MOV 20H,#5MOV 21H,#2MOV R6,#06H ;时MOV R1,#59H ;分MOV R0,#45H ;秒MOV R7,#00H ;交通灯状态选择SETB ET0 ;允许定时器中断,SETB TR0 ;启动T0SETB EX0 ;允许外部中断中断SETB IT0 ;外部中断为电平触发方式SETB EA ;开CPU开中断;---------------------------------------------------------------------------------- WAIT:LCALL GETKEY ;读键盘CJNE A,#0FFH,CONT ;判断是否有键输入MOV A,BCJNE A,#3CH,KEY_B ;输入键是'C',转CLEAR_TLCALL CLEAR_TKEY_B:CJNE A,#3BH,KEY_A ;输入键是'B',转SET_TLCALL SET_TKEY_A: ;输入键是'A',转START_TCJNE A,#3AH,KEY_ELCALL START_TKEY_E: ;输入键是'E',进行高峰处理,调整时间CJNE A,#3EH,KEY_FMOV 20H,#10 ;红绿灯时间为10sKEY_F: CJNE A,#3FH,KEY_D ;输入是'F',进行低峰处理,调整时间MOV 20H,#3KEY_D: CJNE A,#3DH,CONT ;输入是'D',进行常态处理,调整时间MOV 20H,#5CONT:LCALL DISPLAY ;显示时间SJMP WAIT ;循环CLEAR_T: ;时间清零CLR TR0MOV R3,#0HMOV R6,#0H ;时MOV R1,#0H ;分MOV R0,#0H ;秒LCALL DISPLAYRETSTART_T: ;电子钟计时子程序SETB TR0RETSET_T: ;设置初值子程序CLR TR0 ;关计数器MOV R4,#1LCALL GETWORD ;读秒数CJNE A,#0FFH,INV ALID ;判断输入合法性MOV A,BADD A,#156JC INV ALID ;判断输入秒值<100MOV A,BCJNE R7,#01H,T1 ;若为状态1,保存输入值MOV 20H,AMOV R3,20HLCALL DISPLAYT1: CJNE R7,#02H,T2 ;若为状态2,保存输入值MOV 21H,AMOV R3,21HLCALL DISPLAYT2: CJNE R7,#03H,T3 ;若为状态3,保存输入值MOV 20H,AMOV R3,20HLCALL DISPLAYT3: CJNE R7,#00H,T4 ;若为状态4,保存输入值MOV 21H,AMOV R3,21HLCALL DISPLAYT4: SETB TR0RETINV ALID:LCALL CLEAR_T ;时间清零;------------------------------------------------------------------------------------ GETWORD: ;读数子程序WKEY1:LCALL GETKEY ;读键盘CJNE A,#0FFH,WKEY1;无键输入,则再读MOV A,BADD A,#0C6HJC ERROR1 ;判断输入是否大于MOV A,BSUBB A,#30HJC ERROR1 ;判断输入是否小于MOV R5,ALCALL DISLED ;显示输入的字符MOV B,#10MUL ABPUSH ACC ;保存输入的值WKEY2:LCALL GETKEY ;读键盘CJNE A,#0FFH,WKEY2;无键输入则再读MOV A,BADD A,#0C6H ;判断输入是否大于JC ERROR2MOV A,BSUBB A,#30H ;判断输入是否小于JC ERROR2DEC R4MOV R5,ALCALL DISLED ;显示输入的字符MOV B,APOP ACCADD A,BMOV B,A ;把得到的值存在BMOV A,#0FFH ;置合法输入标志AJMP KEYOKERROR2: POP ACCERROR1: MOV A,#0 ;置非法输入标志KEYOK: RET;-------------------------------------------------------------------------------------------- ;定时器的中断服务程序COUNTER: ;INT_T0中断服务子程序PUSH ACC ;保护现场PUSH PSWCLR T R0MOV TL0,#056H ;重新设置初值MOV TH0,#4CHLCALL DISPLAY ;1s时间到,显示当前倒计时的时间DJNZ R2,RETURN1MOV R2,#20HCJNE R0,#59H,SECOND;判断秒=59MOV R0,#99HCJNE R1,#59H,MINUTE;判断分=59MOV R1,#99HCJNE R6,#23H,HOUR ;判断时=23MOV R6,#99HHOUR:MOV A,R6ADD A,#1 ;时加1DA AMOV R6,AMINUTE:MOV A,R1ADD A,#1 ;分加1DA AMOV R1,ASECOND:MOV A,R0ADD A,#1 ;秒加1DA AMOV R0,ACJNE R6,#5H,TURNLJMP TURNTURN: LCALL DISPLAY1MOV A,R7 ;显示交通灯的状态SUBB A,#02HJNC L3CJNE R7,#00H,L2 ;通过标志位来判断交通灯当前的状态DJNZ R3,RETURNCJNE R6,#5H,SHMOV 20H,#10MOV 21H,#3SH: JC SH1MOV 20H,#10MOV 21H,#3CJNE R6,#7H,SH1MOV 20H,#5MOV 21H,#2SH1: JC SH2MOV 20H,#5MOV 21H,#2SH2: MOV R3,20HMOV DPTR,#8300H ;南北绿灯,东西红灯MOV A,#96HMOVX @DPTR,AMOV R7,#01H ;设置交通灯状态标志为下一个状态SJMP RETURNRETURN1:LJMP RETURNL2:DJNZ R3,RETURNMOV DPTR,#8300H ;南北黄灯,东西红灯MOV A,#06HMOVX @DPTR,AMOV R7,#02HSJMP RETURNL3:CJNE R7,#02H,L4DJNZ R3,RETURNMOV R3,20HMOV DPTR,#8300H ;南北红灯,东西绿灯MOV A,#69HMOVX @DPTR,AMOV R7,#03HSJMP RETURNL4:DJNZ R3,RETURNMOV R3,21HMOV DPTR,#8300H ;南北红灯,东西黄灯MOV A,#09HMOVX @DPTR,AMOV R7,#00HRETURN:SETB TR0POP PSW ;恢复现场POP ACCRETI;------------------------------------------------------------------------------------ EMERGENCY:PUSH PSW ;保护现场PUSH ACCMOV DPTR,#8300HMOV A,#0FH ;南北,东西都亮红灯MOVX @DPTR,AMOV R3,#10LCALL DISPLAYSETB TR0 ;启动定时器POP ACC ;恢复现场POP PSWRETI;---------------------------------------------------------------------------INIT8279: ;8279初始化子程序PUSH DPH ;保存现场PUSH DPLLCALL DELAY ;延时MOV DPTR ,#Z8279MOV A,#LEDMOD ;置工作方式MOVX @DPTR,AMOV A,#LEDFEQ ;置键盘扫描速率MOVX @DPTR,AMOV A,#LEDCLS ;清除LED 显示MOVX @DPTR,APOP ACC ;恢复现场POP DPLPOP DPHRET;------------------------------------------------------------------------------------------------ GETKEY: ;读取键盘子程序;输入: 无; 输出: B: 读到的键码A: 按键的标志PUSH DPH ;保存现场PUSH DPLPUSH PSWMOV DPTR,#Z8279MOVX A,@DPTR ;读状态ANL A,#07H ;屏蔽D7-D3JNZ GETV AL ;判断是否有键输入MOV A,#0H ;置标志(无键输入)SJMP RECOVERGETV AL:MOV A,#READKB ;读FIFO RAM 命令MOVX @DPTR,AMOV DPTR,#D8279MOVX A,@DPTR ;读键ANL A,#3FH ;屏蔽SHIFT 和CTRL 键MOV DPTR,#KEYCODE;键码表起始地址MOVC A,@A+DPTR ;查表MOV B,A ;置返回键值MOV A,#0FFH ;置标志(有键输入)RECOVER:POP PSW ;恢复现场POP DPLPOP DPHRET;---------------------------------------------------------------------------------DISLED: ;显示字符子程序;输入: R4,位置R5,值PUSH DPH ;保存现场PUSH ACCMOV A,#LEDWR0 ;置显示起始地址ADD A,R4 ;加位置偏移量MOV DPTR,#Z8279MOVX @DPTR,A ;设定显示位置MOV DPTR,#LEDSEG ;置显示常数表起始位置MOV A,R5MOVC A,@A+DPTR ;查表MOV DPTR,#D8279MOVX @DPTR,A ;显示数据POP ACC ;恢复现场POP DPLPOP DPHRET;------------------------------------------------------------------------------ DELAY: ;延时子程序PUSH 0 ;保存现场PUSH 1MOV 0,#0HDELAY1:MOV 1,#0HDJNZ 1,$DJNZ 0,DELAY1POP 1 ;恢复现场POP 0RET;----------------------------------------------------------------------------- DISPLAY1:MOV A,R6ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#6LCALL DISLED ;显示小时低位MOV A,R6SW AP AANL A,#0FHMOV R5,AMOV R4,#7LCALL DISLED ;显示小时高位MOV A,R1ANL A,#0FHMOV R5,AMOV R4,#4LCALL DISLED ;显示分钟低位MOV A,R1SW AP AANL A,#0FHMOV R5,AMOV R4,#5LCALL DISLED ;显示分钟高位MOV A,R0ANL A,#0FHADD A,#10HMOV R5,AMOV R4,#2LCALL DISLED ;显示秒低位MOV A,R0SW AP AANL A,#0FHMOV R5,AMOV R4,#3LCALL DISLED ;显示秒高位RETDISPLAY:MOV A,R3MOV B,#10DIV ABMOV R5,BMOV R4,#0LCALL DISLED ;显示秒低位MOV R5,AMOV R4,#1LCALL DISLED ;显示秒高位RET;--------------------------------------------------------------------------------------- ;LED显示常数表LEDSEG:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, ';键盘键码表KEYCODE:DB 30H,31H,32H,33H,34H,35H,36H,37H ;'0,1,2,3,4,5,6,7'DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'8,9,A,B,C,D,E,F' END。
单片机课程设计论文
模拟交通灯系统
- 2 - 摘要 本系统由单片机系统、键盘、LED 显示、蜂鸣器、交通灯演示系统组成。系统包括人行道、左转、右转、以及基本的交通灯的功能。系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。
本设计是单片机控制的交通灯控制系统。单片机即单片微型计算机。由RAM,ROM,CPU构成,其集定时、计数和多种接口与一体的微控制器。它体积小、成本低、功能强,广泛的应用于只能产业和工业自动化上。而51系列单片机是各类单片机中最为典型和富有代表性的一种。 本设计的意义在于通过具体控制系统的设计,掌握微机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。使大家能在实践教学环节中,积累设计经验,开拓思维空间,全面提高个人的综合能力。 红绿灯控制是智能交通系统的一个重要部分,本文给出了一个用单片机控制的简易交通红绿灯自动控制系统。该系统适用于十字路口,并对放行和禁行时间进行倒计时显示(秒)。 在车辆通行繁忙的十字交叉路口设置的交通灯控制系统,其特点是:道路较窄而车流量较大,主干道,支干道的车辆通行时间不等,,同时设有道路应急控制。具体的情况是:在正常的情况下,东西支干道通行时间为20秒,南北主干道通行时间为30秒,每个方向在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。并且能够在人工监控状态下,如果一道有车而另一道无车,交通灯控制系统能立即让有车道放行。而且有紧急车辆要求通过时,系统要能禁止普通车辆通行。 关键字:单片机 红绿灯 AT89C51 Proteus仿真 模拟交通灯系统
- 3 - 目录 1 概述 1.1课题名称…………………………………………………………………… 3 1.2设计要求…………………………………………………………………… 3 1.3设计意义…………………………………………………………………… 3 2 系统总体方案及硬件设计 2.1芯片的选择与简单介绍…………………………………………………… 4 2.2工作原理…………………………………………………………………… 6 2.3电路原理图………………………………………………………………… 7 2.4单片机最小系统…………………………………………………………… 7 2.5时间显示电路……………………………………………………………… 8 2.6交通灯电路………………………………………………………………… 9 3 软件设计 3.1整体系统分析……………………………………………………………… 9 3.2相关参数计算……………………………………………………………… 10 3.3程序流程图………………………………………………………………… 10 4 Proteus软件仿真 4.1系统仿真电路图…………………………………………………………… 11 4.2仿真结果分析……………………………………………………………… 12 5课程设计体会…………………………………………………………………… 12 6参考文献………………………………………………………………………… 14 附1:元器件清单………………………………………………………………… 15 附2:系统原理图………………………………………………………………… 15 附3:程序清单…………………………………………………………………… 16 模拟交通灯系统
- 4 - 1 概述 1.1课题名称 单片机控制的交通灯控制系统设计 1.2设计要求 1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒、支干道每次通行间为20秒,时间可设置修改; 2)在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道; 3)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法); 4)一道有车而另一道无车(实验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行; 5)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2 开关模拟; 6)有盲人禁行模式,东西南北红灯亮时蜂鸣器响。 1.3设计意义 国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。加上一个倒计时的显示计时器来控制行车。对于一般情况下的安全行车,车辆分流尚能发挥作用,但根据实际行车过程中出现的情况,还存在以下缺点: 1.两车道的车辆轮流放行时间相同且固定, 在十字路口,经常一个车道为主干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间应该短些。 2.没有考虑紧急车通过时,两车道应采取的措施,臂如,消防车执行紧急任务通过时,两车道的车都应停止,让紧急车通过。 3.没有考虑盲人过马路问题,可以加上蜂鸣器使盲人听到“红灯”。 基于传统交通灯控制系统设计过于死板,红绿灯交替是间过于程式化的缺点,智能交通灯控制系统的设计就更显示出了它的研究意义,它能根据道路交通拥护,交叉路口经常出现拥堵的情况。利用单片机控制技术.提出了软件和硬件设计方案,能够实现道路的最大通行效率。 模拟交通灯系统 - 5 - 2 系统总体方案及硬件设计 2.1芯片的选择与简单介绍 主控芯片采用AT89C51单片机(其管脚图如图1所示)。单片机,亦称单片微型计算机。它是把中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。于是,微型计算机(即单片机)在这种情况下诞生了。纵观生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子 宠物等,这些都离不开单片机。 单片机以体积小、功能全、性价比等诸多优点而独具特色,在工业控制、尖端武器、通信设备、家用电器等嵌入式应用领域中独占鳌头。如果说C语言程序设计课程设计的基础课,那么单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计基础课。 MCS-51单片机是指由美国INTEL公司(大名鼎鼎的INTEL)生产的一系列单片机的总称,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS-51系列单片机。 8051单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: 1.中央处理器(CPU) 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 2.数据存储器(RAM) 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能
图1 模拟交通灯系统 - 6 - 用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 3.程序存储器(内部ROM): 程序存储器用于存放程序和固定不变的常数等。通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。AT89C51内部配置了4KB闪存。 3.1.定时/计数器(ROM): 定时/计数器用于实现定时和计数功能。AT89C51共有2个16位定时/计数器。 3.2.并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。每个口都由1个锁存器和一个驱动器组成。它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。 4.全双工串行口: A89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 5.时钟电路: 时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。 6.中断系统: 中断系统的作用主要是对外部或内部的终端请求进行管理与处理。AT89C51共有5个中断源,其中又2个外部中断源和3个内部中断源。 7.定时/计数器 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
电 源
交通灯 AT89C51
交通灯时间显示部分
时钟电路
复 位 电 路 模拟交通灯系统 - 7 - 2.2工作原理 由软件设置交通灯的初始时间,南北方向通行30秒,东西方向通行20秒,数码管采用动态显示,P0口送字形码,P2口送字位选通信号,通过单片机的P1口控制各种信号灯的燃亮与熄灭。采用中断方式实现按键的功能。
东西方向 EW G Y R 南北方向 NS
G Y R
系统控制 电路
车辆检测 紧急转换