交替超速智能车
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国大学生电子设计
智能小车
C题
参赛学校:曲阜师范大学
参赛学院:电气信息与自动化学院
指导老师:王化建
队员:岳衍冲杨婳崔慧娜
编号:C甲00895
目录
一、任务和要求 4
1.1基本要求: (4)
1.2发挥部分: (4)
二、设计方案论证与比较 5
2.1控制模块 (5)
2.2电源模块 (5)
2.3电机模块 (6)
2.4 电机驱动模块 (6)
2.5 黑色循迹模块 (7)
2.6通信模块 (7)
2.7 系统各模块最终方案 (7)
2.8 系统总的框图 (8)
三、硬件设计8
3.1稳压电源模块 (8)
3.2 电机驱动电路的设计 (9)
3.3 反射型光电对管的设计 (10)
3.4无线模块 (10)
3.5避障模块 (11)
四、软件设计11
4.1 PWM调速 (11)
4.1.1 PWM原理分析 (11)
4.1.2 PWM程序见附录(二) (11)
4.3 光电检测 (11)
4.3.1光电检测流程图 (12)
4.3.2 光电检测程序见附录(二) (13)
4.4 无线收发 (13)
4.4.1 无线收发流程图 (13)
五、系统测试13
5.1 反射型光电传感器测试 (13)
5.2 电机驱动电路 (14)
5.3小车行驶调试与测试数据 (14)
5.4 系统实现的功能 (14)
5.4 结论 (15)
六、总结15
七、参考文献16 附录一 1 附录二 1 程序一: (1)
程序二: (4)
智能小车
摘要
系统以STC12C5A60S2单片机为控制核心,主要包含直流电机驱动模块,光电检测模块,PWM驱动模块和无线通信模块等模块。
光电检测模块由光电传感器与比较器组成,利用光电传感器实现对黑色边线的寻迹,实现了小车沿直线行驶以及对转弯处、超车区的判断;系统设计了PWM驱动电路用于方向和速度控制, PWM与光电传感模块结合实现小车的转弯与变速;并采用了无线通信模块用于实现甲、乙两车之间的通信,很好的完成了控制任务。
关键词:光电传感器、PWM波、 STC12C5A60SA、无线通信
Abstract
The system uses STC12C5A60S2 MCU as the control core, mainly contains the DC motor driving module, a photoelectric detection module, PWM module and wireless communication module and other modules. Photoelectric detection module is composed of a photoelectric sensor and a comparator, using photoelectric sensor to black line tracing, to achieve the car in a straight line and on the corner, overtaking zone judgment; system design of PWM driving circuit for vehicle direction and speed control, PWM and photoelectric sensing module according to realize the turning and speed; and a wireless communication module is used for realizing a, second two vehicle communication between, completed a very good control task
Key words:
photoelectric sensor、PWM wave、STC12C5A60SA 、wireless communication
一、任务和要求
甲车车头紧靠起点标志线,乙车车尾紧靠边界,甲、乙两辆小车同时起动,先后通过起点标志线,在行车道同向而行,实现两车交替超车领跑功能。
要求:
1.1基本要求:
(1)甲车和乙车分别从起点标志线开始,在行车道各正常行驶一圈。
(2)甲、乙两车按图所示位置同时起动,乙车通过超出标志线后在超车区内实现超车功能,并先于甲车到达终点标志线,即第一圈实现乙车超过甲车。
(3)甲、乙两车在完成(2)时的行驶时间要尽可能的短。
1.2发挥部分:
(1)在完成基本要求(2)后,甲、乙两车继续行驶第二圈,要求甲车通过超车标志线后要实现超车功能,并先于乙车到达终点标志线,即第
二圈完成甲车超过乙车,实现了交替领跑。
甲、乙两车在甲、乙两车
在完成(2)时的行驶时间要尽可能的短第二圈行驶时间要尽可能的短。
(2)甲、乙两车继续行驶第三圈和第四圈,并交替领跑;两车行驶的时间要尽可能的短。
(3)在完成上述功能后,重新设定甲车起始位置(在离起点标志线前进方向40cm范围内任意设定),实现甲、乙两车四圈交替领跑功能,行
驶时间要尽可能的短。
二、 设计方案论证与比较
根据题目要求,系统如图1.1中模块组成: 控制模块电源模
块
稳压电
源模块
检测模块通信模块驱动模
块检测模块通信模块
控制模块电源模块稳压电源模块驱动模块避障模块避障模块
图1.1系统模块框图
2.1控制模块
方案一:采用MSP430,MSP430适用于低功耗手持设备,软件环境也比较好构建,MSP430在实际中应用的较多,目前主要以 FLASH 型为主,所设计的产品比较适合用于工业环境下 , 在平时生活中应用的较少 ,价格也较高。
方案二:采用STC12C5A60S2(见附录一)单片机来实现,此单片机是高速、低功耗、超强抗干扰的新一代8051单片机,且51 系列单片机的发展已经有比较长的时间,应用比较广泛,各种技术都比较成熟,成本较低。
综合考虑各方面因素,我们采用方案二。
2.2电源模块
方案一:采用3节4.2V 可充电式锂电池串联共12.6V 给直流电机供电,经过7812的电压变换后给支流电机供电,然后将12V 电压再次降压、稳压后给单片机系统和其他芯片供电。
锂电池的电量比较足,并且可以充电,重复利用,但锂电池的价格过于昂贵,使用锂电池会大大超出我们的预算,因此,我们放弃了这种方案。
甲车 乙车
方案二:采用12V蓄电池为直流电机供电,将12V电压降压、稳压后给单片机系统和其他芯片供电。
蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。
但是蓄电池的体积过于庞大,在小型电动车上使用极为不方便。
方案三:采用9V干电池经7805降压、稳压后给单片机系统和其他传感器供电。
另外选用6节1.5V充电电池给直流电机供电,避免干扰,占用的空间较小。
因此,我们选择了这种方案。
2.3电机模块
本系统为智能电动车,对于电动车来说,其驱动轮的驱动电机的选择就显得十分重要。
我们综合考虑了以下两种方案。
方案一:采用步进电机作为该系统的驱动电机。
由于其转过的角度可以精确的定位,可以实现小车前进路程和位置的精确定位。
虽然采用步进电机有诸多优点,步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。
经综合比较考虑,我们放弃了此方案。
方案二:采用直流电机。
直流电机转动力矩大,体积小,重量轻,装配简单,使用方便。
由于其内部由高速电动机提供原始动力,带动变速齿轮组,可以产生较大扭力。
因此我们选择了此方案。
2.4 电机驱动模块
方案一:采用两个H桥形电路分别控制两个电机。
由各分立元器件组成,结构简单,且价格低廉,在实际应用中应用广泛。
但此电路性能不够稳定,且提供不了直流电机所需的大电流,所以放弃此方案。
方案二:采用专用芯片L298N作为电机驱动芯片。
L298N是一个具有高电压大电流的全桥驱动芯片,能满足直流电机对大电流的需求。
它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。
我们选用此方案。
2.5 黑色循迹模块
方案一:采用多路阵列式光敏电阻组成的光电探测器。
因为光敏电阻探测到黑线时,黑线上方的电阻值发生变化,经过电压比较器比较将信号送给单片机处理,从而控制物体做相应的动作。
光敏电阻对环境光的识别,要求考虑外界环境光的影响,测试时可能在室内或室外,这种方案受光照影响很大,不能够稳定的工作。
方案二:采用反射型光电探测器。
用已调的红外线垂直射到板面,经反射后转换为电信号,经过电压比较器比较将信号送给单片机处理。
此光电对管调理电路简单,可通过调节电位器,适应多种外界环境,抗干扰性比较强,工作性能稳定。
因此我们选择了方案二。
2.6通信模块
方案一:一般的红外通讯功耗低、抗干扰力强,价格便宜,但红外传输已受阻碍,传输距离也相对很近,适用于近距数据传输和遥控等。
方案二:采用nrf20l01无线通信。
无线通信适用于中长距离的数字及模拟信号的传输和遥控,且nrf2401无线通信使用简单,价格便宜。
2.7 系统各模块最终方案
经过上述的分析和论证,决定了系统各模块采用的最终方案如下:
(1) 控制模块:采用STC12C60S2 8位单片机;
(2) 电源模块:采用过滤,滤波,稳压等电路实现;
(3) 循迹模块:采用反射型光电探测器经比较器送给单片机处理;
(4) 电机驱动模块:采用LM298N驱动芯片控制直流电机;
(5)通信模块:采用nrf24l01无线通信;
(6) 车型选择:采用坦克模型。
2.8 系统总的框图
如图 2.2 所示
SPC12C5A60S2反射型光电循
迹探测器
LM298N 电机
驱动
稳压电路Nrf24l01无线通信Nrf24l01无线通信
SPC12C5A60S2反射型光电循迹探测器LM298N 电机驱动稳压电路红外避障模块红外避障模块
图2.2系统总框图
三、硬件设计
3.1稳压电源模块
随着微电子技术的不断进步,系统电源的设计在单片机应用系统设计中显得越来越重要,它对单片机系统是否正常工作起着至关重要的作用。
根据系统要求,另加提供9V 电池,用LM7805稳压管将直流9V 电压转成5V 输出,供给单片机和其他传感器,从而保证系统的稳定性。
7805直流稳压电路如图
3.1所示。
VI 2VO 3
G N D 1U1
7805
C3
1000uF C2100uF +
_+_
vi=9V Vo=5V
C10.1uF C2
0.1uF
图3.1 7805直流稳压电路
3.2 电机驱动电路的设计
本方案采用L298N 芯片作为控制器件,外围加上必要的保护电路构成电机驱动模块。
电路原理图如图3.2所示。
图3.2 电机驱动电路原理图
3.3 反射型光电对管的设计
题目要求小车要沿着划出的黑线运动,但在运动过程中,小车不可避免地会偏离运动轨迹,为了能使小车在偏离后可以自动调整方向,重新回到运动轨迹上,系统需要将小车的运动状态及时地以电信号的形式反馈到控制部分,控制部分控制两个电机的正转或反转,使物体重新回到轨迹上。
本设计中共使用三个集成的反射式光电传感器,分别装在小车的前端两侧及中间,两侧控制方向,中间的控制小车停止。
具体电路如图3.3示。
集成反射式光电传感器的电压驱动为4.5V-5V。
当发射二极管导通时,发出红外光线,使接收管的集电极和发射极间电阻变小,输出端接一上拉电阻。
当红外光线照射到黑色线上时,反射光较少,接收管集电极和发射极间的电阻增大,输出被上拉电阻拉至高电平。
在输出端接比较器,可以使信号稳定。
R1
220Ω
R2
10kΩKey=A 50%
R3
10kΩ
VCC
5V
R4
4.3kΩ
R5
200Ω
U3A
LM393N
3
2
8
1
4
R6
10kΩ
Key=A
50%
VCC
5V
图3.3反射型光电传感器原理图
3.4无线模块
本设计中nrf24l01无线通信用于控制甲、乙两车同时起步,并在超车时实现两车之间的通信功能。
3.5避障模块
本设计采用红外避障模块,使甲、乙两车在第一圈时能正常行驶,完成比赛第一要求。
3.5系统控制核心STC12C5A60S2引脚图如图 2.3 所示(见附录一)
四、软件设计
4.1 PWM调速
PWM调速是本设计的突出特点,通过改变电压的占空比,以实现甲、乙两车交替超车的功能
4.1.1 PWM原理分析
本设计采用PWM来调节直流电机的速度。
PWM是通过控制固定电压的直流电源的开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
在脉冲作用下,当电机通电时,速度增加;电机断电时,速度减小。
只要按一定的规律,改变占空比,即可达到调速的目的。
4.1.2 PWM程序见附录(二)
4.3 光电检测
小车进行循迹时,当向左偏出轨迹时,右边的传感器将检测到黑线,输出由高电平变为低电平,且左侧的传感器信号不变内。
系统对该状态作出相应反应,控制两个电机正转或反转,使小车重新运动回轨迹上。
4.3.1光电检测流程图
光电检测初始化
开始
主控制器模块初始
化
主光电检测采集
左转黑线?
直线行驶
黑线?
延时
左转
超车行驶
左转黑线?
直线行驶
停止
黑线?
结束
Y
Y
Y N
N
4.3.2 光电检测程序见附录(二)
4.4 无线收发
4.4.1 无线收发流程图
开始
接收数据
结束标志
返回
开始
读出数据发送数据
开始发送
收到应答?
Y
N
N
数据传输完毕?
返回
N
Y
N
Y
五、系统测试
5.1 反射型光电传感器测试
反射型光电对管对白纸与黑线反应灵敏,靠近白纸时,显示高电平;靠近黑线时显示低电平。
我们在小车前方距地面1cm 处安装反射式光电对管,经测试,效果明显。
5.2 电机驱动电路
两个电机我们直接用电源供电,并手动加加信号进行驱动,观看电机转速以及测量电机两端电压。
电机状态见表5.2.4所示。
表5.2.4 电机状态 外加信号的状态 电机状态
电机电压/V
电机电流/mA
00 停转 2.25 0 01 正转 8.86 186 10 反转
8.86
191
5.3小车行驶调试与测试数据
正常行驶一圈
转弯时间
超车时间
超车行驶一圈
甲车 50秒 2秒63 17秒21 54秒11
乙车 52秒
2秒61
16秒33
55秒67
5.4 系统实现的功能 系统实现的功能有
1.甲、乙两辆小车正常行驶;
2.自动循迹行驶;
3.自动转弯行驶;
4.自动调速超车行驶。
行 驶
时 间
小
车
5.4 结论
经过对系统的循迹测试、驱动电路、转弯测试和超车行驶等的测试,本设计基本达到设计制作要求。
六、总结
本系统以宏晶STC12C5A60S2单片机为核心部件,利用反射光电传感技术,PWM波调速实现了循迹、电机方向、改变电机速度等功能,最终使小车完成竞赛题目中要求的各项任务。
因为时间有限,该系统还有很多值得改进的地方。
在本次设计的过程中,遇到了许多突发事件和各种困难,设计制作曾一度中断,但通过仔细分析和自我状态调整后解决了问题,在这个过程中我们深刻地体会到共同协作和团队精神的重要性,提高了自己解决问题的能力。
七、参考文献
1. 阎石主编。
《数字电子技术》,第2版,北京-高等教育出版社,2003
2. 康华光主编。
《模拟电子技术》,第2版,北京-高等教育出版社,2003
3. 关健主编。
《电子CAD技术》,Protel99SE部分,电子工业出版社,2005
4. 谭浩强主编。
《C程序设计》,第2版,清华大学出版社,2005
5. 林立、张俊亮、曹旭东等编著。
《单片机原理及应用》,第2版,电子工业出版社,2010.
附录一
附录二程序一:
/******************* ******************** ******************** ******************** ***************/
#include<STC12C5A60S2.
H> //头文件说明:遇到标志线缓慢通过,边界线停车
#include <intrins.h>
sbit m1=P2^0;
sbit ea=P2^1;//使能ea sbit eb=P2^2;//使能eb sbit m4=P2^3;
sbit m2=P1^3;//pwm0 sbit m3=P1^4;//pwm1 sbit g=P2^4; //sbit g2=P3^3;
//sbit d=P0^0;
unsigned char i=0;
void PWM_init (void){
CMOD=0x02; //设置PCA
定时器
CL=0x00;
CH=0x00;
CCAPM0=0x42;
//PWM0设置PCA工作
方式为PWM方式(0100
0010)
CCAP0L=0x00; //设置
PWM0初始值与CCAP0H
相同
CCAP0H=0x00; //
PWM0初始时为0
CCAPM1=0x42; //PWM1
设置PCA工作方式为
PWM方式(使用时删除
//)
CCAP1L=0x00; //设置
PWM1初始值与CCAP0H
相同
CCAP1H=0x00; // PWM1
初始时为0
//CCAPM2=0x42;
//PWM2设置PCA工作
方式为PWM方式
//CCAP2L=0x00; //设置PWM2初始值与CCAP0H 相同
//CCAP2H=0x00; // PWM2初始时为0
// CCAPM3=0x42;
//PWM3设置PCA工作方式为PWM方式
//CCAP3L=0x00; //设置PWM3初始值与CCAP0H 相同
//CCAP3H=0x00; // PWM3初始时为0
CR=1; //启动PCA定时器
}
/******************* ******************** ******************** ******************** ***************/
/******************* ******************** ******************** ******************** **************
函数名:PWM0占空比设置函数
调用:PWM0_set(); 参数:0x00~0xFF(亦可用0~255)
返回值:无
结果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H 中的0改为1即可/*******************
********************
********************
********************
***************/
void PWM0_set
(unsigned char a){
CCAP0L= a; //设置值直
接写入CCAP0L
CCAP0H= a; //设置值
直接写入CCAP0H
}
void PWM1_set
(unsigned char b){
CCAP1L= b; //设置值直
接写入CCAP0L
CCAP1H= b; //设置值
直接写入CCAP0H
}
void init(){
IE=0x85;
IP=0x04;
TCON=0x05;
}
void zhixian() //误差
-0.000000000125us
{
m1=1;
m2=0;
m3=0;
m4=1;
ea=1;
eb=1;
}
void zuozhuan()
{m1=1;
m2=0;
m3=0;
m4=0;
ea=1;
eb=1;}
void youzhuan()
{m1=0;
m2=0;
m3=0;
m4=1;
ea=1;
eb=1;
}
void jiansu()
{PWM_init(); //PWM初
始化
PWM0_set(0x7F);//设
置PWM占空比,总共
255,除以2,转换成十六
进制得7F
PWM1_set(0x7F);
}
void stop()
{m1=0;
m2=0;
m3=0;
m4=0;
ea=0;
eb=0;}
void cesu()
{
if(g==1)
{
if(g==0)
{
i++;
}
}
}
void delay1(void) //误
差0us
{
//误差
-0.000000000001us
unsigned char a,b,c;
for(c=190;c>0;c--) for(b=114;b>0;b--)
for(a=1;a>0;a--);
}
void delay(unsigned char i)
{
while(i--)
delay1();
}
void main()
{ init();
ea=1;
eb=1;
while(1)
{
zhixian();
delay(150);
while(g==0)
zhixian();
delay(80);//检测到
信号线后离转弯的时间
zuozhuan();
delay(70);//转弯时
间
while(g==0)
zhixian();
delay(80);
zuozhuan();
delay(70);
while(g==0)
zhixian();
delay(50);
zuozhuan();
delay(60);
zhixian();
delay(120);//转弯结
束后直线减速前移动时
间
{
PWM_init(); //PWM初
始化
PWM0_set(0x7F);//设置
PWM占空比,总共255,
除以2,转换成十六进制
得7F
PWM1_set(0x7F);
zhixian();
delay(10000);
//CR=0;//ji7ansu行
驶时间,在检测到黑线
时缓慢在向前行驶一
段,检测不到黑线继续
行驶
}
while(g==0)
{
zhixian();}
{
PWM_init(); //PWM初
始化
PWM0_set(0xFF);//设置
PWM占空比,总共255,
除以2,转换成十六进制
得7F
PWM1_set(0xFF);
zhixian();
delay(10000);
}
delay(50);
zuozhuan();
delay(100);//最后一弯角度
while(g==0) zhixian(); while(1) stop();
}
}
void weitiaozuo()
interrupt 2//外部中断1
{ EX1=0;
zuozhuan();
delay(4);
zhixian();
delay(1);
EX1=1;
}
void weitiaoyou()
interrupt 0//外部中断0
{ EX0=0;
youzhuan();
delay(4);
zhixian();
delay(1);
EX0=1;
}
程序二:
/***************** ****************** ****************** ****************** ****************** *****/
#include<STC12C5A6 0S2.H> //头文件说明:遇到标志线缓慢通过,边界线停车
#include
<intrins.h>
sbit m1=P2^0;
sbit ea=P2^1;//使能ea
sbit eb=P2^2;//使能eb sbit m4=P2^3;
sbit m2=P1^3;//pwm0
sbit m3=P1^4;//pwm1
sbit g=P2^4;
//sbit g2=P3^3;
//sbit d=P0^0;
unsigned char i=0;
void PWM_init
(void){
CMOD=0x02; //设置
PCA定时器
CL=0x00;
CH=0x00;
CCAPM0=0x42;
//PWM0设置PCA工作
方式为PWM方式(0100
0010)
CCAP0L=0x00; //设
置PWM0初始值与
CCAP0H相同
CCAP0H=0x00; //
PWM0初始时为0
CCAPM1=0x42; //PWM1
设置PCA工作方式为
PWM方式(使用时删除
//)
CCAP1L=0x00; //设
置PWM1初始值与
CCAP0H相同
CCAP1H=0x00; //
PWM1初始时为0
//CCAPM2=0x42;
//PWM2设置PCA工作方式为PWM方式
//CCAP2L=0x00; //设置PWM2初始值与CCAP0H相同
//CCAP2H=0x00; // PWM2初始时为0
// CCAPM3=0x42;
//PWM3设置PCA工作方式为PWM方式
//CCAP3L=0x00; //设置PWM3初始值与CCAP0H相同
//CCAP3H=0x00; // PWM3初始时为0
CR=1; //启动PCA 定时器
}
/***************** ****************** ****************** ****************** ****************** *****/ /*****************
******************
******************
******************
******************
****
函数名:PWM0占空比
设置函数
调用:
PWM0_set();
参数:0x00~0xFF
(亦可用0~255)
返回值:无
结果:设置PWM模
式占空比,为0时全
部高电平,为1时全
部低电平
备注:如果需要
PWM1的设置函数,只
要把CCAP0L和
CCAP0H中的0改为1
即可
/*****************
******************
******************
******************
******************
*****/
void PWM0_set
(unsigned char a){
CCAP0L= a; //设置
值直接写入CCAP0L
CCAP0H= a; //设置
值直接写入CCAP0H
}
void PWM1_set
(unsigned char b){
CCAP1L= b; //设置
值直接写入CCAP0L
CCAP1H= b; //设置
值直接写入CCAP0H
}
void init(){
IE=0x85;
IP=0x04;
TCON=0x00;
}
void zhixian() //
误差
-0.000000000125us
{
m1=1;
m2=0;
m3=0;
m4=1;
ea=1;
eb=1;
}
void zuozhuan() {m1=1;
m2=0;
m3=0;
m4=0;
ea=1;
eb=1;}
void youzhuan() {m1=0;
m2=0;
m3=0;
m4=1;
ea=1;
eb=1;
}
void jiansu() {PWM_init(); //PWM 初始化
PWM0_set(0x7F);//设置PWM占空比,总共255,除以2,转换成十
六进制得7F
PWM1_set(0x7F);
}
void stop()
{m1=0;
m2=0;
m3=0;
m4=0;
ea=0;
eb=0;}
void cesu()
{
if(g==1)
{
if(g==0)
{
i++;
}
}
}
void delay1(void)
//误差 0us
{
//误差
-0.000000000001us
unsigned char
a,b,c;
for(c=190;c>0;c--)
for(b=114;b>0;b--)
for(a=1;a>0;a--);
}
void delay(unsigned
char i)
{
while(i--)
delay1();
}
void main()
{ init();
ea=1;
eb=1;
while(1)
{
zhixian(); delay(150); while(g==0) zhixian(); delay(100); zuozhuan(); delay(90); while(g==0) zhixian(); delay(100); zuozhuan(); delay(90); while(g==0) zhixian();
delay(30);
zuozhuan();
delay(100);
zhixian();
delay(50);
EA=0;
zuozhuan();
delay(90);
EA=1;
zhixian();
delay(200);
while(g==0)
zhixian();
delay(100);
zuozhuan();
delay(90);
while(g==0)
zhixian();
while(1)
stop();
}
}
void weitiaozuo()
interrupt 2//外部中
断1
{ EX1=0;
zuozhuan();
delay(6);
zhixian();
delay(0);
EX1=1;
}
void weitiaoyou() interrupt 0//外部中断0
{ EX0=0;
youzhuan();
delay(6);
zhixian();
delay(0);
EX0=1;
}。