基于51单片机的蓝牙传输
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易无线数据收发设计
赛项报告
小组成员:
指导老师:
日期:二〇一五年五月三十一日
3系统软件设计 (11)
3-1源程序 (11)
4系统性能分析 (16)
4-1优缺点 (16)
4-2改进方向 (16)
1方案设定
1-1电路设计框图
图
HC-05
0~9)
2
2-1主控制模块
图6-1
STC89C52资料:
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash 存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
参数:
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[2]
2.工作电压:5.5V~
3.3V(5V单片机)/3.8V~2.0V(3V单片机)
3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
4.
5.
6.通用
7.ISP
(
8.具有
9.共3
10.
11.
12.
13.PDIP
2-2
AT
HC-05
)
当
的动态转换。
串口模块用到的引脚定义:
1、PIO8连接LED,指示模块工作状态,模块上电后闪烁,不同的状态闪烁间隔不同。
2、PIO9连接LED,指示模块连接成功,蓝牙串口匹配连接成功后,LED长亮。
3、PIO11模块状态切换脚,高电平-->AT命令响应工作状态,低电平或悬空-->蓝牙常规工作状态。
4、模块上已带有复位电路,重新上电即完成复位。
设置为主模块的步骤:
1、PIO11置高。
2、上电,模块进入AT命令响应状态。
3、超级终端或其他串口工具,设置波特率38400,数据位8位,停止位1位,无校验位,无流控制。
4、串口发送字符“AT+ROLE=1\r\n”,成功返回“OK\r\n”,其中\r\n为回车换行。
5、PIO置低,重新上电,模块为主模块,自动搜索从模块,建立连接。
2-3液晶显示模块
图9-1
LCD1602资料:
1602采用标准的16脚接口,其中:
第1脚:GND为电源地
第2
第3
第4
第5
第6
第7~
源。
15
16
特性:
3.3V
内建有CGRAM 作控制
2-4
3系统软件设计
3-1源程序
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitrs=P2^6;
sbiten=P2^7;
sbitrw=P2^5;
sbitKey=P2^4;
ucharcodetable_Receive[]={"Receive:"};
ucharcodetable_Send[]={"Send:"};
ucharcodetable[]={'0','1','2','3','4','5','6','7','8','9'}; ucharnum,temp,temp2,a,flag,add;
ucharn,m;
voiddelay(uintz)
{
}
}
}
write_lcd_com(0x01);
for(m=0;m<8;m++)
{
write_data(table_Receive[m]);
delay(1);
}
write_lcd_com(0x80+0x40);
for(n=0;n<8;n++)
{
write_data(table_Send[n]);
delay(1);
}
}
voidkeyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(2);
temp=P1;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case0xed:num=5;break;
case0xdd:num=6;break;
case0xbd:num=7;break;
case0x7d:num=8;break;