电子工程训练课程实验报告无线蓝牙小车.docx

上传人:b****6 文档编号:8328771 上传时间:2023-01-30 格式:DOCX 页数:26 大小:176.94KB
下载 相关 举报
电子工程训练课程实验报告无线蓝牙小车.docx_第1页
第1页 / 共26页
电子工程训练课程实验报告无线蓝牙小车.docx_第2页
第2页 / 共26页
电子工程训练课程实验报告无线蓝牙小车.docx_第3页
第3页 / 共26页
电子工程训练课程实验报告无线蓝牙小车.docx_第4页
第4页 / 共26页
电子工程训练课程实验报告无线蓝牙小车.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

电子工程训练课程实验报告无线蓝牙小车.docx

《电子工程训练课程实验报告无线蓝牙小车.docx》由会员分享,可在线阅读,更多相关《电子工程训练课程实验报告无线蓝牙小车.docx(26页珍藏版)》请在冰豆网上搜索。

电子工程训练课程实验报告无线蓝牙小车.docx

电子工程训练课程实验报告无线蓝牙小车

 

题目:

基于STC15W4K32S4的蓝牙智能小车

 

课程名称:

学院(系):

专业:

班级:

学号:

实验序号:

学生姓名:

成绩:

 

2016年11月4日

成绩评定

项目

各项总分

得分

焊接

30

最小系统与电源

10

功能实现

45

实验报告

10

出勤

5

总分

电子安装实验室安全守则

(请在下一页手抄一份安全守则)

1、每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照安全规范进行实验,确保实验安全;

2、桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面;

3、电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,立即找老师进行安全处理;

4、电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回烙铁架中,以免烫伤物品;

5、实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必须冷却后再放入抽屉中;

6、焊锡中含铅,不要含在口中,实验结束后要洗手;

7、稳压电源在使用前,应先调好要使用的电压,再进行线路连接,并确保连接的极性正确;

8、抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电;

9、实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物品整理好。

 

题目:

1设计要求

以STC15W4K32S4单片机为核心,设计焊接并且调试一个实际的单片机控制系统,通过蓝牙实现用手机控制小车的动作状态。

(1)焊接:

在实现基本功能的前提下焊接好设计的系统,尽量使其稳定焊点稳定,焊接美观。

(2)最小系统与电源:

利用7505稳压芯片实现输入电压转为五伏稳压电源输出。

(3)功能实现:

实现用手机自制app或者蓝牙串口助手控制小车前进方向以及行驶速度。

2设计分析及系统方案设计

围绕STC15W4K32S4单片机,把系统的设计规划分为两部分

硬件部分:

(1)设计并且绘制原理图

(2)按照原理图焊接电路板

软件部分:

(1)编写实验程序

(2)系统调试

将单片机的p0口用于驱动lcd1602,p4.5,p2.7,p2.3,p2.2用于输出pwm控制电机。

P3.0与p3.1用于与主机通信并且用于蓝牙串口通信。

3各功能模块硬件电路设计

(1)最小系统

由于STC15W4K32S4的性能已经进行了优化,所以不同于以往所接触的单片机,它的晶振已经集成化,不用再搭建最小系统电路。

(2)电源电路

将输入电压转为5v稳压电源输出

(3)LCD液晶屏电路

使用P1.0~P1.7与D0~D7相接,EN,RW,RS分别与P0.7,P0.6,P0.5相接

(4)蓝牙与单片机连接

这里直接用P3.0,P3.1与主机的串口通信和与蓝牙共用串口。

(5)LN298模块

 

 

4系统软件设计

#include"reg51.h"

#include"intrins.h"

#include"stdio.h"

#include"stdlib.h"

#defineMAIN_Fosc11059200L//定义主时钟

/*************变量声明**************/

typedefunsignedcharu8;

typedefunsignedintu16;

typedefunsignedlongu32;

typedefunsignedcharBYTE;

typedefunsignedintWORD;

#defineucharunsignedchar

#defineuintunsignedint

#defineelifelseif

#definePWMC(*(unsignedintvolatilexdata*)0xfff0)

#definePWMCH(*(unsignedcharvolatilexdata*)0xfff0)

#definePWMCL(*(unsignedcharvolatilexdata*)0xfff1)

#definePWMCKS(*(unsignedcharvolatilexdata*)0xfff2)

#definePWM2T1(*(unsignedintvolatilexdata*)0xff00)

#definePWM2T1H(*(unsignedcharvolatilexdata*)0xff00)

#definePWM2T1L(*(unsignedcharvolatilexdata*)0xff01)

#definePWM2T2(*(unsignedintvolatilexdata*)0xff02)

#definePWM2T2H(*(unsignedcharvolatilexdata*)0xff02)

#definePWM2T2L(*(unsignedcharvolatilexdata*)0xff03)

#definePWM2CR(*(unsignedcharvolatilexdata*)0xff04)

#definePWM3T1(*(unsignedintvolatilexdata*)0xff10)

#definePWM3T1H(*(unsignedcharvolatilexdata*)0xff10)

#definePWM3T1L(*(unsignedcharvolatilexdata*)0xff11)

#definePWM3T2(*(unsignedintvolatilexdata*)0xff12)

#definePWM3T2H(*(unsignedcharvolatilexdata*)0xff12)

#definePWM3T2L(*(unsignedcharvolatilexdata*)0xff13)

#definePWM3CR(*(unsignedcharvolatilexdata*)0xff14)

#definePWM4T1(*(unsignedintvolatilexdata*)0xff20)

#definePWM4T1H(*(unsignedcharvolatilexdata*)0xff20)

#definePWM4T1L(*(unsignedcharvolatilexdata*)0xff21)

#definePWM4T2(*(unsignedintvolatilexdata*)0xff22)

#definePWM4T2H(*(unsignedcharvolatilexdata*)0xff22)

#definePWM4T2L(*(unsignedcharvolatilexdata*)0xff23)

#definePWM4CR(*(unsignedcharvolatilexdata*)0xff24)

#definePWM5T1(*(unsignedintvolatilexdata*)0xff30)

#definePWM5T1H(*(unsignedcharvolatilexdata*)0xff30)

#definePWM5T1L(*(unsignedcharvolatilexdata*)0xff31)

#definePWM5T2(*(unsignedintvolatilexdata*)0xff32)

#definePWM5T2H(*(unsignedcharvolatilexdata*)0xff32)

#definePWM5T2L(*(unsignedcharvolatilexdata*)0xff33)

#definePWM5CR(*(unsignedcharvolatilexdata*)0xff34)

#definePWM6T1(*(unsignedintvolatilexdata*)0xff40)

#definePWM6T1H(*(unsignedcharvolatilexdata*)0xff40)

#definePWM6T1L(*(unsignedcharvolatilexdata*)0xff41)

#definePWM6T2(*(unsignedintvolatilexdata*)0xff42)

#definePWM6T2H(*(unsignedcharvolatilexdata*)0xff42)

#definePWM6T2L(*(unsignedcharvolatilexdata*)0xff43)

#definePWM6CR(*(unsignedcharvolatilexdata*)0xff44)

#definePWM7T1(*(unsignedintvolatilexdata*)0xff50)

#definePWM7T1H(*(unsignedcharvolatilexdata*)0xff50)

#definePWM7T1L(*(unsignedcharvolatilexdata*)0xff51)

#definePWM7T2(*(unsignedintvolatilexdata*)0xff52)

#definePWM7T2H(*(unsignedcharvolatilexdata*)0xff52)

#definePWM7T2L(*(unsignedcharvolatilexdata*)0xff53)

#definePWM7CR(*(unsignedcharvolatilexdata*)0xff54)

sfrPWMCFG=0xf1;

sfrPWMCR=0xf5;

sfrPWMIF=0xf6;

sfrPWMFDCR=0xf7;

sfrTH2=0xD6;

sfrTL2=0xD7;

sfrIE2=0xAF;

sfrINT_CLKO=0x8F;

sfrAUXR=0x8E;

sfrAUXR1=0xA2;

sfrP_SW1=0xA2;

sfrP_SW2=0xBA;

sfrPIN_SW2=0xBA;

sfrS2CON=0x9A;

sfrS2BUF=0x9B;

sfrP4=0xC0;

sfrP5=0xC8;

sfrP6=0xE8;

sfrP7=0xF8;

sfrP1M1=0x91;//PxM1.n,PxM0.n=00--->Standard,01--->push-pull

sfrP1M0=0x92;//=10--->pureinput,11--->opendrain

sfrP0M1=0x93;

sfrP0M0=0x94;

sfrP2M1=0x95;

sfrP2M0=0x96;

sfrP3M1=0xB1;

sfrP3M0=0xB2;

sfrP4M1=0xB3;

sfrP4M0=0xB4;

sfrP5M1=0xC9;

sfrP5M0=0xCA;

sfrP6M1=0xCB;

sfrP6M0=0xCC;

sfrP7M1=0xE1;

sfrP7M0=0xE2;

sbitP00=P0^0;

sbitP01=P0^1;

sbitP02=P0^2;

sbitP03=P0^3;

sbitP04=P0^4;

sbitP05=P0^5;

sbitP06=P0^6;

sbitP07=P0^7;

sbitP10=P1^0;

sbitP11=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

sbitP14=P1^4;

sbitP15=P1^5;

sbitP16=P1^6;

sbitP17=P1^7;

sbitP20=P2^0;

sbitP21=P2^1;

sbitP22=P2^2;

sbitP23=P2^3;

sbitP24=P2^4;

sbitP25=P2^5;

sbitP26=P2^6;

sbitP27=P2^7;

sbitP30=P3^0;

sbitP31=P3^1;

sbitP32=P3^2;

sbitP33=P3^3;

sbitP34=P3^4;

sbitP35=P3^5;

sbitP36=P3^6;

sbitP37=P3^7;

sbitP40=P4^0;

sbitP41=P4^1;

sbitP42=P4^2;

sbitP43=P4^3;

sbitP44=P4^4;

sbitP45=P4^5;

sbitP46=P4^6;

sbitP47=P4^7;

sbitP50=P5^0;

sbitP51=P5^1;

sbitP52=P5^2;

sbitP53=P5^3;

sbitP54=P5^4;

sbitP55=P5^5;

sbitP56=P5^6;

sbitP57=P5^7;

/*************收发定义**************/

#defineBaudrate19600L//波特率

#defineUART1_BUF_LENGTH32

u8TX1_Cnt;//发送计数

u8RX1_Cnt;//接收计数

bitB_TX1_Busy;//发送忙标志

voidUART1_config(u8brt);//选择波特率,2:

使用Timer2做波特率,其它值:

使用Timer1做波特率.

voidPrintString1(u8*puts);

u8idataRX1_Buffer[UART1_BUF_LENGTH];//接收缓冲

/*************IO口定义**************/

sbitP_HC595_SER=P4^0;//pin14SERdatainput

sbitP_HC595_RCLK=P5^4;//pin12RCLkstore(latch)clock

sbitP_HC595_SRCLK=P4^3;//pin11SRCLKShiftdataclock

/*************本地变量声明**************/

voiddelay_ms(u8ms);

voidDisableHC595(void);

voidInitialize_LCD(void);

voidWrite_AC(u8hang,u8lie);

voidWrite_DIS_Data(u8DIS_Data);

voidClearLine(u8row);

u8BIN_ASCII(u8tmp);

voidPutString(u8row,u8column,u8*puts);

voidWriteChar(u8row,u8column,u8dat);

/*************变量声明**************/

#defineCYCLE0x1000L//定义PWM周期(最大值为32767)

u8DirLeft[15]={"DirLeft"};

u8DirRight[15]={"DirRight"};

u8DirUp[15]={"DirUp"};

u8DirDown[15]={"DirDown"};

u8HSpeed[15]={"SpeedNormal"};

u8NSpeed[15]={"SpeedHight"};

intflag=0;

sbitPdir1=P2^1;

sbitPdir2=P2^2;

sbitPfir1=P2^3;

sbitPfir2=P2^7;

voidIoInit(void);

voidSendMegBack(void);

voidENpwm(WORDDUTY1,WORDDUTY2,WORDoutch,WORDouten);

voidclosepwm();

WORDSpeed1=75L;

WORDSpeed2=80L;

WORDFspeed1=75l;

WORDFspeed2=80L;

bitDir=0;

//===========================================

voidmain(void)

{

IoInit();//初始化端口

Initialize_LCD();//初始化端口lcd

UART1_config

(1);//选择波特率,2:

使用Timer2做波特率,其它值:

使用Timer1做波特率.

EA=1;//允许总中断

while

(1)

{

flag=SBUF;

SendMegBack();

switch(flag){

case'0':

ClearLine

(1);

PutString(1,0,DirLeft);

Fspeed1=Speed1;Fspeed2=18*Speed2/32;

break;

case'1':

ClearLine

(1);

PutString(1,0,DirRight);

Fspeed1=19*Speed1/32;Fspeed2=Speed2;

break;

case'2':

ClearLine

(1);

PutString(1,0,DirUp);

Fspeed1=Speed1;Fspeed2=Speed2;

Dir=0;

break;

case'3':

ClearLine

(1);

PutString(1,0,DirDown);

Fspeed1=Speed1;Fspeed2=Speed2;

Dir=1;

break;

case'4':

ClearLine(0);

PutString(0,0,NSpeed);

Speed1=95L;Speed2=100L;

Fspeed1=Speed1;Fspeed2=Speed2;

break;

case'5':

ClearLine(0);

PutString(0,0,HSpeed);

Speed1=75L;Speed2=80L;

Fspeed1=Speed1;Fspeed2=Speed2;

break;

case'6':

ClearLine(0);

PutString(0,0,NSpeed);

Speed1=Speed1-2l;Speed2=Speed2-2l;

Fspeed1=Speed1;Fspeed2=Speed2;

break;

case'7':

ClearLine(0);

PutString(0,0,NSpeed);

Speed1=Speed1+2l;Speed2=Speed2+2l;

Fspeed1=Speed1;Fspeed2=Speed2;

break;

default:

ClearLine(0);

PutString(0,0,HSpeed);

Speed1=75L;Speed2=80L;

Fspeed1=Speed1;Fspeed2=Speed2;

break;

}

if(Dir==0)

{

ENpwm(Fspeed1,Fspeed2,0x00,0x0a);

Pdir2=0;

Pfir2=0;

}

else

{

ENpwm(Fspeed1,Fspeed2,0x00,0x05);Pdir1=0;Pfir1=0;

}

delay_ms(20);

}

}

/**********************************************/

voidIoInit(void){

P0M1=0;P0M0=0;//设置为准双向口

P1M1=0;P1M0=0;//设置为准双向口

P2M1=0;P2M0=0;//设置为准双向口

P3M1=0;P3M0=0;//设置为准双向口

P4M1=0;P4M0=0;//设置为准双向口

P5M1=0;P5M0=0;//设置为准双向口

P6M1=0;P6M0=0;//设置为准双向口

P7M1=0;P7M0=0;//设置为准双向口

}

voidSendMegBack(void){

if((TX1_Cnt!

=RX1_Cnt)&&(!

B_TX1_Busy))//收到数据,发送空闲

SBUF=RX1_Buffer[TX1_Cnt];//把收到的数据远样返回

B_TX1_Busy=1;

if(++TX1_Cnt>=UART1_BUF_LENGTH)TX1_Cnt=0;

}

voidENpwm(WORDDUTY1,WORDDUTY2,WORDoutch,WORDouten)

{

PIN_SW2|=0x80;//使能访问XSFR

PWMCFG=0x00;//配置PWM的输出初始电平为低电平

PWMCKS=0x00;//选择PWM的时钟为Fosc/(0+1)

PWMC=CYCLE;//设置PWM周期

PWM3T1=CYCLE*DUTY1/100;//设置PWM2第1次反转的PWM计数

PWM4T1=CYCLE*DUTY1/100;//设置PWM2第2次反转的PWM计数

PWM5T1=CYCLE*DUTY2/100;//设置PWM3第1次反转的PWM计数

PWM2T2=CYCLE*DUTY1/100;//设置PWM3第2次反转的PWM计数

PWM2CR=0x08;//选择PWM2输出引脚,不使能PWM2中断

PWM3CR=0x00;

PWM4CR=0x00;

PWM5CR=0x00;

PWMCR=outen;//使能PWM信号输出

PWMCR|=0x80;//使能PWM

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

当前位置:首页 > 表格模板 > 合同协议

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

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