单片机毕业设计.docx
- 文档编号:11080673
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:52
- 大小:2.14MB
单片机毕业设计.docx
《单片机毕业设计.docx》由会员分享,可在线阅读,更多相关《单片机毕业设计.docx(52页珍藏版)》请在冰豆网上搜索。
单片机毕业设计
安徽工程职业技术学院
毕业论文
题目(中文)基于PIC单片机的多路温度巡回检测系统
(英文)Multi-channelTemperatureMonitor
BaseonPIC16F877A
系别:
电子工程系
专业:
生产过程自动化班级:
2
姓名:
赵成杰学号:
2008
指导教师:
林斌
摘要:
本文介绍了一种基于PIC16F877A单片机,利用DS18B20对多路温度采集,并进行温度的控制与检测,并通过12864液晶显示出来。
系统中通过控制按钮实现了实时各路的报警温度,并且实现多路与任一单路温度显示切换,从而既可以进行多路的检测又可以进行任一单路的监控,而且还有数字跟图形两种显示方式更为直观。
在温度超过设定温度时温度跟时间通过24C02存储起来,以便查看,同时可以通过固定电话远程报警,还能将温度上传至PC机,进行后续处理。
关键词:
温度检测;单片机;串行通讯;DS18B20;
基于PIC单片机的多路温度监控巡回系统
1系统设计
在工业生产和日常生活中,经常要对温度进行测量与控制,并且有时是对多个点进行温度测量,比如冷库温度监控、环境温度监测、农业温室监控、粮库温度监控等。
在这种情况下,多点温度检测系统应运而生。
多点温度检测系统通常能够对多个工作点的温度进行检测,显示当前温度,并能够对温度进行存储和报警,还能将温度上传至PC机,进行后续处理。
传统的测温元件有热电偶和热电阻,需很多硬件支持并且电路复杂。
本文将设计一款由新型的数字温度传感器DS18B20配合单片机,具有温度检测、显示、存储、自动统计分析及跟电脑通讯连接还利用固定电话远程报警等功能的多点温度监控系统。
图1.1多路温度监控系统模拟应用
温度监控主系统构架框图如图1.2所示:
图1.2多路温度监控系统构架框图
图1.3手工焊接实物图
主要技术参数
A温度检测范围:
-55℃~+125℃
B测量精度:
0.0625℃
C显示方式:
LCD12864显示
D报警方式:
固话报警
2主芯片:
PIC16F877A单片机简介
2.1PIC单片机的优越之处:
(1)哈佛总线结构:
MCS-51单片机的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC单片机的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。
正因为在PIC单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:
程序和数据总线可以采用不同的宽度。
数据总线都是8位的,但指令总线位数分别位12、14、16位。
(2)流水线结构:
MCS-51单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样就实现了单周期指令。
(3)寄存器组:
PIC单片机的所有寄存器,包括I/O口,定时器和程序计数器等都采用RAM结构形式,而且都只需要一个指令周期就可以完成访问和操作;而MCS-51单片机需要两个或两个以上的周期才能改变寄存器的内容。
(4)运行速度高:
由于采用了哈佛总线结构,以及指令的读取和执行才用了流水作业方式,使得运行速度大大提高。
(5)功耗低:
PIC单片机的功率消耗极低,是目前世界上最低的单片机品种之一。
在4MHz时钟下工作时耗电不超过2mA,在睡眠模式下耗电可以低到1uA以下。
(6)驱动能力强:
I/O端口驱动负载的能力较强,每个I/O引脚吸入和输出电流的最大值可分别达到25mA和20mA,能够直接驱动发光二极管LED、光电耦合器或者轻微继电器等。
(7)外接电路简洁
PIC单片机片内集成了上电复位电路、I/O引脚上拉电路、看门狗定时器等,可以最大程度减少或免用外接器件,以便实现“纯单片机”应用。
这样,不仅方便于开发,而且还可节省用户的电路空间和制作成本。
(8)程序保密性强
目前,尚无办法对其直接进行解密拷贝,可以最大限度的保护用户的程序版权。
2.2PIC16F877A引脚图及主要性能
PIC16F877A的详细引脚如图2.2-1所示。
图2.2-1PIC16F877A引脚图图2.2-2PIC16F877A实物图
主要性能参数如下所示:
●具有高性能RISCCPU
●仅有35条单字指令
●100000次擦写周期
●除程序分支指令为两个周期外,其余均为单周期指令
●运行速度:
DC—20MHZ始终输入
DC—200ns指令周期
●8K*14个FLASH程序存储器
368*8个数据存储器(RAM)字节
256*8EEPRM数据存储器字节
●提供14个中断源
●功耗低
在5V,4MHZ时钟运行时电流小于2mA
在3V,32KHZ时钟运行时电流小于20Ua
●支持在线串行编程(ICSP)
●运行电压范围广,2.0V到5.5V
●输入及输出电流可达到25mA
●Timer0:
带有预分频器的8位定时器/计数器
●Timer1:
带有预分频器的16位定时器/计数器,在使用外部晶振震荡时钟时,在睡眠期间仍能工作
●Timer2:
带有8位周期寄存器,预分频器和后分频器的8位定时器/计数器。
●2个捕捉器,比较器,PWM模块
其中:
捕捉器是16位,最大分辨率是12.5ns
比较器是16位,最大分辨率是200ns
PWM最大分辨率是10位
●10位多通道模数转换器
2.3最小系统
2.3.1复位功能
PIC16F877A的复位功能设计得比较完善,实现复位或引起复位的条件和原因可以归纳成4类:
人工复位、上电复位、看门狗复位、欠压复位。
这里简单介绍一下人工复位
人工复位:
无论是单片机在正常运行程序,还是处在睡眠状态或出现死机状态,只要在人工复位端MCLR加入低点平信号,就令其复位。
本次设计的电路图如图2.3-1所示。
图2.3—1PIC最小系统电路图图2.3—2最小系统实物图
2.3.2系统时钟
数字电路的工作离不开时钟信号,每一步细微动作都是在一个共同的时间基准信号协调下完成的。
作为时基发生器的时钟震荡电路,为整个单片机芯片的工作提供系统时钟信号,也为单片机与其他外接芯片之间的通讯提供可靠的同步时钟信号。
PIC16F877A的时钟电路是由片内的一个反相器和一个反馈电阻,与外接的1个石英晶体和2个电容,共同构成的一个自激多谐振荡器。
电路如图2.3-1所示。
2.4设计心得总结
PIC16F877A的最小系统跟51相似,较为简单。
芯片自身增加了很多功能,如:
自带8路AD转换、增加SPI总线,引脚复位功能多等。
芯片自身功能的增加给设计带来了很多灵活性,同时也是学习的难点。
3LCD12864液晶原理介绍及接口实现
3.1液晶显示模块概述
12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。
主要技术参数和显示特性:
电源:
VDD3.3V~+5V(内置升压电路,无需负压);
显示内容:
128列×64行
显示颜色:
黄绿
显示角度:
6:
00钟直视
LCD类型:
STN
与MCU接口:
8位或4位并行/3位串行
配置LED背光
多种软件功能:
光标显示、画面移位、自定义字符、睡眠模式等
3.2液晶引脚说明
引脚号
引脚名称
方向
功能说明
1
VSS
-
模块的电源地
2
VDD
-
模块的电源正端
3
V0
-
LCD驱动电压输入端
4
RS(CS)
H/L
并行的指令/数据选择信号;串行的片选信号
5
R/W(SID)
H/L
并行的读写选择信号;串行的数据口
6
E(CLK)
H/L
并行的使能信号;串行的同步时钟
7
DB0
H/L
数据0
8
DB1
H/L
数据1
9
DB2
H/L
数据2
10
DB3
H/L
数据3
11
DB4
H/L
数据4
12
DB5
H/L
数据5
13
DB6
H/L
数据6
14
DB7
H/L
数据7
15
PSB
H/L
并/串行接口选择:
H-并行;L-串行
16
NC
空脚
17
/RET
H/L
复位低电平有效
18
NC
空脚
19
LED_A
-
背光源正极(LED+5V)
20
LED_K
-
背光源负极(LED-OV)
逻辑工作电压(VDD):
4.5~5.5V
电源地(GND):
0V
工作温度(Ta):
0~60℃(常温)/-20~75℃(宽温)
3.3接口时序
模块有并行和串行两种连接方法,本文采用并行接法(时序如下):
8位并行连接时序图
MPU写资料到模块
程序实现如下:
/********************************************************************
*名称:
send_i()
*功能:
写一个字节命令到LCD
*入口参数:
unsignedcharx字符
*******************************************************************/
voidsend_i(unsignedcharx)
{
chk_busy();//检测LCD是否工作繁忙
rs=0;//设置该字节数据为控制命令
rw=0;//设置此次操作为写
PORTD=x;//送数据口PORTD
e=1;//使能
nop();
nop();
nop();
e=0;//禁止
}
MPU从模块读出资料
程序实现如下:
/*************************************************
读数据
**************************************************/
unsignedcharu8_Lcd12864ReadByte_f(void)
{
unsignedcharbyReturnValue;
chk_busy();//检测LCD是否工作繁忙
TRISD=0XFF;//设置PD口为输入状态
PORTD=0xff;//PD初始化为高电平
rs=1;//读置高
rw=1;//写置高
e=0;//使能置低
e=1;//使能置高
byReturnValue=PORTD;//读数据
e=0;//关使能
TRISD=0X00;//恢复PD口为输出
returnbyReturnValue;//返回读到的数据
}
3.4具体指令介绍
1、清除显示
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
L
L
L
H
功能:
清除显示屏幕,把DDRAM位址计数器调整为“00H”
2、位址归位
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
L
L
H
X
功能:
把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM
3、位址归位
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
L
H
I/D
S
功能:
把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM功能:
执行该命令后,所设置的行将显示在屏幕的第一行。
显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
4、显示状态开/关
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
H
D
C
B
功能:
D=1;整体显示ONC=1;游标ONB=1;游标位置ON
5、游标或显示移位控制
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
H
S/C
R/L
X
X
功能:
设定游标的移动与显示的移位控制位:
这个指令并不改变DDRAM的内容
6、功能设定
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
H
DL
X
0RE
X
X
功能:
DL=1(必须设为1)RE=1;扩充指令集动作RE=0:
基本指令集动作
7、设定CGRAM位址
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
H
AC5
AC4
AC3
AC2
AC1
AC0
功能:
设定CGRAM位址到位址计数器(AC)
8、设定DDRAM位址
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
H
AC6
AC5
AC4
AC3
AC2
AC1
AC0
功能:
设定DDRAM位址到位址计数器(AC)
9、读取忙碌状态(BF)和位址
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
H
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
功能:
读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值
10、写资料到RAM
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
H
L
D7
D6
D5
D4
D3
D2
D1
D0
功能:
写入资料到内部的RAM(DDRAM/CGRAM/TRAM/GDRAM)
11、读出RAM的值
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
H
H
D7
D6
D5
D4
D3
D2
D1
D0
功能:
从内部RAM读取资料(DDRAM/CGRAM/TRAM/GDRAM)
12、待命模式(12H)
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
L
L
L
H
功能:
进入待命模式,执行其他命令都可终止待命模式
13、卷动位址或IRAM位址选择(13H)
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
L
L
H
SR
功能:
SR=1;允许输入卷动位址SR=0;允许输入IRAM位址
14、反白选择(14H)
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
L
H
R1
R0
功能:
选择4行中的任一行作反白显示,并可决定反白的与否
15、睡眠模式(015H)
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
L
L
H
SL
X
X
功能:
SL=1;脱离睡眠模式SL=0;进入睡眠模式
16、扩充功能设定(016H)
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
L
H
H
X
1RE
G
L
功能:
RE=1;扩充指令集动作RE=0;基本指令集动作G=1;绘图显示ONG=0;绘图显示OFF
17、设定IRAM位址或卷动位址(017H)
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
L
H
AC5
AC4
AC3
AC2
AC1
AC0
功能:
SR=1;AC5~AC0为垂直卷动位址SR=0;AC3~AC0写ICONRAM位址
18、设定绘图RAM位址(018H)
CODE:
RWRSDB7DB6DB5DB4DB3DB2DB1DB0
L
L
H
AC6
AC5
AC4
AC3
AC2
AC1
AC0
功能:
设定GDRAM位址到位址计数器(AC)
备注、
1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
2、“RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。
本次设计液晶初始化如下:
voidlcd_init()
{
rst=0;//复位LCD
delay
(1);//保证复位所需要的时间(1ms)
rst=1;//恢复LCD正常工作
//nop();
//psb=1;//设置LCD为8位并口通信
send_i(0x30);//基本指令操作
send_i(0x01);//清除显示
send_i(0x06);//指定在写入或读取时,光标的移动方向
send_i(0x0c);//开显示,关光标,不闪烁
}
3.5显示坐标关系
3.5.1、图形显示坐标
水平方向X—以字节单位
垂直方向Y—以位为单位
/*******************************************
函数名称:
Draw_PM
功能:
在整个液晶屏幕上画图
参数:
无
返回值:
无
********************************************/
voidDraw_PM(constuchar*ptr)
{
uchari,j,k;
send_i(0x34);//打开扩展指令集
i=0x80;
for(j=0;j<32;j++)
{
send_i(i++);
send_i(0x80);
for(k=0;k<16;k++)
{
send_d(*ptr++);
}
}
i=0x80;
for(j=0;j<32;j++)
{
send_i(i++);
send_i(0x88);
for(k=0;k<16;k++)
{
send_d(*ptr++);
}
}
send_i(0x36);//打开绘图显示
send_i(0x30);//回到基本指令集
}
3.5.2汉字显示坐标
X坐标
Line1
80H
81H
82H
83H
84H
85H
86H
87H
Line2
90H
91H
92H
93H
94H
95H
96H
97H
Line3
88H
89H
8AH
8BH
8CH
8DH
8EH
8FH
Line4
98H
99H
9AH
9BH
9CH
9DH
9EH
9FH
/****************************************************************
*名称:
writelcd()
*功能:
在LCD上显示字符串
*入口参数:
constunsignedchar*pt字符串的首地址
**************************************************************/
voidwritelcd(constunsignedchar*pt)
{
while(*pt)//检测是否达到了字符串最后
send_d(*pt++);//发送数据给lcd
}
//应用如下
constuchartable1[]={"基PIC单片机"};
constuchartable2[]={"多路温度"};
constuchartable3[]={"巡回检测系统"};
constuchartable4[]={"2009年12月01日"};
send_i(0x80);//定位在第一行
writelcd(table1);//写:
基PIC单片机
send_i(0x90);//定位在第二行
writelcd(table2);//写:
多路温度
send_i(0x88);//定位在第三行
writelcd(table3);//写:
巡回检测系统
send_i(0x98);//定位在第四行
writelcd(table4);//写:
2009年12月01日
3.6与单片机的接口实现
12864液晶的电路连线图如图3.6-1所示,实物位置如图3.6-2所示
图3.6-112864液晶电路连接图
图3.6-212864液晶模块实物图
3.7设计心得总结
LCD12864与1602相比需要较大的电流驱动,如果出现图片模糊不清晰或者灰暗,除了检查背光灯外应考虑电源问题。
最好采用大于5V的电源,经7805稳压管稳压驱动,以保证电流。
基本驱动跟1602相似难度不大。
中文及图像显示是12864最大的特点也是难点,主要是指令较多,还有就是图像驱动需要了解液晶内部原理。
整屏画图可以使用P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 毕业设计