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

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

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

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

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

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"

intrins.h"

stdio.h"

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);

EA=1;

//允许总中断

while

(1)

{

flag=SBUF;

SendMegBack();

switch(flag){

case'

0'

:

ClearLine

(1);

PutString(1,0,DirLeft);

Fspeed1=Speed1;

Fspeed2=18*Speed2/32;

break;

1'

PutString(1,0,DirRight);

Fspeed1=19*Speed1/32;

Fspeed2=Speed2;

break;

2'

PutString(1,0,DirUp);

Dir=0;

3'

PutString(1,0,DirDown);

Dir=1;

4'

ClearLine(0);

PutString(0,0,NSpeed);

Speed1=95L;

Speed2=100L;

5'

PutString(0,0,HSpeed);

Speed1=75L;

Speed2=80L;

6'

Speed1=Speed1-2l;

Speed2=Speed2-2l;

7'

Speed1=Speed1+2l;

Speed2=Speed2+2l;

default:

}

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