Project3课程设计
20142015学年第二学期
班 级: 浦电子
组员姓名:
组员学号:
指导老师:
2015年X月X日
目 录
第章 阶段务
第二章 基WIFI模块线数传输原理
11 时钟模块
12 单片机系统原理
13 温度传感器DS18B20
14 串口
15 WIFI模块
第三章 基WIFI模块线数传输实现
21 WIFI模块设置
22 串口部分设置
23 调试运行程
第四章 程序框图
第五章 结
第章 阶段务:
第阶段
(1天)1解课程WIFI模块详细研读说明书
2复单片机知识
(2天)1解温湿度传感器模块设计硬件模块
2解lcd1602显示模块设计硬件模块
(2天)1设计整合电路:5v转33v电路
2串口通讯电路
第二阶段
(4天) 1链接完成整体电路图设计检查
2焊接电路调试
第三阶段
(3天)1根设计硬件模块设计程序
(1):温湿度传感器模块
(2):串口通讯模块
(3):WIFI传输接收模块
(4):显示电路模块
(3天)2设计模块程序烧录单片机调试
第四阶段:2天
(2天)写报告
第二章 基WIFI模块线数传输原理
1.1时钟DS1302模块:
电路原理图:DS1302单片机连接仅需3条线:CE引脚SCLK串行时钟引脚IO串行数引脚Vcc2备电源外接32768kHz晶振芯片提供计时脉
读写时序说明:DS1302SPI总线驱动方式仅寄存器写入控制字需读取相应寄存器数控制字总低位开始输出控制字指令输入SCLK时钟升时数写入DS1302数输入低位(
0位)开始样紧8位控制字指令SCLK脉降读出DS1302数读出数低位高位数读写时序图
1.2单片机系统原理:
说明
复位电路电容串联电阻构成图结合电容电压突变性质知道系统电RST脚会出现高电高电持续时间电路RC值决定典型51单片机RST脚高电持续两机器周期复位适组合RC取值保证复位
晶振电路典型晶振取110592MHz(准确9600波特率19200波特率串口通讯场合)12MHz(产生精确uS级时歇方便定时操作)
单片机片AT89S515251系列兼容单片机
特注意31脚(EAVpp)接高电时单片机复位部ROM0000H开始执行接低电时复位直接外部ROM0000H开始执行
1.3温度传感器DS18B20原理(连接单片机系统温度发送WIFI模块):
311 DS18B20性特点
(1) 独特单线接口方式需接口引脚通信
(2) DS18B20唯64位ROM序列码
(3) 中需外围元件
(4) 数线供电电压范围+30V+55 V
(5) 测温范围55℃ +125℃10℃+85℃范围精度+05℃分辨率00625℃
(6) 通编程实现912位数字读数方式温度转换成12位数字信号需时间长750ms9位分辩模式工作时仅需9375ms
(7) 户设定非易失性报警限值
(8) 告警搜索命令识定位超报警限值DS18B20
(9) DS18B20联惟三线实现点测温
(10)电源极性接反时DS18B20会发热烧毁正常工作
312 DS18B20部存储器温度数格式
DS18B20部存储器结构(图31)包括暂存RAM非易失性电擦EERAM者存放报警限THTL改变THT L中值时数首先写进暂存器第二三字节中机读出中容进行验证果正确机发送复制暂存器命令暂存器第二三字节复制THTL中样处理利确保该数单总线传输完整性[7]
暂存器结构 EERAM结构
温度低字节 (BYTE0)
温度高字节 (BYTE1)
限报警温度TH(BYTE2)
限报警温度TL(BYTE3)
结构寄存器 (BYTE4)
保留 (BYTE5)
保留 (BYTE6)
保留 (BYTE7)
CRC ( BYTE8)
TH
TL
结构寄存器
图31 DS18B20结构框图
暂存存储器作单线通信时确保数完整性8字节组成头两字节表示测温度读数12位转化例说明温度高低字节存放形式(温度存储形式表31)计算:12位转化12位数存储18B20两高低8位RAM中二进制中前面5位符号位果测温度05位0测数值00625实际温度果温度05位1测数值需取反加100625实际温度[8]
表31 温度存储形式
高8位
S
S
S
S
S
26
25
24
低8位
23
22
21
20
21
22
23
24
S1时表示温度负S0时表示温度正余低位二进制补码形式表示低位1时表示00625℃ 温度数字应关系表32示
表32 DS18B20温度数字应关系表
温度(℃)
输出二进制码
应十六进制码
+125
0000 0111 1101 0000
07D0H
+85
0000 0101 0101 0000
0550H
+250625
0000 0001 1001 0001
0191H
+10125
0000 0000 1010 0010
00A2H
+05
0000 0000 0000 1000
0008H
0
0000 0000 0000 0000
0000H
05
1111 1111 1111 1000
FFF8H
10125
1111 1111 0110 1110
FF5EH
250625
1111 1110 0110 1111
FF6FH
55
1111 1100 1001 0000
FC90H
DS18B20六条控制命令表33示:
表33 控制命令
指 令
约定代码
操 作 说 明
温度转换
44H
启动DS18B20进行温度转换
读暂存器
BEH
读暂存器9字节容
写暂存器
4EH
数写入暂存器THTL字节
复制暂存器
48H
暂存器THTL字节写E2RAM中
重新调E2RAM
B8H
E2RAM中THTL字节写暂存器THTL字节
读电源供电方式
B4H
启动DS18B20发送电源供电方式信号CPU
313 DS18B20操作命令时序特性
DS18B20读写数位着严格时序求根IO线读写数时DS18B20保证位数传输正确性完整性着严格通信协议DS18B20步操作遵循严格工作时序通信协议机控制DS18B20完成温度转换程根DS18B20通讯协议须三步骤:次读写前DS18B20进行复位复位成功发送条ROM指令发送RAM指令样DS18B20进行预定操作 该协议定义种信号时序:初始化时序读时序写时序时序机作设备单总线器件作设备次命令数传输机动启动写时序开始果单总线器件送回数进行写命令机需启动读时序完成数接收外数命令传输低位先[9]
(1)DS18B20复位时序
机控制DS18B20完成操作前必须先初始化机发复位脉(短480µs低电)接着机释放总线进入接收状态DS18B20检测I0引脚升等15~60µs然发出存脉(60~240)µs低电图32示
(2)DS18B20读时序
DS18B20读时序分读0时序读1时序两程DS18B20读时序机单总线拉低15秒释放单总线DS18B20数传输单总线DS18B20完成读时序程少需60µs图33示
图32 DS18B20复位时序
图33 DS18B20读时序
(3)DS18B20写时序
DS18B20写时序读时序样然分写0时序写1时序两程
DS18B20写0时序写1时序求写0时序时单总线拉低少60µs保证DS18B20够15µs45µs间正确采样IO总线0电写1时序时单总线拉低15µs释放单总线图34示
图34 DS18B20写时序
DS18B20通讯协议知机控制DS18B20完成温度转换程必须三步骤:次读写前DS18B20进行复位复位成功发送条ROM指令发送RAM指令DS18B20进行预定操作复位求CPU数线拉500µs然释放DS18B20收信号等16~60µs左右然发出60~240µs存低脉CPU收信号表示复位成功
1.4串口部分(WIFI电脑单片机进行通讯)
串口原理图:
80C51串行口结构图:
80C51串行口工作方式 :
方式1
方式110位数异步通信口TXD数发送引脚RXD数接收引脚传送帧数格式图示中1位起始位8位数位1位停止位
1 方式1输出
方式1输入
软件置REN1时接收器选择波特率16倍速率采样RXD引脚电检测RXD引脚输入电发生负跳变时说明起始位效移入输入移位寄存器开始接收帧信息余位接收程中数输入移位寄存器右边移入起始位移输入移位寄存器左边时控制电路进行次移位RI0SM20(接收停止位1)时接收9位数前8位数装入接收SBUF第9位(停止位)进入RB8置RI1CPU请求中断
始位1位数9位(含1位附加第9位发送时SCON中TB8接收时RB8)停止位1位帧数11位方式2波特率固定晶振频率164132方式3波特率定时器T1溢出率决定
1.5WIFI模块:
接口:
1 电源接口
系统采标准电源插座外径55mm径21mm标准尺寸正外负输入电压范围5~48V电流350mA
2 指示灯
ID
名称
描述
1
Power
设备供电亮
2
Ready
部Linux系统启动完成亮
3
Link
网络连接建立亮
4
RXD
设备串口收数闪烁
5
TXD
设备通串口外发送数时闪烁
23 RS232接口
设备串口公口(针)RS232 电(直接连电脑串口电)引脚序计算机COM 口保持致电脑连接时需交叉线(23 交叉78 交叉55 直连78 接定直连电脑否导致工作正常)6 根线定义余悬空
序号
名称
描述
2
RXD
设备数接收引脚
3
TXD
设备数发送引脚
5
GND
信号
8
RTS
请求发送
8
CTS
清发送
9
VCC
默认未PCB 焊盘跳线需时设备电源输入正极连接串口传感器供电者外部通串口线设备供电
第三章 基WiFi模块线传输实现
21 WIFI模块设置
22串口部分设置
23调试:
运行程:
单片机首先运行然DS18B20DS1302LCD1602进行初始化接着DS18B20DS1302进行写设置读取温度时间单片机处理数LCD1602显示单片机进行串口初始化通串口程序温度时间准备等串口接收相应信号发送数程序检测温度温度超设定值(值通终端修改)发出报警信号蜂鸣器报警温度降(通终端开降温系统)蜂鸣器关闭
第五章 程序框图
程序:
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit DQP2^0
sbit lcdenP3^4
sbit lcdrsP3^5
sbit dulaP2^6
sbit welaP2^7
sbit ledP1^0
sbit sclkP1^4 时钟信号线
sbit ioP1^5 信号线
sbit ceP1^6 片选RST
sbit buzzP2^3
sbit ledleP2^5
unsigned int temptemp1temp2temperxsflagascc
unsigned char j
uchar code day[]1234567
uchar shifenmiaonianyueri
uchar cdflag
uchar code number[]0123456789
sbit ACC0 ACC^0 定义寄存器ACC零位
sbit ACC7 ACC^7
void delay1(unsigned int m)
{
unsigned int ij
for(imi>0i)
for(j110j>0j)
}
void delay(unsigned int m)
{
while(m)
}
************************DS18B20程序**********************************************
void Init_DS18B20()
{
unsigned char x0
DQ1
delay(8)
DQ0
delay(80)
DQ1
delay(4)
xDQ
delay(20)
}
uchar ReadOneChar()
{
unsigned char i0
unsigned char dat0
for(i8i>0i)
{
DQ0
dat>>1
DQ1
if(DQ)
dat|0x80
delay(4)
}
return(dat)
}
void WriteOneChar(unsigned char dat)
{
unsigned char i0
for(i8i>0i)
{
DQ0
DQdat&0x01
delay(5)
DQ1
dat>>1
}
}
void duwendu()
{
unsigned char a0
unsigned char b0
Init_DS18B20()
WriteOneChar(0xcc)
WriteOneChar(0x44)
delay(5)
Init_DS18B20()
WriteOneChar(0xcc)
WriteOneChar(0xbe)
delay(5)
aReadOneChar()
bReadOneChar()
temp1(b<<4)&0x7f 高四位正负位
temp1+(a&0xf0)>>4 位
temp2a&0x0f 数
temp((b*256+a)>>4) 整数
xstemp2*00625*10
tempertemp+xs
}
****************************************lcd程序******************************************************************
void write_com(uchar com)
{
lcdrs0
P0com
delay(5)
lcden1
delay(5)
lcden0
}
void write_data(uchar date)
{
lcdrs1
P0date
delay(5)
lcden1
delay(5)
lcden0
}
******************************************************************** 串口初始化 *********************************
void ckinit()
{
TMOD0x20设置定时器1工作方式2
TH10xfa
TL10xfa
TR11
REN1 允许串行接收
SM00
SM11 工作方式1
SCON0x50
PCON0x80 波特率加倍
EA1
ES1
}
******************************************************************************************************
LCD1602初始化 *****************************************************************************
void lcdinit()
{
dula0
wela0
ledle0
lcden0
write_com(0x38)
write_com(0x0e)
write_com(0x06)
write_com(0x01)
write_com(0x80+0x10)
}
***************************************
************* 温度显示
*********************************
void display()
{
write_com(0x80+0x40)
write_data(number[temper100])
write_data(number[temp10])
write_data(number[temp10])
write_data('')
write_data(number[xs10])
write_data('C')
}
void fas(unsigned char dat)
{
ES0 串口中断允许位
SBUFdat
while(TI)
TI0
ES1
}
********************************************************************
发送字符串函数 *********************************
void fss(unsigned char *str)
{
uchar bi
bstrlen(str)
for(i0i
fas(*str)
str++
}
}
******************************************************************** DS1302写字节程序 *********************************
void write_ds1302_byte(uchar add) DS1302写字节数
{
uchar i
ACC add
for(i8 i>0 i)
{
io ACC0 低位数传输IO
sclk 1 时钟拉高读走数
sclk 0 时钟拉低允许数变化
ACC ACC >> 1 ACC右移位然低位传送
}
}
******************************************************************** DS1302读字节 *********************************
uchar read_ds1302_byte() 读DS1302字节
{
uchar i
for(i8 i>0 i)
{
ACC ACC >>1 特说明读回数低位高位
ACC7 io 读回数存ACC寄存器高位然移低位
sclk 1
sclk 0
}
return ACC
}
******************************************************************** DS1302写址数 *********************************
void write_ds1302(uchar add uchar dat)写意址意数
{
ce0 根时序图编写
sclk0
ce1 片选开
write_ds1302_byte(add)
write_ds1302_byte(dat)
io0 释放总线
sclk0 时钟释放
ce0 片选关闭
}
******************************************************************** DS1302读址数 返回值:时间 *********************************
uchar read_ds1302(uchar add) 读意址数
{
uchar temp
ce0
sclk0
ce1 片选开
write_ds1302_byte(add)
tempread_ds1302_byte()
sclk0 时钟释放
io0 释放总线
ce0 片选关闭
return temp
}
******************************************************************************************************
************* 时间显示函数 *********************************
void dis_sj()
{
uchar thtl
nianread_ds1302(0x8d) 年寄存器
yueread_ds1302(0x89) 月寄存器
riread_ds1302(0x87) 日寄存器
write_com(0x80+0x08) 设置时位置
thnian>>4
write_data(number[th]) 刷新年高位
tlnian&0x0f
write_data(number[tl]) 刷新年低位
write_data('')
thyue>>4
write_data(number[th])
tlyue&0x0f
write_data(number[tl])
write_data('')
thri>>4
write_data(number[th])
tlri&0x0f
write_data(number[tl])
shiread_ds1302(0x85) 时寄存器
fenread_ds1302(0x83) 分寄存器
miaoread_ds1302(0x81) 秒寄存器
write_com(0x80+0x48)
thshi>>4
write_data(number[th]) 刷新时高位
tlshi&0x0f
write_data(number[tl]) 刷新时低位
write_data('')
thfen>>4
write_data(number[th])
tlfen&0x0f
write_data(number[tl])
write_data('')
thmiao>>4
write_data(number[th])
tlmiao&0x0f
write_data(number[tl])
}
void fssj()
{
uchar thtl
thnian>>4
fas(number[th])
tlnian&0x0f
fas(number[tl])
fas('')
thyue>>4
fas(number[th])
tlyue&0x0f
fas(number[tl])
fas('')
thri>>4
fas(number[th])
tlri&0x0f
fas(number[tl])
fss( )
thshi>>4
fas(number[th])
tlshi&0x0f
fas(number[tl])
fas('')
thfen>>4
fas(number[th])
tlfen&0x0f
fas(number[tl])
fas('')
thmiao>>4
fas(number[th])
tlmiao&0x0f
fas(number[tl])
fss( )
fss(Temp )
}
void main()
{
ckinit()
lcdinit()
cc30
duwendu()
delay1(1000)
while(1)
{
duwendu()
dis_sj()
duwendu()
display()
if(flag1)
{
if(a'1')
{
fssj()
fas(number[temp10])
fas(number[temp10])
fas('')
fas(number[xs10])
fas(' ')
fas('C')
}
if(a'2')
{
fas(number[cc10])
fas(number[cc10])
fas(' ')
fas('C')
}
if(a'3')
{
cc++
}
if(a'4')
{
cc
}
if(a'5')
{
P10xff
ledle1
P10xfe
delay1(5)
ledle0
}
if(a'6')
{
P10xff
ledle1
delay1(5)
ledle0
}
flag0
}
if(temp>cc)
{
buzz0
fssj()
fas(number[temp10])
fas(number[temp10])
fas('')
fas(number[xs10])
fas(' ')
fas('C')
fas(' ')
fss(warnning)
delay1(2000)
if(a'3')
{
cc++
}
if(a'4')
{
cc
}
}
else
{
buzz1
}
}
}
void ser() interrupt 4
{
RI0 接收标志位
flag1
aSBUF 接收数
}
框图:
第四章 结
次课程设计中部分功够利实现部分代码法实现功首先出现问题温度报警功DS18B20初始化结束默认温度85度单片机读取温度直接进入报警程序点合理避免初始温度影响初始化程序WHILE循环前加段代码首先读温度时温度85度然延时段时间进入循环紧接着读温度时温度正常温度单片机正常工作然问题通串口发送报警字符时需发送会程序繁琐减弱程序读性时需函数发送字符串然段函数需指针字符串中函数库介方面少没太方法半天学重温C语言基础运STRLEN()函数完成函数设计
南京工业学课程设计
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档