单片机设计.docx
《单片机设计.docx》由会员分享,可在线阅读,更多相关《单片机设计.docx(31页珍藏版)》请在冰豆网上搜索。
单片机设计
河北建筑工程学院
单片机课程设计报告
题目名称:
多路数字温度测量系统设计
系:
电气工程系
专业:
电气工程及其自动化
班级:
电控091
学号:
2009308119
学生姓名:
张永帅
指导教师:
龚志广
职称:
讲师
2012年06月28日
目录
一、摘要………………………………………………………………2
二、总体方案设计……………………………………………………2
三、系统硬件设计……………………………………………………3
3.1控制器--单片机设计……………………………………………………3
3.2传感器检测电路设计……………………………………………………5
3.3显示电路设计……………………………………………………………6
3.4键盘电路设计……………………………………………………………6
3.5晶振电路设计……………………………………………………………7
3.6复位电路的设计…………………………………………………………7
3.7报警电路设计……………………………………………………………8
3.85V稳压电路……………………………………………………………8
3.9总电路……………………………………………………………………9
四、系统软件设计……………………………………………………9
4.1系统主程序流程图………………………………………………………9
4.2测温子程序的设计………………………………………………………10
4.3报警子程序设计…………………………………………………………11
4.4显示子程序设计…………………………………………………………12
五、结论……………………………………………………………13
六、参考文献………………………………………………………14
七、附录……………………………………………………………15
一、摘要
计算机技术的发展和普及提升了数据采集系统的技术水平。
在生产过程中,应用数据采集系统可对生产现场的工艺参数进行采集、监视和记录,以方便人们对数据结果做出分析判断。
基于汇编语言的多路温度采集与处理系统,可以实现对多路不同温度进行实时检测,通过LED显示当前温度值,可以更直观的观察数据、更便捷的对系统进行控制。
本课题以内置A/D转换器的单片机STC12C5A32AD为核心,对多路的温度进行实时巡检。
采用多个模拟温度传感器LM35测量多路温度。
通过LM358构成的同相放大器对模拟温度信号进行放大,然后送至单片机处理。
处理后由四位LED数码管对八路温度予以动态显示。
通过独立式键盘可对测量进行操控。
同时该系统还具有报警功能,实现当测量温度超出-55℃——125℃时发出报警。
本文结合实际使用经验,介绍了LM35温度传感器在单片机下的硬件连接及软件编程,并给出了流程图。
关键词:
单片机;温度传感器;放大器;数码管显示;键盘
二、总体方案设计
方案的阐述与特点:
本设计方案以LM35为温度传感器、内置A/D转换器单片机STC12C5A32AD为控制核心组成多点温度测量系统,该系统包括传感器及其放大电路、复位电路、晶振电路、报警电路、键盘与显示、5V稳压电路组成。
1、本方案系统框图为:
图1总体系统框图
2、基本工作原理:
如图1所示本设计以LM35模拟温度传感器对八路温度进行实时测量,其输出电压经由LM358构成的同相放大器放大后送至单片机的A/D输入口。
单片机对输入信号进行模数转换执行软件程序后,由LED数码管显示温度值,每秒切换一个通道进行轮流显示。
通过键盘可以随时查看指定通道的温度值,当任何一路温度的3次平均值超过设定的下限值或上限值时,发出警告。
3、它有如下特点:
(1)可以监测8路环境温度信号,可以扩充;对8路模拟信号输入进行循环采集,每路连线采集三次,取平均值。
(2)测量范围为-55℃~+125℃,精度为±0.5℃
(3)LCD液晶显示或用4位LED数码管进行循环显示,其中最高位通道提示符A~H,低三位显示实际温度值,每秒切换一个通道进行轮流显示;
(4)键盘控制,可随时查看指定通道的温度值;
(5)可分别设定每一路的上限制和下限值,若采集平均值超过设定范围,则对应通道指示灯闪烁10后一直亮,指示灯闪烁是喇叭发声,以示警告。
三、系统硬件设计
本课题的整个系统是由传感器及其信号放大电路、单片机、显示电路、键盘电路、稳压电路、晶振电路、复位电路等构成。
3.1控制器--单片机设计:
本设计采用的单片机为STC12C5A32AD
STC12C5A32AD单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代单片机,全新的流水线/精简指令集结构。
STC12C5A32AD单片机主要性能:
●高速:
1个时钟/机器周期,RISC型8051内核,速度比普通8051快12倍
●工作电压:
5.5V--3.3V
●低功耗设计:
空闲模式,掉电模式(可由外部中断唤醒)
●工作频率:
0~35MHz
●时钟:
外部晶体或内部RC振荡器可选
●芯片内E2PROM功能
●ISP/IAP,在系统可编程/在应用可编程,无需仿真器
●8位8通道ADC,转换速度可达300K/S
●2个硬件16位定时器,兼容普通8051的定时器。
再加上2路PCA还可再实现2个16位定时器
●硬件看门狗(WDT)
●全双工异步串行口(UART),由于STC12系列单片机是高速的8051,可再用定时器或PCA软件实现多串口
如图3.1为STC12C5A32AD引脚图,各引脚功能说明如下:
图3.1STC12C5A32AD引脚图
●Vcc:
电源
●GND:
地
●P0口:
P0口是一个8位的双向I/O口。
对P0端口写“1”时,引脚用作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
●P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,同时也是模拟量输入口,可以对8路模拟量进行模数转换。
●P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口。
在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。
●P3口:
P3口是一个具有内部上拉电阻的8位双向I/O口。
P3口亦作为特殊功能口使用,如表3-1所示。
表3-1STC12C5A32AD引脚号特殊功能
P3.0
RXD(串行输入)
P3.1
TXD(串行输出)
P3.2
INT0(外部中断0)
P3.3
INT0(外部中断0)
P3.4
T0(定时器0外部输入和定时器0时钟频率输出)
P3.5
T1(定时器1外部输入和定时器1时钟频率输出)
P3.6
WR(外部数据存储器写选通)
P3.7
RD(外部数据存储器读选通)
●RST:
复位输入,晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。
●ALE:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
●XTAL1:
振荡器反相放大器和内部时钟发生电路的输入端。
●XTAL2:
振荡器反相放大器的输出端。
3.2传感器检测电路设计:
LM35是由NationalSemiconductor所生产的温度传感器,其输出电压与摄氏温度成正比,具有10mv/℃的灵敏度,工作温度范围为4V~30V;输出阻抗为0.1Ω。
LM35温度传感器,由于它采用内部补偿,所以输出可以从0℃开始,器件有三个引脚,分别是电源负GND,电源正Vcc,信号输出端。
电路需要两路运算放大电路,所以选择双路运算放大器,一路作跟随器另一路作同向放大器,LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。
图3.2.传感器检测电路
3.3显示电路设计:
如图3.3所示,本显示方案采用单片机I/O口外扩74HC573驱动器驱动4位LED数码管实现动态显示,所谓动态显示就是在任何时刻只有一位LED数码管处于显示状态,即单片机采用扫描的方式控制各个数码管的轮流显示。
动态显示具有编程简单,占用I/O口线少的优点。
图3.3显示电路
3.4键盘电路设计:
其原理图如下:
本设计中由于所用键盘不多,所以采用独立连接式的编程扫描方式键盘就能够满足设计要求。
键盘接口与键盘程序的根本任务就是要检测有没有键按下?
按下的是那个位置的键?
键值是多少?
在本次设计中采用了软件扫描的方法。
通过对键盘接口P3的查询判断是否有键按下。
图3.4键盘电路
3.5晶振电路设计:
晶振电路是单片机的心脏,它控制着单片机的工作节奏。
单片机允许的时钟频率是因型号而异的,其典型值为12MHZ。
STC12C5A32AD内部有一个反相振荡放大器,XTAL1 和XTAL2分别是该反向振荡放大器的输入端和输出端。
该反向放大器可配置为片内振荡器,石晶振荡和陶瓷振荡均可采用。
本设计采用的晶振频率为12MHZ。
其晶振电路如图3.5所示。
此外还可使用外部时钟。
在使用外部时钟时,外部时钟必须从XTAL1输入,而XTAL2悬空。
图3.5晶振电路
3.6复位电路的设计:
复位使单片机处于起始状态,并从该起始状态开始运行。
STC12C5A32AD的RST引脚为复位端,该引脚连续保持2个机器周期(24个时钟振动周期)以上高电平,则可使单片机复位。
复位后,只影响SFR中的内容,内部RAM中的数据不受影响。
外部复位有上电复位和按键电平复位。
由于单片机运行过程中,其本身的干扰或外界干扰会导致出错,此时我们可按复位键重新开始运行。
为了便于本设计运行调试,复位电路采用按键复位方式。
如图3.6
图3.6复位电路
3.7报警电路设计:
为了实现多点温度检测报警系统,本课题采用STC12C5A32AD单片机作为主控制器,采用扫描的方式对多点温度传感器获取对应该位置的温度值,经处理后,如温度不在设定的范围内,给出报警信号。
系统总体硬件电路图如下所示:
图3.7报警电路
3.85V稳压电路
为了给STC12C5A32AD单片机提供精确的5V基准电压,本设计采用了LM117三端可调正稳压集成电路。
它的输出电压范围是1.2V至37V,负载电流最大为1.5A。
仅需外接两个电阻就可以设置输出电压。
此外它的线性调整率和负载调整率都比较好。
图3.85V稳压电路
3.9总电路
见附录
四、系统软件设计
4.1系统主程序流程图
主程序主要实现系统的初始化,温度数据采集与处理,键值处理,显示数据,报警。
系统的初始化包括寄存器的初始化(控制寄存器、堆栈、中断寄存器等),LED显示的初始化,输出端口的初始化,采集、累计数据的初始化。
图4.1主程序流程图
4.2测温子程序的设计
数据采样程序功能:
温度检测通道,控制存放数据的地址和采样次数。
数据检测的方式是先对8个通道各采样一次,共采集三次。
采样程序采用中断方式。
在设置通道初值、通道数、采样次数和存放数据的开始地址后,启动A/D转换,随后检测标志位状态。
标志位被清零,标志着本通道的A/D转换已经结束,在修改通道号和数据存放地址后,对下一通道继续检测。
当8个通道的检测工作完成后,判断三次采样是否全部完成,若没完成,则对8个通道继续采样,直至完成三次采样工作。
数据采样程序流程框图如4.2所示。
图4.2测温子程序
4.3报警子程序设计
(1)采样被测参数
(2)比较采样值和给定的上下限。
(3)根据比较结果执行相应的处理程序。
如果发现采样值超过报警值,发出执行报警程序。
报警程序流程框图4.3所示。
4.3报警子程序流程图
4.4显示子程序设计
四位LED数码管进行轮流显示,其中最高位显示通道提示符A—H,低三位显示实际温度。
图4.4显示子程序流程图
五、结论
1、课题总结
本课题主要是实现对温度进行多点同时测量并准确显示。
整个系统由单片机控制,将能够接受传感器的数据并显示出来,可以从键盘输入命令,系统根据命令选择对应的传感器,并由驱动电路驱动温度显示,对异常情况进行报警。
2、心得
通过这次课程的设计,使我熟悉了单片机设计原则,对内置AD系列单片机内部构造、与其它芯片的接口技术及其工作情况有了更进一步了解。
将课本的知识实际应用,加强了对专业知识的了解,提高了我们综合运用知识的能力以及分析问题、解决问题的能力和独立思考能力。
这次设计让我懂得了实践的重要性,这次设计将课本知识与综合运用结合起来,一方面培养了我们对专业知识学习的兴趣,另一方面让我们巩固了所学各章节的理论,提高了实际动手能力。
在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
设计中先是没有注意单片机的电压问题,后来又遇到了电平兼容问题,经过几番周折,终于完成了这次设计。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
自己查阅资料,以及自身的动脑和努力,都是以后工作中需要的。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:
Protes仿真软件、MicrosoftVisio绘图、单片机编程知识等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
六、参考文献
[1]王为青,程国刚.单片机KeilCx51应用开发技术[M].北京:
人民邮电出版社,2006.223-226.
[2]方佩敏编著·智能化集成温度传感器原理与应用[M].北京:
电子工业出版社,2002.35-42.
[3]张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:
高等教育出版社,2008.18-20,253-255,219-220,198-201.
[4]刘笃人,韩保军.传感器及应用技术[M].西安:
西安电子科技大学出版社,2003.112-124.
[5]童诗白.模拟电子技术基础[M].北京:
高等教育出版社,2004.213-216.
[6]阎石.数字电子技术基础[M].第五版.北京:
高等教育出版社,2006.524-535.
[7]闫玉德,葛龙,俞虹.单片机微型计算机原理与设计[M].北京:
中国电力出版社,2010.112-154,197-199.
[8]郁有文.传感器原理及工程应用[M].西安:
西安电子科技大学出版社,2008.215-238.
七、附录:
1.系统程序:
;****************************************************************
;常数定义
;****************************************************************
TMELEQU0E0H;20ms,定时器0时间常数
TMEHEQU0B1H
TMEPHEADEQU36H
;****************************************************************
;工作内存定义
;****************************************************************
BITSTDATA20H
TIMEISOKBITBITST.1
TEMPONEOKBITBITST.2
TEMPLDATA26H
TEMPHDATA27H
TEMPHCDATA28H
TEMPLCDATA29H
;****************************************************************
;引脚定义
;****************************************************************
TEMPDINBITP3.7
;****************************************************************
;中断向量区
;****************************************************************
ORG000H
LJMPSTART
ORG00BH
LJMPT0IT
;****************************************************************
;系统初始化
;****************************************************************
ORG100H
START:
MOVSP,#60H
CLSMEM:
MOVR0,#20H
MOVR1,#60H
CLSMEM1:
MOV@R0,#00H
INCR0
DJNZR1,CLSMEM1
MOVTMOD,#00100001B
MOVTH0,#TIMEL
MOVTL0,#TIMEH
SJMPINIT
ERROR:
NOP
LJMPSTART
NOP
INIT:
NOP
SETBET0
SETBTR0
SETBEA
MOVPSW,#00H
CLRTEMPONEOK
LJMPMAIN
;****************************************************************
;定时器0中断服务程序
;****************************************************************
T0IT:
PUSHPSW
MOVPSW,#10H
MOVTH0,#TIMEH
MOVTL0,#TIMEL
INCR7
CJNER7,#32H,T0ITI
MOVR7,#00H
SETBTIMEISOK
TOIT1:
POPPSW
RETI
;****************************************************************
;主程序
;****************************************************************
MAIN:
LCALLLM35_1
JNBTIME1SOK,MAIN
CLRTIME1SOK
JNBTEMPONEOK,MAIN2
LCALLREADTEMP1
LCALLCONVTEMP
LCALLLM35_1
MAIN2:
LCALLREADTEMP
SETBTEMPONEOK
LJMPMAIN
;****************************************************************
;子程序区
;****************************************************************
;RESETLM35
;****************************************************************
INILM35:
SETBTEMPDIN
NOP
NOP
CLRTEMPDIN
MOVR6,#0A0H
DJNZR6,$
MOVR6,#0A0H
DJNZR6,$
SETBTEMPDIN
MOVR6,#32H
DJNZR6,$
MOVR6,#3CH
LOOPLM35:
MOVC,TEMPDIN
JCINILM35UT
DJNZR6,LOOPLM35
MOVR6,#064H
DJNZR6,$
SJMPINILM35
RET
;
INILM35UT:
SETBTEMPDIN
RET
;****************************************************************
;读LM35的程序,从LM35中读出一个字节的数据
;****************************************************************
READLM35:
MOVR7,#08H
SETBTEMPDIN
NOP
NOP
READLM35LOOP:
CLRTEMPDIN
NOP
NOP
NOP
SETBTEMPDIN
MOVR6,#07H
DJNZR6,$
MOVC,TEMPDIN
MOVR6,#3CH
DJNZR6,$
RRCA
SETBTEMPDIN
DJNZR7,READLM35LOOP
MOVR6,#3CH
DJNZR6,$
RET
;****************************************************************
;写LM35的程序,从LM35中写一个字节的数据
;****************************************************************
WRITELM35:
MOVR7,#08H
SETBTEMPDIN
NOP
NOP
WRITELM35LOP:
CLRTEMPDIN
MOVR6,#07H
DJNZR6,$
RRCA
MOVTEMPDIN,C
MOVR6,#34H
DJNZR6,$
SETBTENPDIN
DJNZR7,WRITELM35LOP
RET
;****************************************************************
;READTEMP
;****************************************************************
READTEMP:
LCALLINITELM35
MOVA,#0CCH
LCALLWRITELM35
MOVR6,#34H
DJNZR6,$
MOVA,#44H
LCALLWRITELM35
MOVR6,#34H
DJNZR6,$
RET
READTEMP1:
LCALLINILM35
MOVA,#0CCH
LCALLWRITELM35
MOVR6,#34H
DJNZR6,$
MOVA,#0BEH
LCALLWRITELM35
MOVR6,#34H
DJNZR6,$
MOVR5,#09H
MOVR0,#TEMPHEAD
MOVB,#00H
REA