自动往返行驶小汽车的设计.docx

上传人:b****5 文档编号:12016050 上传时间:2023-04-16 格式:DOCX 页数:16 大小:40.46KB
下载 相关 举报
自动往返行驶小汽车的设计.docx_第1页
第1页 / 共16页
自动往返行驶小汽车的设计.docx_第2页
第2页 / 共16页
自动往返行驶小汽车的设计.docx_第3页
第3页 / 共16页
自动往返行驶小汽车的设计.docx_第4页
第4页 / 共16页
自动往返行驶小汽车的设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

自动往返行驶小汽车的设计.docx

《自动往返行驶小汽车的设计.docx》由会员分享,可在线阅读,更多相关《自动往返行驶小汽车的设计.docx(16页珍藏版)》请在冰豆网上搜索。

自动往返行驶小汽车的设计.docx

自动往返行驶小汽车的设计

自动往返行驶小汽车的设计

 

本设计的小汔车能在如图81所示的跑道上自动往返行驶,车子从起跑线出发后到达终点线停车10秒钟,然后返回到起点停止。

在限速区行驶时间要求大于8秒,终点线停车与最后停车时要求车子中心点与黑线的误差尽量小。

车子能自动记录时间及里程并在车上显示。

跑道宽为0.5米,两侧挡板高度大于0.2米,跑道表面贴有白纸,在B、C、D、E、F、

G处画有2cm宽的黑线。

 

ABCDEFG

H

0.5米

限速区

 

1米0.5米

36米

2米36米

1米

0.5米

 

起跑线终点线

图81跑道顶视图

1系统硬件电路的设计

控制系统设计采用AT89C52单片机。

显示系统采用三位LED数码管显示里程数,四位

LED数码管显示一次往返的时间。

电机正反转采用桥式驱动控制,二档电压调速。

里程记录采用霍尔传感器,跑道标志线采用光敏管检测并使用软件整形消抖措施。

使用四个靠轮解决小汽车与挡板的碰擦问题,单片机、电机独立稳压电源供电。

(1)电机驱动电路

采用两对互补三极管,利用单片机16、17脚电位的高低去控制三极管的截止和导通状态,从而实现小汽车驱动马达的正反转功能。

为了防止马达转动时对单片机的干扰影响,提高单片机的稳定性,在马达的两端加了抗干扰电容。

(2)电压调速电路

电机驱动电压由AT89C52单片机的P1.7和P1.6分别控制。

当P1.7为0,P1.6为1

 

 

时,电机驱动电压为+7.5v,小车进入高速行驶状态;当P1.7为1,P1.6为0时,电机驱

动电压为+4.3v,小车进入低速行驶状态。

当P1.0为高电位时,马达供电三极管D880截止,关闭马达电源实现停车功能;当P1.0为0时,D880输出电机驱动电压,小车按单片机的指令执行各种功能。

(3)传感脉冲检测电路由霍尔元件里程检测、跑道标志光电管检测两部分组成,电路图如下图。

用于里程累计的脉冲信号由霍尔元件检测。

此装置安装在后左轮,车轮每转一周就由霍尔元件产生一个低电平脉冲,单片机外部中断1产生中断,从而使里程脉冲数累计一次,根据本小车轮子的周长,每转6周为1米,所以每累计6个脉冲就是1米。

用于检测跑道标志的脉冲信号由光敏二极管、发光二极管电路组成。

当小车在白纸上时,输出为高电平;当遇到黑条时,输出低电平脉冲,作中断计数判断用。

(4)LED显示电路

对多位LED显示器采用动态扫描的方法进行显示,系统采用七位数码管显示,前三位数码管显示的数值表示里程,显示的范围为1m—999m。

后四位数码管的数值表示一次往返过程中所需的总时间,其中前两位表示分,后两位表示秒。

往返到起点时显示的数值是一次往返的总时间。

P0口作段码数据输出,P2为扫描输出口。

2系统内存资源的分配

 

 

20H—24H内存单元作为里程计数用(23H为跑道条数存放单元),采用10进制计数,最

大计数值为999米。

70H—73H为时间计数单元,采用10进制BCD码计数,最大记录时间为

59分59秒。

显示数据在70H—76H单元中,其中74H—76H单元内为里程显示数据。

为了标志是终点停车还是起点停车,用位地址30H(即35H.0位)的位值作为判断标志。

3系统主要程序的设计

(1)初始化程序

主要完成70H—76H、20H—23H等单元的清零,设置T1为16位定时模式,开放T1、外中断0、外中断1的中断等。

(2)主程序主要完成初始化工作,设定小汽车的初始运行状态,最后循环调用显示程序,程序流程

图见图8-6。

(3)外中断0服务程序其任务是根据小车到达黑道的位置控制小车的运行状态,其程序流程图见图8-7。

中断0开始关中断跑道数加1

开始初始化置快车状态

置前进状态

 

打开电机电源

 

调用显示子程序

第6条

N

第3条

N?

第4条

N?

第5条

N

延时7ms

 

开中断中断返回

Y

停止

 

Y

慢车

 

Y快车

 

Y

慢车

 

图86主程序流图

图87小车状态控制流程图

 

(4)慢车子程序

慢车子程序执行时,先对电机进行反相驱动约150ms,使其刹车,然后改供低电压,使电机慢速转动。

(5)停止子程序

当执行停车时,先对黑道计数器单元23H清零,再反相驱动刹车后关电机电源,然后延

时10秒,对30H位取反,以判断是终点停车还是起点停车。

若是起点停车,计时单元清零。

最后设小车初始运动状态。

(6)里程计数处理程序(外中断1服务程序)

里程计数器采用10进制计数,最大计数值为999米,当退出时将计数值移入74H—76H显示数据存储单元。

(7)计时程序

与设计实例2的时钟程序相同。

(8)延时程序

延时程序均采用调用显示子程序的方法,以改善LED显示的效果。

以下是自动往返小汽车控制系统完整源程序:

主程序和中断程序入口

ORG0000H;程序执行起始地址LJMPSTART;跳至START

ORG0003H;外中断0入口

LJMPINTEX0;跳至INTEX0中断服务程序ORG000BH;定时器T0中断入口

RETI;中断返回

ORG0013H;外中断1入口

LJMPINTEX1;跳至INTEX1中断服务程序ORG001BH;定时器T1中断入口

LJMPINTT1;跳至INTT1中断服务程序

ORG0023H;串口中断入口RETI;中断返回

ORG002BH;定时器T2中断入口

 

RETI;中断返回

初始化程序

CLEARMEMIO:

MOVR0,#70H;清70H-76H显示单元MOVR7,#07H;循环次数

ML0:

MOV@R0,#00H;清0

INCR0;下一地址

DJNZR7,ML0;未完再循环

MOVTMOD,#10H;T1为16位定时器

MOVR4,#14H;1秒定时用(50毫秒20次)MOVTL1,#0B0H;50毫秒定时用初值

MOVTH1,#3CH;

MOV20H,#00H;清0操作MOV21H,#00H;

MOV22H,#00H;

MOV23H,#00H;MOV24H,#00H;

CLR30H;清停车标志SETBET1;开T1中断SETBEX1;开外中断1

SETBIT1;外中断1采用边沿触发

SETBIT0;外中断0优先级为1(最高)

SETBEX0;开外中断0

SETBEA;开总中断允许SETBTR1;开启定时器T1

RET;子程序返回

主程序

START:

LCALLCLEARMEMIO;上电初始化SETBP1.6;选择7.5V输出CLRP1.7;选择7.5V输出SETBP3.7;前进状态

CLRP3.6;前进状态

CLRP1.0;电机供电开始MAIN:

LCALLDISP;LED显示一次

 

MCS51系列单片机设计实例

 

LJMPMAIN;转MAIN循环

NOP;PC值出错处理NOP

LJMPSTART;重新初始化

外中断0服务程序,用作跑道位置处理

23H作跑道计数器

INTEX0:

PUSHACC;堆栈保护

PUSHPSW;

CLREX0;关中断

LCALLDISP;LED显示一次(延时抗干扰)JBP3.2,IN0RET;P3.2为1退出(干扰)

INC23H;跑道计数器加1

MOVA,23H;数据入A

CJNEA,#06H,JUDGE1;不是第6道转JUDGE1

LCALLSTOP;是第6道,停车LJMPIN0RET;转中断退出

JUDGE1:

CJNEA,#03H,JUDGE2;不是第3道转JUDGE2

LCALLSTOPSLOW;是第3道,变慢车LJMPIN0RET;转中断退出

JUDGE2:

CJNEA,#04H,JUDGE3;不是第4道转JUDGE3

LCALLFAST;是第4道,变快车LJMPIN0RET;转中断退出

JUDGE3:

CJNEA,#05H,IN0RET;不是第5道转INORET退出LCALLSTOPSLOW;是第5道,变慢车

IN0RET:

CLRIE0;清外中断0中断标志

POPPSW;恢复现场POPACC;

LCALLDL7MS;延时7毫秒(抗干扰)SETBEX0;开外中断0

RETI;中断返回

慢车控制子程序

STOPSLOW:

CLRP1.6;关7.5V电源

CPLP3.6;反向驱动(刹车)CPLP3.7;反向驱动

LCALLDS50MS;刹车时间(可根据试车情况调整)LCALLDS50MS;

LCALLDS50MS;

CPLP3.6;正向驱动

CPLP3.7;正向驱动

SETBP1.7;开4.3V电源RET;返回

快车控制子程序

FAST:

CLRP1.7;关4.3V电源SETBP1.6;开7.5V电源RET;返回

停车控制程序

STOP:

MOV23H,#00H;跑道计数单元清0

CPLP3.6;反向驱动(刹车)CPLP3.7;反向驱动(刹车)LCALLDS50MS;刹车时间

LCALLDS50MS;刹车时间(可调整)SETBP1.0;关电机电源

SETBPT1;定时器T1为高优先级LCALLDS10S;停车10秒

CLRPT1;恢复T1为低优先级

SETBP1.6;开7.5V电源(高速)CLRP1.7;关4.3V

CLRP1.0;电机电源开

CPL30H;停车点位置判断标志取反

JB30H,STREN;为1(中途停车)转STRENLCALLCLR00;是终点,调复0程序

STREN:

RET;返回

计时清0程序

CLR00:

MOV70H,#00H;计时单元清0

MOV71H,#00H;计时单元清0

MOV72H,#00H;计时单元清0

MOV73H,#00H;计时单元清0

RET;返回

外中断1程序,里程计数用

20H、21H、22H、24H作计数器

NTEX1:

PUSHACC;堆栈保护PUSHPSW;

CLREX1;关外中断1

INC20H;圈加1

LLLL:

MOVA,20H;判断是否满6圈

CJNEA,#06H,LLL;不满6圈转LLL退出

MOV20H,#00H;满6圈清0进位(6圈为1米)INC21H;上位加1

MOVA,21H;判断是否满10

CJNEA,#0AH,LLL;不满10转LLL

MOV21H,#00H;满10清0进1位INC22H;高位加1

MOVA,22H;判断是否满10

CJNEA,#0AH,LLL;不满10转LLL

MOV22H,#00H;满10清0进1位INC24H;高位加1

MOVA,24H;判断是否满10

CJNEA,#0AH,LLL;不满10转LLLMOV24H,#00H;满10清0

LLL:

MOV74H,21H;将里程数移入显示单元(个位)MOV75H,22H;将里程数移入显示单元(十位)MOV76H,24H;将里程数移入显示单元(百位)

IN1RET:

POPPSW;恢复堆栈POPACC;

SETBEX1;开外中断1

RETI;中断返回

时间计时器程序

(T1定时中断服务程序)

INTT1:

PUSHACC;堆栈保护PUSHPSW;

MOVTL1,#0B0H;赋50毫秒定时初值MOVTH1,#3CH;

DECR4;减1

MOVA,R4;

JNZRETT0;不为0转RETT0

MOVR4,#14H;为0(1秒到)重赋初值MOVR0,#71H;地址指向71H

ACALLADD1;加1秒操作

MOVA,R3;

CLRC;

CJNEA,#60H,CC;是否为60秒?

CC:

JCRETT0;小于60转RETT0

ACALLCLR0;大于或等于60清0

MOVR0,#73H;指向分计时地址单元

ACALLADD1;分加1

MOVA,R3;CLRC;

CJNEA,#60H,CCC;是否为60分?

CCC:

JCRETT0;小于60转RETT0

ACALLCLR0;大于或等于60分计时单元清0

RETT0:

POPPSW;恢复堆栈POPACC;

RETI;中断返回

加1操作程序

ADD1:

MOVA,@R0;取计数值

DECR0;指向低一个地址

SWAPA;计数值高低四位交换ORLA,@R0;相或组合成一个数据ADDA,#01H;加1

DAA;十进制调整MOVR3,A;暂存R3内ANLA,#0FH;高四位变0

MOV@R0,A;放回低地址

MOVA,R3;取回R3内数据INCR0;地址加1

SWAPA;高低四位交换

ANLA,#0FH;高四位为0

MOV@R0,A;放回原地址RET;返回

清0程序

CLR0:

CLRA;清A

MOV@R0,A;对应地址单元清0

DECR0;指向低一地址

MOV@R0,A;清0

RET;返回

显示程序

DISP:

MOVR1,#70H;显示数据首址

MOVR5,#0FEH;扫描字

PLAY:

MOVA,R5;扫描字入AMOVP2,A;从P2口输出MOVA,@R1;取显示数据MOVDPTR,#TAB;取段码表首址

MOVCA,@A+DPTR;查数据对应段码MOVP0,A;段码从P0口输出

LCALLDL1MS;点亮1毫秒

INCR1;指向下显示数地址MOVA,R5;扫描字入A

JNBACC.6,ENDOUT;ACC.6=0转ENDOUT结束RLA;循环左移

MOVR5,A;放回A

AJMPPLAY;转PLAY再显示

ENDOUT:

MOVP2,#0FFH;显示结束处理。

P2口置1

RET;子程序结束

;LED共阴段码表(0-9)

TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

;1毫秒延时程序

DL1MS:

MOVR6,#14HDL1:

MOVR7,#19HDL2:

DJNZR7,DL2

DJNZR6,DL1

RET

;延时程序,用调用显示程序实现,可使LED显示稳定DS50MS:

LCALLDISP;(7毫秒)

LCALLDISP

LCALLDISPDS20MS:

LCALLDISPLCALLDISP

LCALLDISPRET

;10秒延时程序,用调用显示程序实现,可使LED显示不熄灭

DS10S:

MOVR2,#08H;(8*11*16*7=9956毫秒)

 

TI0:

MOVR0,#0B0H

TI1:

LCALLDISPDJNZR0,TI1

DJNZR2,TI0

RET

;7毫秒延时程序,跑道计数器抗干扰用

DL7MS:

SETBPX1;外中断1置高优先级MOVR2,#0EH;赋定时值

DL11:

LCALLDISP;调用显示程序DJNZR2,DL11;循环

CLRPX1;外中断1恢复低优先级

RET;返回

END;程序结束

 

单片机程序应用设计作业

 

班级:

机制08-1

学号:

2号

姓名:

万文辉

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1