单片机蓝牙控制小车

上传人:jin****ng 文档编号:181994379 上传时间:2023-01-19 格式:DOCX 页数:28 大小:223.41KB
收藏 版权申诉 举报 下载
单片机蓝牙控制小车_第1页
第1页 / 共28页
单片机蓝牙控制小车_第2页
第2页 / 共28页
单片机蓝牙控制小车_第3页
第3页 / 共28页
资源描述:

《单片机蓝牙控制小车》由会员分享,可在线阅读,更多相关《单片机蓝牙控制小车(28页珍藏版)》请在装配图网上搜索。

1、CITY COLLEGE OF SCIENCE AND TECHNOLOGYCHOhiGaiNG UNIVERSITY単片机原理及应用课程设计课 题:基于单片机的蓝牙控制小车专 业:班 级:学 号:姓 名:指导教师:设计日期:成 绩:重庆大学城市科技学院 电气信息学院目录1. 设计曰的作用 22. 设计要求 23. 设计的具体实现 23.1 设计原理23.2 系统设计123.3 系统实现134. 总结 19参考文献 20附录 21附录 1 21附录 222C51 蓝牙控制小车设计报告1设计目的与意义目的与意义:提高学生动手能力,培养学生的思维,巩固理论知识,让我们 能对单片机更加深入的了解,加

2、深同学们对单片机的认识,通过自己动手让 小车跑起来还能让同学们更加有积极性,参与感,成就感。让学生们亲自体 验这门课程的神奇性。因为无线技术的广泛使用,使蓝牙技术的发展成为了趋势之一,蓝牙可 以发送和接受语音和数据,满足了大多数人的需求,它也融合了其他相关产 品的特点,也是这样技术变得更多样性。实现了无线控制小车,摆脱了有线 控制的不方便,更加智能。2设计要求SPP 蓝牙串口调试助手 聊天窗口-1、在 Bluetooth_Car 项目中添加超声波躲避障碍功能 (在小车前进的过程 中,实时检测障碍物,一旦检测的距离,接近设定的值,触发蜂鸣器,报警系统 工作,小车停止前进);2、在Bluetoot

3、h_Car项目中的串口中断服务函数中,添加小车前进的8个方 向 ,前后左右,左前,右前,左后,右后;3、利用外部中断,强制停止小车运行(无论小车现在处于什么状态),蜂鸣 器报警Is后,可再运行;4、用手机的蓝牙串口调试助手来远程操作小车。3.设计的具体实现3.1 设计原理芯片常识: STM8、 C52 、 STM32 、 ARMC52 :主要做末端的控制11.0592MHZSTM32:主要做工业控制领域智能设备168MARM:主要做消费市场一一手机=单片机小车=了解原理图和数据手册一、软件建立工程建立工程时芯片选择-Atmel-AT89C52设置芯片频率,选择生成 16 进制可执行文件。=中断

4、=单片机获取外部数据的方式:1. 程序控制方式a. 无条件发送方式单片机认为外部设备一直都是准备好的,直接就拿数据使用。b. 条件判断方式在满足一定条件才获取数据。2. 中断方式由外部控制的,当有中断请求产生的时候,就可以在中断里面去实现获取数 据。3. DMA 直接存储控制器当需要从外界获取数据的时候,DMA可以向CPU申请获取数据,由DMA直接 获取数据。使用DMA可以绕过CPU处理数据,降低CPU的使用率。中断:当 CPU 正常运行的时候,突然收到一个中断请求(任务),完成中断 任务之后立即返回原来的程序继续执行。中断源:中断来源,发送中断的源头中断请求:中断发出的请求,申请执行任务中断

5、响应:CPU响应中断请求,暂停正在执行的任务,转而执行中断任务8 个中断源:INT0 外部中断0INT1 外部中断1INT2外部中断 2INT3外部中断 3T0定时器0T1定时器1T2定时器2Uart 串口中断如果使用c语言编程,中断查询次序号就是屮断号,例如:voidI nt 0_Rot i tine (void)interrupt 0;voidTinieifl_Rot intine (void)intend pt 1;voidInt 1 Routine (void)intend pt 2;voidTimer l_Rot in tine (void)intend pt 3;voidUART_

6、Rou tin e (void)interrupt 4;voidTimer2_Rot it ine (vo id)intend pt 5;voidI nt 2_Rot i tine (void)interrupt 6;voidI nt 3_Rot i tine (void)interrupt 7;中断有优先级:分为4 级,从03,数字越大优先级越高,高优先级的中断可以打断低优先 级的中断。中断的查询次序:在中断优先级相同的情况下,并且两个中断同时产生的时候,会优先执行查 询次序级别高的中断.查询次序不能打断中断.中断服务函数:void INT1_func(void) interrupt 2if

7、()小车两轮驱动:单片机的IO 口不能直接驱动电机运行,必须使用驱动模块才可以。电机转动原理:电机的两条线一根接电源正极,一根接负极就可以转动,当电极的方向改变 转动的方向也会改变。BIA = 1;BIB = 0;控制右轮电机,如果想让轮子转动,只需要设置以上两个引脚,一个为 1一个为 0.P0.0左轮1P0.1左轮0P0.2右轮1P0.3右轮0如果轮子想要动起来,需要接电源线。思考:封装函数:前进、后退、停止、左前转、右前转、左后转、右后转n-U 明=定时器=定时器就是定时,定时产生中断或者是计数。工作方式:定时器:主要产生定时中断计数器:计时计数工作模式:模式 0: 12 位寄存器模式 1

8、:16 位寄存器模式 2: 8 位自动重装载寄存器模式3:两个8位寄存器,T1无效时钟周期:就是频率的倒数假设晶振12M,时钟周期是l/12us,实际上大多使用的是:1/11.0592状态周期:状态周期是时钟周期的两倍: 1/12*2机器周期:1 2个时钟周期定为1个机器周期,如果晶振是1 2M ,那么一个机器周期就刚 好是 1us。寄存器:TCON 控制寄存器TMOD 模式寄存器定时器0作模式1: TMOD.1 = 0 TMOD.0 = 1设置寄存器计数的初值::rolTL0 和 TH0TL0(8 BitsTH0 (S bits)50ms = (65536-初值)* (1/11.0592*1

9、2)50000us = (65536-初值 ) * 1.0850746080= 65536-初值初值 = 19456 = 0x4C00TH0 = 0x4C;TL0 = 0x00;=串口=一、计算机内部通讯的方式:UART (串口)、I2C、SPI、1-Write (单总线)二、数据通讯方式并行通讯:多个任务同时进行,增加速度。串行通讯:数据只通过一根数据线传输,一位一位的传输数据。三、串行通讯同步通讯:发送一位数据必须要接收一位数据,通过时钟线确定数据收发可能的下-个数据帧起始 位数据帧奇辔验下个 起始 位位0位1位2位3位4位5位6位7位8停止位T-起始位:发送器是通过发送起始莅而开始一个字

10、符的传送。起始位使丫I 数据线处于“space”状态|I 数据位:起始位之后就传送数据位。在数据位中,低位在前(左), 高位在后(右)。由于字符编码方式的不同,数据位可以是5、6、7ifrr a tclc m t t REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动 串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。串口选择方式1, 8位UART,波特率可变。设置SCON寄存器:SCON = / 0101 0000 = 0x50PCON 电源管理寄存器,设置 SMOD 的值电源控制寄存器PCON格式如下: PCON:电源控制寄存

11、器(不可位寻址)SFR nameAddressbitB7B6B5B4B3B2BlBOPCON87HnameSMODSMODOPOFGF1GFOPDIDLSMOD:波特率选择位。当用软件置位SMOD, BpSMOD=l,则使串行通信方式1、2、3的波特率加倍;SMOD=0,则各工作方式的波特率加倍。复位时SMOD=OoSMOD 默认值就是 0,也可以主动设置为 0.设置好之后需要开启总中断:串行口中断允许位ES位于中断允许寄存器IE中,中断允许寄存器的格式如下 IE:中断允许寄存器(可位寻址)SFR nameAddressbitB7B6B5B4B3B2BlBOIEA8Hnam eEAET2ESE

12、T1EXIETOEXOEA: CPU的总中断允许控制位,EA=1, CPU开放中断,EA=O, CPU屏蔽所有的中断申请。EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自 己的中断允许控制位控制。ES:串行口中断允许位,ES=1,允许串行口中断,ES=O,禁止串行口中断。EA = 1; ES = 1; 串口波特率计算:波特率=(2SM0D /32 )* (定时器溢出率)9600 = (1 /32)* (11059200/12/(256-TH1)9600 = (1 /32)* (921600/(256-TH1)921600/(256-TH1) = 307200(2

13、56-TH1)= 3TH1 = 253 = 0xFD 串口发送数据SUBF = h; / 发送数据,还要判断是否发送 3.2 系统设计项目框图:3.3系统实现程序代码如下:#include /器件配置文件#include #define uint unsigned int#define uchar unsigned char#define LCM_Data P2#define Busy 0x80用于检测LCM状态字中的Busy标识sbit RX = P1A1;sbit TX = P1A2;sbit LCM_RW = POT;定义 LCD 引脚sbit LCM_RS = P0A4;sbit LC

14、M_E = P0A2;sbit FM = P0A7;定义蜂鸣器sbit AIA = P2A3;定义电机sbit AIB = P2A2;sbit BIB = P2A1;sbit BIA = P2A0;void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void

15、Delay400Ms(void);void Decode(unsigned char ScanCode);void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);void SendOneByte(unsigned char c);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);unsigned char code mcustudio =YueQian;unsigned char code ema

16、il = www.gec-edu.org ;unsigned char code Cls =;unsigned char code ASCII15 =0,1,2,3,4,5,6,7,8,9,.,-,M;static unsigned char DisNum = 0; /显示用指针 unsigned int time=0;unsigned long S=0;bit flag =0;unsigned char disbuff4 = 0,0,0,0,;void Init_Int1(void)IT1 = 1;/下降沿触发EX1 = 1; / 开启外部中断 1EA = 1;/开启总中断void dela

17、y_ms(uint x) /延时函数uint i;while(x-)for(i=0;i0x19)/若到达字串尾则退出if (X =700)|flag=1)/超出测量范围显示“-”flag=0;DisplayOneChar(0, 1, ASCII11);DisplayOneChar(1, 1, ASCII10);/显示点DisplayOneChar(2, 1, ASCII11);DisplayOneChar(3, 1, ASCII11);DisplayOneChar(4, 1, ASCII12);/显示 Melsedisbuff0=S%1000/100;disbuff1=S%1000%100/1

18、0;disbuff2=S%1000%10 %10;DisplayOneChar(0, 1, ASCIIdisbuff0);DisplayOneChar(1, 1, ASCII10);/显示点DisplayOneChar(2, 1, ASCIIdisbuff1);DisplayOneChar(3, 1, ASCIIdisbuff2);DisplayOneChar(4, 1, ASCII12);/显示 M/* 定时器 T0 中断服务函数 */void Timer0IRQ() interrupt 1/T0 中断用来计数器溢出,超过测距范围flag=1;/*触发超声波模块*/超声波模块Trig控制端给

19、大于10us的高电平触发模块测距void StartModule()/启动模块TX=1;/启动一次模块_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;void delayms(unsigned int ms)unsigned char i=100,j;for(;ms;ms-)while(-i)j=10

20、;while(-j);/发送单个字符void SendOneByte(unsigned char c)SBUF = c;while(!TI);TI = 0;void main(void)unsigned char TempCyc;Delay400Ms();启动等待,等LCM讲入工作状态LCMInit();/LCM 初始化Delay5Ms();/延时片刻(可不要)DisplayListChar(0, 0, mcustudio);DisplayListChar(0, 1, email);ReadDataLCM();/测试用句无意义for (TempCyc=0; TempCyc10; TempCyc

21、+)Delay400Ms();/延时DisplayListChar(0, 1, Cls);FM = 1;/ TMOD=0x01;设TO为方式1;/ TH0=0;/ TL0=0;/ ETO=1;允许TO中断/ EA=1;/开启总中断TMOD=Ox21;设TO为方式1,定时器1方式2;/ 0010 0001SCON=0x50;TH1=0xFD;TL1=0xFD;TH0=0;TL0=0;TR0=1;ET0=1;/允许 T0 中断TR1=1;/开启定时器TI=1;ES = 1;EA=1;/开启总中断Init_Int1();while(1)StartModule();/ DisplayOneChar(0

22、, 1, ASCII0);while(!RX);/当 RX 为零时等待TR0=1;/开启计数while(RX);当RX为1计数并等待/关闭计数/计算TR0=0;Conut();FM = 1;AIA = 1;AIB = 1;BIA = 1;BIB = 1;/超声波测距 检测if(S20)FM = 0;AIA = 1;AIB = 1;BIA = 1;BIB = 1;elseFM =1;delayms(80); /80MSvoid UARTInterrupt(void) interrupt 4unsigned char buf;if(RI)RI = 0;/add your code here!buf

23、 = SBUF;/作回显没有任何作用SendOneByte(buf);if(buf = 1)car_go();delay_ms(1000);else if(buf = 2)car_back();delay_ms(1000);else if(buf = 3)right();delay_ms(1000);else if(buf = 4)left();delay_ms(1000);else if(buf = 5)go_right();delay_ms(1000);else if(buf = 6)go_left();delay_ms(1000);else if(buf = 7)back_right()

24、;delay_ms(1000);else if(buf = 8)back_left();delay_ms(1000);elseTI = 0;void Int1_Routine(void) interrupt 2EX1 = 0;AIA = 1;AIB = 1;BIA = 1;BIB = 1;FM = 0;delay_ms(500);FM = 1;EX1 = 1;总结学习单片机要有一定的 c 语言基础,单片机的基础知识我还是多多少少知道 一些,可是让我直接来做这一个项目,我却无从下手。通过老师的细心讲解,我 大概知道了大概框架和流程,再通过同学们的帮助更加了解和熟悉的掌握了其知 识。首先这次单片机

25、课程设计对我的收获还是非常的大,我的 c 语言方面的知识 掌握程度有所提升,这次给我们上课的不是学校的老师,而是公司里面的直系工 程师,通过他的教学,让我明白了以后出身社会不努力学习是无法立足的。从最开始的点灯,到中断,后来的让轮子动起来。也是一步比一步的难,可 是我不怕困难,有问题就请教。其实世界上难倒我们的不是问题本身,而是不去 解决问题的懒惰。点灯:我们使用的是低电平有效,硬件的一个字节的变量是8 位。中断:中 断方式是由外部控制的,老师让我们练习了一个程序,“按键中断实现:按键1 按下数码管的数字增加 1,按键 2 按下数码管的数字减少 1”。紧接着是让小车的 轮子动起来,要使轮子动起

26、来就需要控制电机,控制电机的引脚为 P0 口,如果 要控制左轮,就需要使引脚一个为 1,一个为 0。而且轮子要转起来还需要接电 源线。定时器就是定时,定时产生中断或者是计数,我们练习的是定时器 0的方 式 1 。最后讲的串口,单片机直接使用的是 TTL 电平: VCC 正极、 GND 负极、 TXD数据发送、RXD数据接收。串口编程的实现:初始化SCON、PCON、EA、ES、 TMOD 定时器1 方式 2、 TR1、 TH1、 TL1。这次课程设计的题目十分全面,把我们知道的不知道的都运用到了其中,其 中也遇到很多问题。特别是那个蓝牙模块,很多都是坏的,只有我们一个一个去 试。写出的程序,经

27、过不断地调试,最终完成。蓝牙需要设计成按键控制,所以 要在程序中进行按键设计case,设计要求,转弯时要亮灯,我开始做出来时,灯 不亮,是因为我没有加延时,加上延时就可以亮了。其中还有一个要求是后退时, 蜂鸣器响两声,我用亮灯同样的方法,蜂鸣器就一直响,我就把P07单独定义 为k,对k给1或0,还单独写了 void feng(),专门控制蜂鸣器响两声,最终 我成功了。这次单片机的课程设计非常的nice,让我收获很大,也希望以后有更多的 这样的机会,我也会努力去学习,去克服这些有趣的难题。参考文献1 黄青颖单片机课程项目化教学探索J山东工业技术,2018(24):232+196.2 王瑜,宋文学

28、,杨武成,孙俊茹.基于 STC89C52 单片机的多通道扭矩无线传输 系统设计J.电子设计工程,2018(22):185-189.杨宇翔.单片机串行接口工作方式N.电子报,2018-11-18(009).4邓春.PLC和单片机的区别N.电子报,2018-11-11(009).张跃博,王亚丽.基于MSP430F5529单片机的蓝牙遥控小车J.信息系统工 程,2016(07):40.6马惠兰.基于单片机的蓝牙搜救小车设计J.工业仪表与自动化装 置,2016(03):111-114.7卢胜昌.基于STC12C5A60S2单片机无线蓝牙智能追踪小车J.电子技术与软 件工程,2015(01):261.谈敏,刘高平,陈红良.基于手机蓝牙接口的小车遥控系统J.浙江万里学院学 报,2012,25(04):77-80.附录附录 1|IEI!审LCDI2S64供电&卜哉則鹉转串11iLii n亠: M! :沪 l.LJl,lIiWnSTSt KITMT3止UlE 51 Eg|qDS.I8B20 Fh孑4 *Uiii-r共啣管aiw红外按也辺林ft棚峪JMT严巴|7UVJMdDili. 3brr3亠邛二

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!