我们设计制作了一个具有寻线功能的简易自动入库小车。主要功能如下:遥控启动;自动入库功能(沿着黑线进入车库),并伴随灯光提示;检测车库中心所放置的铁片并停车,伴随语音和灯光提示,计算并显示入库,停留和出库所用的时间。
为使小车运行更加灵活可靠,我们采用了后轮用两个直流电机分别驱动,前轮采用自制的万向轮的驱动方式,采用L298双通道直流电机驱动芯片作为主控电路,将红外传感器采集的信号,经单片机处理后 ,控制驱动电机的PWM的占空比和方向,从而实现了题目要求的一系列动作,通过红外遥控启车,显示时间,和实时语音提示功能的实现,增加了作品的趣味性,技术性和智能程度;另外通过自制的霍尔金属传感器和自制万向轮的使用,更好的减轻了整车的重量,增加了小车的灵活性。
设计报告内容截图:
目录
一、设计要求和主要指标………………………………………… 2
1、任务………………………………………………………………2
2、要求………………………………………………………………2
3、主要指标…………………………………………………………3
二、设计制作报告……………………………………………………4
摘要、关键词…………………………………………………………4
1、总体方案设计……………………………………………………4
2、硬件模块电路设计……………………………………………… 5
3、软件程序设计……………………………………………………11
4、调试及性能分析…………………………………………………17
5、结论………………………………………………………………17
6、参考文献………………………………………………………… 18
单片机源程序如下:
- ZUOLUN BIT P1.5 ;
- YOULUN BIT P1.4;
- ZUOLUN_DIR BIT P1.6;
- YOULUN_DIR BIT P1.7;
- ZUO_CHEWEI BIT P1.0;车尾传感器信号输入端,高电平有效
- YOU_CHEWEI BIT P1.1;
- YUYIN_CLK BIT P3.5;
- shachedeng bit p3.7
- ;-----------------------------
- ZUOQIAN_CHUANGANQI EQU P1.3
- ;-----------------------------------
- JISHUQI_MIAOGEWEI EQU 45H;定60MS的倍数
- JISHUQI_MIAOSHIWEI EQU 46H ;此地址里放的是秒数;
- RUKU_TIME EQU 47H;
- TINGCHE_TIME EQU 48H;
- CHUKU_TIME EQU 49H;
- ;--------------------------------------
- IRCOM EQU 20H ;20H-23H IR使用
- IRIN bit P3.6 ;遥控信号输入端
- ;---------------------------------------
- FC_MARK bit 05h; 检测返程标志
- ZHUANWAN_OK BIT 00H
- HUI_5S EQU 52H
- shachedeng0 equ 53h
- shachedeng1 equ 54h
- ;---------------------------
- DISPLAY_CLOCKGE EQU P3.0;左数码管锁存端
- DISPLAY_CLOCKSHI EQU P3.1;右数码管锁存端
- DATA_DISPLAY EQU 50H
- ZANTING_OVER BIT 08H
- XIAOYIN4511 BIT P1.3
- ;--------------------------
- ;*********************************************
- ;--------------------------
- org 0000h;
- sjmp start;
- org 0003h;
- ljmp ZUOLUN_ZHUAN;P3.2_zuolun zhong duan ru kou
- org 000bh;
- LJMP JIANCE_TIEPIAN ;dian shi qi dang zhongduan yong ,jian ce tie pian
- org 0013h;
- ljmp YOULUN_ZHUAN;P3.3_youlun zhongduan ru kou
- ORG 001BH;
- LJMP TIMER_1;全程实现定时
- ;--------------------------
- org 0030h; 程序开始执行,初始化
- ;---------------------------
- start:mov SP,#60h;
- mov P1,#00h;
- ; SETB P1.2
- MOV P3,#0FFH;
- MOV TMOD,#15h ;定时器0计数检测铁片,定时器1工作定时状态
- MOV TH0,#0FFH;
- MOV TL0,#0FFH;
- mov th1,#4Ch;定时50MS,方式1
- mov tl1,#00h
- mov IP,#0Ah;现在定时器0,检测铁片中断级别最高
- mov TCON,#00h ;DI DIAN PIAN CHU FA
- mov IE,#0FH ; 开两个外中断及两个定时器中断,关总中断
- clr FC_MARK ;此条程序是想用P2。0,返程标志检测,换速度
- CLR ZHUANWAN_OK
- CLR ZUO_CHEWEI;初始化停车信号位
- CLR YOU_CHEWEI;
- CLR XIAOYIN4511
- MOV HUI_5S,#00H
- ;;;;;;;;;;;;;;;;;;;;;;CLR MANSU4_MARK
- ;;;;;;;;;;;;;;;;;;;;;CLR CHANGSU_MARK
- ;;;;;;;;;;;;;;;;;;;;;;CLR MANSU3_MARK
- MOV JISHUQI_MIAOGEWEI,#00H; 清时间值
- MOV JISHUQI_MIAOSHIWEI,#00H;
- MOV RUKU_TIME,#00H;
- MOV TINGCHE_TIME,#00H;
- MOV CHUKU_TIME,#00H;
- MOV DATA_DISPLAY,#00H
- mov shachedeng0,#100
- mov shachedeng1,#1
- setb shachedeng
- MOV B,#10
- CLR ZANTING_OVER
- SETB ZUO_CHEWEI
- SETB YOU_CHEWEI
- SETB P1.2
- mov p0,#00h;接语音芯片,先不说话
- LCALL YUYIN_MAICONG;
- ;------------------------------------
- QIDONG: MOV A,#00H
- MOV R0,#20H
- LOOP0: MOV @R0,A ;20H-24H清零
- INC R0
- CJNE R0,#25H,LOOP0
- SETB IRIN
- MOV 22H,#0FFH
- LOOP1: CALL IR_IN
- MOV A,22H;
- CJNE A,#0FFH,LOOP3;
- SJMP LOOP1
- LOOP3: CJNE A,#01,LOOP1;
- SJMP MAIN1;
- ;---------------------------------------------------
- ; IR 译码子程序
- ;引导码9MS低电平,4.375MS高电平,
- ;8窄8宽固定码(0.5MS/0.6MS;1.5MS/0.6MS)
- ;8位数据码;8位数据反码,(0.5MS/0.6MS;1.5MS/0.6MS)
- ;---------------------------------------------------
- IR_IN:
- MOV R0,#IRCOM
- I1: JNB P1.2,MAIN1
- JNB IRIN,I2 ;等待 IR 信号出现
- JMP I1
- I2: MOV R4,#20
- I20: CALL DEL
- DJNZ R4,I20
- JB IRIN,I1 ;确认IR信号出现
- I21: JB IRIN,I3 ;等 IR 变为高电平
- CALL DEL
- JMP I21
- I3: MOV R3,#0 ;8位数清为0
- LL: JNB IRIN,I4 ;等 IR 变为低电平
- CALL DEL
- JMP LL
- I4: JB IRIN,I5 ;等 IR 变为高电平
- CALL DEL
- JMP I4
- I5: MOV R2,#0 ;0.14ms 计数
- L1: CALL DEL
- JB IRIN, N1 ;等 IR 变为高电平
- ;IR=0,检查R2中的计数值
- MOV A,#8 ;0.14MS*8=1.12ms;A>8,是高电平;A<8,低电平
- CLR C
- SUBB A,R2 ;判断高低位
- ;IF C=0 BIT=0
- MOV A,@R0
- RRC A
- MOV @R0,A ;处理完一位
- INC R3
- CJNE R3,#8,LL ;需处理完8位
- MOV R3,#0
- INC R0 ;调整接收数据存储地址,20H-23H,22H里放的数据;
- CJNE R0,#24H,LL ;收集到4字节了?不等就是没接收完;相等就接收完了;
- N1: INC R2
- CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开
- RET
- ;---------------------------------------------------------------
- ; DELAY R5*0.14MS
- DEL:
- MOV R5,#1 ;IR解码使用
- DEL0: MOV R6,#2
- DEL1: MOV R7,#32
- DEL2: DJNZ R7,DEL2
- DJNZ R6,DEL1
- DJNZ R5,DEL0
- RET
- DELAY1: ;延时5MS
- MOV R6,#25
- DL2: MOV R7,#100
- DJNZ R7,$
- DJNZ R6,DL2
- RET
- ;***************************************
- ; 主程序
- ;***************************************
- MAIN1: MOV P0,#00011110B;车辆启动
- LCALL YUYIN_MAICONG;
- MOV DATA_DISPLAY,RUKU_TIME
- call DISPLAY
- call shachedengcx
- SJMP ZHU
- ;--------------------------------------
- ZHU:SETB EA;
- setb tr1;
- setb tr0;
- SETB XIAOYIN4511
- ;--------------------------------------
- MAIN:
- MOV A,RUKU_TIME
- CJNE A,#8,BI
- CHANGSU:SETB ZUOLUN;
- SETB YOULUN;
- CALL YAN_1
- CALL YAN_2;
- CLR ZUOLUN
- CLR YOULUN;
- CALL YAN_2;
- SJMP MAIN
- BI:JC CHANGSU
- MAIN_JIANSU:
- SETB ZUOLUN;
- SETB YOULUN
- CALL YAN_1;
- CLR ZUOLUN
- CLR YOULUN
- CALL YAN_1;
- CALL YAN_1
- JB ZHUANWAN_OK,FANCHENG; 全速前进程序
- JB FC_MARK,TING_60S
- SJMP MAIN
- ;-----------------------------------------停车60秒程序
- TING_60S:SETB EA;
- SETB TR1
- SETB ET1
- CLR EX0;
- CLR EX1;
- MOV JISHUQI_MIAOSHIWEI,#00H
- ; MOV P0,#01010011B
- ;CALL YUYIN_CLK;
- WAIT_ZHUANWAN: MOV TINGCHE_TIME,JISHUQI_MIAOSHIWEI;
- MOV DATA_DISPLAY,TINGCHE_TIME
- LCALL DISPLAY
- MOV A,JISHUQI_MIAOSHIWEI
- CJNE A,#61,WAIT_ZHUANWAN;先暂时让车停六十秒
- CLR TR1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- SETB ZANTING_OVER
- MOV JISHUQI_MIAOSHIWEI,#00H;再次清零,以便计返程时间
- MOV JISHUQI_MIAOGEWEI,#00H;
- ;---------------------------------------转弯程序
- ZHUANWAN1: mov p0,#01011010b; 播放转弯语音
- lcall YUYIN_MAICONG
- MOV DISPLAY,CHUKU_TIME
- LCALL DISPLAY
- SETB TR1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ZHUANWAN:CLR ZUOLUN_DIR;
- SETB YOULUN_DIR ;
- SETB ZUOLUN;
- SETB YOULUN;
- call YANSHI_CHANG;
- JB P3.3,CHU_ZHUANWAN
- CLR ZUOLUN;
- CLR YOULUN;
- CALL YANSHI_DUAN;
- JNB P3.3,ZHUANWAN
- ;--------------------------------转弯已完成,准备跳出转弯程序
- CHU_ZHUANWAN:
- CLR ZUOLUN;
- CLR YOULUN;
- CLR ZUOLUN_DIR
- CLR YOULUN_DIR;
- MOV R4,#250
- DJNZ R4,$
- SETB ZHUANWAN_OK ;转弯成功标志
- SETB EX1;
- SETB EX0;
- SETB TR1
- SETB EA
- SETB SHACHEDENG
- LJMP MAIN
- ;*************************************************************
- ;------------------------------------返回程序
- FANCHENG:
- MOV HUI_5S,CHUKU_TIME
- MOV A,CHUKU_TIME
- FANCHENG_ZC:SETB ZUOLUN;与来时一样的速度返回
- SETB YOULUN;
- CALL YAN_1
- CLR ZUOLUN
- CLR YOULUN;
- CALL YAN_2;
- SJMP FANCHENG
- ;***************************************
- ;*************************************************************
- ;--------------------------------------掉显示程序时延时
- DELAY_1S:MOV R4,#250
- Z3:MOV R5,#250
- Z2:MOV R6,#8
- Z1:DJNZ R6,Z1
- DJNZ R5,Z2
- DJNZ R4,Z3
- RET
- ;-------------------------------停车时用特短延时
- TEDUAN_DELAY0:MOV R4,#20
- DJNZ R4,$
- RET;
- TEDUAN_DELAY1:MOV R4,#40;
- DJNZ R4,$;
- RET;
- ;-------------------------------- 左轮调整程序
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
|