单片机控制十字路口交通灯

 

单片机原理及应用课程设计

题    目:          十字路口交通灯                        

学    院:        电气与信息工程学院                          

专    业:        电气工程及其自动化            

姓    名:                                     

学    号:                              

指导老师:                                  

完成时间:                                       


成绩评定·

 


一、指导教师评语

二、评分

课程设计成绩评定

 

摘要

随着各种交通工具的发展和交通指挥的需要,第一盏名副其实的三色灯(红、黄、绿三种标志)于1918年诞生。它是三色圆形四面投影器,被安装在纽约市五号街的一座高塔上,由于它的诞生,使城市交通大为改善。黄色信号灯的发明者是我国的胡汝鼎,他怀着“科学救国”的抱负到美国深造,在大发明家爱迪生为董事长的美国通用电器公司任职员。一天,他站在繁华的十字路口等待绿灯信号,当他看到红灯而正要过去时,一辆转弯的汽车呼地一声擦身而过,吓了他一身冷汗。回到宿舍,他反复琢磨,终于想到在红、绿灯中间再加上一个黄色信号灯,提醒人们注意危险。他的建议立即得到有关方面的肯定。于是红、黄、绿三色信号灯即以一个完整的指挥信号家族,遍及全世界陆、海、空交通领域了。

   交通灯控制器设计主要功能是用单片机控制LED灯模拟指示。模拟东西南北方向的十字路口交通灯信号控制情况。以89C52单片机为核心芯片,采用中断方式实现控制。本模拟系统由单片机硬/软件系统,两位8段数码管和LED灯显示系统。和复位电路控制电路等组成,较好的模拟了交通路面的控制。

关键词:交通灯 单片机 数码管


目录

1.概述............................................................1

2系统总体方案及硬件设计...........................................2

  2.1设计内容.....................................................2

  2.2 设计要求.....................................................2

  2.3 总体设计思想.................................................2

  2.4 设计参考.....................................................2

  2.5 知识点准备...................................................2

3各模块设计.......................................................3

  3.1设计项目简介.................................................3

  3.2总体设计.....................................................3

  3.3硬件设计.....................................................3

  3.4软件设计.....................................................9

4软件仿真.........................................................12

5课程设计体会.....................................................13

参考文献...........................................................14

附录一程序清单.....................................................15

附录二系统原理图...................................................21


1概述

    自从1858年英国人,发明了原始的机械扳手交通灯之后,随后的一百多年里,交通灯改变了交通路况,也在人们日常生活中占据了重要地位,随着人们社会活动日益增加,经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通灯更加显示出了它的功能,使得交通得到有效管制,对于交通疏导,提高道路导通能力,减少交通事故有显著的效果。

近年来,随着科技的飞速发展,电子器件也随之广泛应用,其中单片机也不断深入人民的生活当中。本模拟交通灯系统利用单片机AT89C52作为核心元件,实现了通过信号灯对路面状况的智能控制。从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。

本模拟系统由单片机硬/软件系统,两位8段数码管和LED灯显示系统。和复位电路控制电路等组成,较好的模拟了交通路面的控制。

 

2 系统总体方案及硬件设计

2.1设计内容

    交通灯控制器设计主要功能是用单片机控制LED灯模拟指示。模拟东西南北方向的十字路口交通灯信号控制情况。以89C52单片机为核心芯片,采用中断方式实现控制。

(1)数码管选用2位共阴极显示的数码管,共4个;

(2)东西通行时间为80s,南北通行时间为60s,缓冲时间为3s;

2.2 设计要求

? 设计单片机最小系统(包括复位按钮、晶振电路等);

? 绘制实现本设计内容的硬件电路(原理图),系统的组成框图。

? 相应的控制状态表;

? 编写本课程设计内容的软件设计(包含程序流程图和对程序注释)。

? 硬件实验部分可选用实验箱测试或Proteus仿真软件实现。

2.3 总体设计思想(供参考)

? 利用定时器T0产生每10ms一次的中断,每100次中断为1s;

? 对两个方向分别显示红、绿、黄灯的剩余时间即可;

? 用MAX7219芯片实现共阴极显示驱动;

? A方向的红灯时间=方向的绿灯时间+黄灯缓冲时间。

2.4  设计参考

    交通灯控制器设计有电源电路、单片机主控电路、显示电路、信号灯电路等组成,如图1所示:

2.5 知识点准备:

? +5V电源原理及设计;

? MAX7219工作原理;

? 单片机复位电路工作原理及设计(元件选择的依据);

? 单片机晶振电路工作原理及设计(元件选择的依据);

? 数码管显示特性、驱动设计及应用;

? LM1602液晶显示屏特性、驱动设计及应用;

? 89C51单片机引脚资源、引脚分配等;

? 单片机汇编语言及程序设计(中断、延时子程序的设计)。

3各模块设计

3.1设计项目简介

功能:交通灯控制器,通过单片机控制交通灯和数码管,实现4路口交通灯的正确亮灭,并能显示发亮交通灯发亮状态的剩余时间。东西通行时间为80s,南北通行时间为60s,缓冲时间为3s。

类似产品简介:

基于数字电子技术设计的交通灯控制器:元器件多而复杂,连线复杂易出错,设计困难,且功耗较大,不经济,不利于节约环保。

基于PLC技术设计的交通灯控制器:设计程序简单易懂,但价格较贵,不经济。

项目特色:通过单片机控制,进行模块化处理,体积小,功耗低,元器件少且简单,价格实惠,功能齐全,能够实现正常显示,而不会出现4路口交通灯混乱的情况,时间显示正常。

3.2总体设计

总体设计模式图:

用一片AT89C52单片机控制4路口交通灯的亮灭。单片机发送地址、数据信息给MAX7219,通过MAX7219控制数码管的时间显示。

3.3硬件设计

硬件原理图:

电路图:

硬件选型及相关依据:

AT89C52:4组8位I/O输入/输出端口,可满足控制所需I/O口数目要求。可外接时钟电路,有复位管脚,接复位电路可实现复位功能。接5V高电平,功耗小,价格低。

MAX7219:串行输入,16位并行输出,可控制8位八段数码管显示。满足设计中的四位控制要求。

4组2位共阴数码管:4路口两位数显示,满足所需,易实现控制。

4个LED-GREEN:10mA额定电流,2.2V额定电压,用于模拟十字路口绿灯亮灭显示。

4个LED-YELLOW:10mA额定电流,2.0V额定电压,用于模拟十字路口黄灯亮灭显示。

4个LED-RED:10mA额定电流,2.0V额定电压,用于模拟十字路口红灯亮灭显示。

4个280Ω电阻、8个300Ω电阻:由VCC=V+IR,(VCC:5V;I:LED灯额定电流;V:LED灯额定电压)计算出电阻大小。

9KΩ电阻1个:MAX7219的18管脚接高电平时串联电阻。

12MHZ晶振1个、30pf电容2个:根据经验,12M晶振与2个30p电容并联构成外部时钟振荡电路。

10KΩ电阻1个、1KΩ电阻1个、10uf电解电容1个、1个按键:构成单片机复位电路。电容放电时间τ=RC=10K10uf=0.1s>21/12M=s(2个时钟周期),即电容放电时间大于2倍的时钟周期,即可实现复位。

AT89C52简介:

AT89C52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

主要特性:

与MCS-51 兼容 ;4K字节可编程闪烁存储器 ;寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24Hz;;三级程序存储器锁定;128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。

MAX7219芯片简介:

MAX7219 是MAXIM 公司生产的串行输入/输出共阴极数码管显示驱动芯片,一片MAX7219 可驱动8 个7 段(包括小数点共8 段)数字LED、LED 条线图形显示器、或64 个分立的LED 发光二级管。该芯片具有10MHz 传输率的三线串行接口可与任何微处理器相连,只需一个外接电阻即可设置所有LED 的段电流。它的操作很简单,MCU 只需通过模拟SPI 三线接口就可以将相关的指令写入MAX7219 的内部指令和数据寄存器,同时它还允许用户选择多种译码方式和译码位。此外它还支持多片7219 串联方式,这样MCU 就可以通过3根线(即串行数据线、串行时钟线和芯片选通线)控制更多的数码管显示。MAX7219


 的外部引脚分配如图1 所示及内部结构如上图所示。

各引脚的功能为:

DIN:串行数据输入端

DOUT:串行数据输出端,用于级连扩展

LOAD:装载数据输入

CLK:串行时钟输入

DIG0~DIG7:8 位LED 位选线,从共阴极LED 中吸入电流

SEG A~SEG G DP 7 段驱动和小数点驱动

ISET: 通过一个10k 电阻和Vcc 相连,设置段电流

MAX7219 有下列几组寄存器: 译码控制寄存器、亮度控制寄存器、扫描界限寄存器、关断模式寄存器、测试控制寄存器。编程时只有正确操作这些寄存器,MAX7219 才可工作。

MAX7219读写时序说明:

MAX7129 是SPI 总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

要想与MAX7129 通信,首先要先了解MAX7129 的控制字。MAX7129 的控制字格式如下图。

如图,工作时,MAX7219 规定一次接收16 位数据,在接收的16 位数据中:D15~D12 可以与操作无关,可以任意写入,D11~D8 决定所选通的内部寄存器地址,D7~D0 为待显示数据或是初始化控制字。在CLK 脉冲作用下,DIN 的数据以串行方式依次移入内部16 位寄存器,然后在一个LOAD 上升沿作用下,锁存到内部的寄存器中。注意在接收时,先接收最高位D16,最后是D0,因此,在程序发送时必须先送高位数据,在循环移位。工作时序图见下图。

由于52 是8 位单片机故需要分两次来送数据。

数据读写时序图

单片机复位电路:

上电自动复位原理:

在电路图中,电容的的大小是10uF,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。

也就是说在启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串联电路各处电压之和为总电压)。所以在0.1S内,RST引脚所接收到的电压是5V~1.5V。在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。所以在开机0.1S内,单片机系统自动复位(RST引脚接收到的高电平信号时间为0.1S左右)。

按键按下的时候复位原理:

在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。

数码管简介:

数码管也称LED数码管,数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个(8)可分为1位、2位、3位、4位、5位、6位、7位等数码管。

按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

                 

驱动方式:分静态显示驱动和动态显示驱动两种方式。

静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

3.4软件设计

首先对程序进行模块化处理,根据要求的4路口交通灯的具体功能,对程序进行模块化处理。

根据不同功能的分配可以将程序划分为以下几个模块:

主模块、MAX7219初始化模块、初始化模块(主函数初始化)、定时器模块、MAX7219地址和数据发送模块、数字变化处理模块。

由子模块的功能,可以设计绘制出各模块的程序流程图。各子模块之间可能会有联系,也可能没有联系,最后由主模块对其进行必要的汇总处理,实现要求的功能。流程图绘制完毕后,可以将流程图作为编程的依据,进行编程操作。如此,可使程序简化处理,减少错误,提高程序的编写效率。给自己带来不少的方便之处。

程序流程图:

本着简洁清晰明了易懂的目的,对程序模块化处理,不同模块执行不同的功能。就如同多元化的大家庭一样,进行不同的分工,个分工之间也可能存在联系。最后,由主模块进行总的调用处理,从而将零散的分工汇聚一起,共同实现最终的目的。

模块说明:

主模块:采用顺序循环程序设计,进行汇总处理,实现最终的目的。即实现交通等控制器功能,东西通行时间为80s,南北通行时间为60s,缓冲时间为3s。

MAX7219初始化模块:顺序调用MAX7219地址、数据发送模块,对MAX7219进行初始化处理。

初始化模块:采用顺序程序对定时器中断初始化,开中断定时器进行计时。并对相应变量和交通灯做初始化出处理。

数码管数字显示处理模块:调用数字变化处理模块,得到正确的跳变时间,根据时间的变化做出相应变化,并作出相应的处理。调用MAX7219地址和数据发送模块使数字信息在数码管上正确地显示出来。

MAX7219地址和数据发送模块:根据MAX7219地址、数据发送时序图,对MAX7219做相应处理,使其能够发送一位地址和数据。

数字变化处理函数:当数字变量变为0时,相应方向的数字变化标志增1,并根据数字变化标志当前值,使数字变量做出相应的变化,并使相应方向上相应的灯发亮。以实现数字变量从0的正确跳转和交通灯的正确发亮。

定时器模块:对定时器重新赋初值,并使时间标志t加1计时。

4软件仿真



课程设计体会

    一周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。

    课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.

    通过这次单片机设计,本人在多方面都有所提高。通过这次单片机设计,综合运用本专业所学课程的理论和生产实际知识进行一次DXP制板设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了单片机设计等课程所学的内容,提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。

    在这次设计过程中,体现出自己单独设计单片机的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。

    感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。   

    由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。

参考文献

[1] 张毅刚,彭喜元,彭宇等单片机原理及应用[M].北京:高等教育出版社,2010.5

[3] 赵茂泰.智能仪器原理及应用[M].北京:电子工业出版社,2009

[4] 刘江海.EDA技术[M].北京:华中科技大学出版社,2006

[5] 郭天祥.51单片机C语言教程[M].北京:电子工业出版社,2006

[6] 张忠梅.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,2006

                                                                 

附1:程序代码

#include<reg51.h>

#define  unint unsigned int

#define  unchar unsigned char

//管脚定义

sbit DIN=P3^0;

//MAX7219 串行数据 1 脚

sbit LOAD=P3^1;

//MAX7219 片选 12

sbit CLK=P3^2;

//MAX7219 串行时钟 13 脚

sbit P10=P1^0;

sbit P11=P1^1;

sbit P12=P1^2;

sbit P15=P1^5;

sbit P16=P1^6;

sbit P17=P1^7;

//寄存器宏定义

#define DECODE_MODE  0x09

//译码控制寄存器

#define INTENSITY      0x0A

/亮度控制寄存器

#define SCAN_LIMIT    0x0B 

//扫描界限寄存器

#define SHUT_DOWN   0x0C

   //关断模式寄存器

#define DISPLAY_TEST 0x0F

//测试控制寄存器

//定义全局变量

unchar t,dte,dts;

//t为1ms脉冲产生标志,dte、dts分别为东西方向、南北方向数字变化标志

unchar Easw,Soun;              

//东西、南北方数码管数字变量

//函数声明

void Write7219(unchar address,unchar dat);

//MAX7219控制处理函数声明

void Display();                        

//数码管数字显示处理函数声明

void Initial(void);

//MAX7219初始化函数声明

void Init(void);                     

//定时器初始化函数声明

/*主函数:交通等控制器,东西通行时间为80s,南北通行时间为60s,缓冲时间为3s。*/

void main(void)

{

Initial();   

//MAX7219 初始化

Init();                             

//变量初始化

while(1)

{

Display();                       //调用显示函数

}

}

/*MAX7219初始化函数:MAX7219 初始化,设置MAX7219 内部的控制寄存器*/

void Initial(void)

{

Write7219(SHUT_DOWN,0x01);

//开启正常工作模式(0xX1)

Write7219(DISPLAY_TEST,0x00);

//选择工作模式(0xX0)

Write7219(DECODE_MODE,0xff);

//选用全译码模式

Write7219(SCAN_LIMIT,0x03);

//选用前4只LED

Write7219(INTENSITY,0x04);

//设置初始亮度

}

/*初始化函数:设置定时/计数器0工作方式1,设置50ms定时时间,并进行初始化。开总中断、定时/计数器0,初始化所需全局变量 */

void init()                      

{

TMOD = 0X01;

//设置定时器0工作方式1

TH0 = 0X4C;

//定时器0高八位初始化

TL0 = 0X00;

//定时器0低八位初始化

ET0 = 1;

//定时器0中断允许

TR0 = 1;

//开定时器0

EA = 1;

//开总中断

t = 0;

dte = 0;

dts = 0;

Easw = 79;

//东西方向数码管初值79

Soun = 82;

//南北方向数码管初值82

P1 = 0X24;

//初始化东西方向亮绿灯

//初始化南北方向亮红灯

}

/*数码管数字显示处理函数:通过定时器精确定时,动态地显示交通灯时间的变化 */

void Display()

{

unchar i;

unchar Ewsn[4]={0};

//定义一个只含四个元素的一位数组

void Digit_deal();

//数字变化处理函数声明

if(t >= 20)

//t=20时,定时1秒,Easw、Soun做自减

{

t= 0;

Easw--;

Soun--;

}

Digit_deal();

//数字变化处理函数

Ewsn[0] = Easw/10;

//东西显示数字十位

Ewsn[1] = Easw%10;

//东西显示数字个位

Ewsn[2] = Soun/10;

//南北显示数字十位

Ewsn[3] = Soun%10;

//南北显示数字个位

for(i=1;i<5;i++)

{

Write7219(i,Ewsn[i-1]);

//4位共阴数码管显示

}

}

/*地址、数据发送子程序:MAX7219地址和数据的发送,以确保数码管的正常显示*/

void Write7219(unchar address,unchar dat)

{

unchar i;

LOAD=0;

//拉低片选线,选中器件

//发送地址

for (i=0;i<8;i++)

//移位循环8 次

{

CLK=0;

//清零时钟总线

DIN=(bit)(address&0x80);

//每次取高字节

address<<=1;

//左移一位

CLK=1;

//时钟上升沿,发送地址

}

//发送数据

for (i=0;i<8;i++)

{

CLK=0;

DIN=(bit)(dat&0x80);

dat<<=1;

CLK=1;

//时钟上升沿,发送数据

}

LOAD=1;

//发送结束,上升沿锁存数据

}

/*数字变化处理函数:对东西南北方向数字变换时值的处理    */

void Digit_deal()

{

//东西方向数字变换

if(!Easw)

//Easw为0时,dte加1

{

dte ++;

}

if((Easw == 0) && (dte == 1))

//Easw为0且dte为1时,东西方向数字置为3,亮黄灯

{

Easw = 3;

P16 = 1;

P15 = 0;

P17 = 0;

}

if((Easw == 0) && (dte == 2))

//Easw为0且dte为2时,东西方向数字置为63,亮红灯

{

Easw = 63;

P16 = 0;

P15 = 0;

P17 = 1;

}

if((Easw == 0) && (dte == 3))

//Easw为0且dte为3时,东西方向数字置为79,dte置0,亮绿灯

{

Easw = 79;

dte = 0;

P16 = 0;

P15 = 1;

P17 = 0;

}

//南北方向数字变换                                     

if(!Soun)

//Soun为0时,dts加1

{

dts ++;

}

//Soun为0且dts为1时,南北方向数字置为60,亮绿灯

if((Soun == 0) && (dts == 1))

{

Soun = 60;

P10 = 1;

P11 = 0;

P12 = 0;

}                                                 

if((Soun == 0) && (dts == 2))

//Soun为0且dts为2时,南北方向数字置为3,亮黄灯

    {

Soun = 3;

P10 = 0;

P11 = 1;

P12 = 0;

}

if((Soun == 0) && (dts == 3))

//Soun为0且dts为3时,南北方向数字置为82,dts置0,亮红灯

{

Soun = 82;

dts = 0;

P10 = 0;

P11 = 0;

P12 = 1;

}

}                                 

/*定时器0中断函数:产生50ms脉冲,实现1s钟时间定时*/

void Time0() interrupt 1

{

TH0 = 0X4C;

TL0 = 0X00;

t++;

}

附2   系统原理图

致谢

   感谢这几个星期以来老师的答题解疑和耐心辅导;感谢实验室的管理员的指导;感谢同学的帮助并一起讨论解决问题的方法。通过这次实际的动手操作,我受益匪浅,了解到了认真钻研的意义,对于以后在学习和工作中遇到的难题会以更加积极端正的的心态和刻苦钻研的精神去对待。

                                                                                                                                                                                                                                                                                                                                                      

相关推荐