单片机.docx
《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(21页珍藏版)》请在冰豆网上搜索。
单片机
单片机课程设计
机电工程学院
应用电子一班
李申超
2008061680
电路原理图
程序代码
DQBITP2.2
FSBITP3.3;发送键
FBITP3.2;蜂鸣器低有效
JBITP3.6;继电器低有效
LBITP3.5
SHANGXIANEQU61H
XIAXIANEQU62H
DQWDEQU63H;存放当前温度
A1EQU64H;功能键标志字节
A2EQU65H;键盘扫描辅助标志字节
RECIEQU66H
ORG0000H
LJMPMAIN
ORG0023H
ORG0030H
MAIN:
MOVSHANGXIAN,#34;赋温度上下限初始值
MOVXIAXIAN,#28
L1:
LCALLREAD_TEMP;读取当前温度
LCALLTEM_DATA_PRO
LCALLDISPLAY;温度显示
LCALLBAOJING
LCALLKEY
LJMPL1
;*******读18B20两个字节温度数据********;
REWORD:
SETBDQ;拉高DQ为读取温度做准备
MOVR3,#8;读8位
MOVR4,#2;2个字节
MOVR0,#30H;30H存放温度值首地址
CLRC
LOOP:
CLRDQ;拉低DQ
MOVR7,#16;延时2us~3us左右
DJNZR7,$
SETBDQ;拉高DQ
MOVR7,#16;延时2us~3us左右
DJNZR7,$
MOVC,DQ
RRCA;右移
MOVR7,#240;延时60us以上
DJNZR7,$
MOVR7,#240
DJNZR7,$
SETBDQ;拉高DQ
MOVR7,#12
DJNZR7,$
MOV@R0,A
DJNZR3,LOOP
MOVR3,#8;循环8次,读完一个字节
INCR0;地址指针加一
DJNZR4,LOOP;读完两个字节返回
RET
;************************************/
;*******给18b20写一个字节数据********/
WRWORD:
SETBDQ;拉高DQ为写数据准备
MOVR3,#8;控制循环8次
CLRC
LOOP1:
CLRDQ;拉低DQ,开始写一位
MOVR7,#24;延时4us
DJNZR7,$
RRCA
MOVDQ,C
MOVR7,#240;延时60us以上,120us以下
DJNZR7,$
MOVR7,#240
DJNZR7,$
SETBDQ;写完一位
MOVR7,#12;延时1us以上
DJNZR7,$
DJNZR3,LOOP1;写完8次返回
RET
;****************************************/
;*************DS18B20复位****************/
REST:
SETBDQ;拉高DQ位复位做准备
MOVR7,#10;延时一下下
DJNZR7,$
CLRDQ;开始复位,拉低DQ600us
MOVR7,#20
D1:
MOVR6,#180
DJNZR6,$
DJNZR7,D1
SETBDQ;拉高DQ
MOVR7,#180;延时30us读存在信号
DJNZR7,$
JBDQ,REST;未检测到存在信号,继续复位
MOVR6,#4;检测到存在信号,延时120us
D2:
MOVR7,#180
DJNZR7,$
DJNZR6,D2
SETBDQ;拉高DQ
MOVR6,#10;延时300us后返回
D3:
MOVR7,#180
DJNZR7,$
DJNZR6,D3
RET
;***********************************/
;****************显示函数****************/
DISPLAY:
MOVR0,#32H;显示缓存区首地址32h
MOVDPTR,#TABF;送反码表头
MOVA,@R0;读小数
MOVCA,@A+DPTR;查段码
MOVP0,A;送小数显示
CLRP1.4;开位选
CLRP0.7;开小数点
MOVR7,#20;延时600us
LCALLDELAY
SETBP1.4;关位选
SETBP0.7;关小数点
INCR0;地址指针加一
MOVA,@R0;读个位数
MOVCA,@A+DPTR;查段码
MOVP0,A;送个位显示
CLRP1.5;开位选
MOVR7,#20;延时600us
LCALLDELAY;
SETBP1.5;关位选
INCR0
MOVDPTR,#TAB;正码表头
MOVA,@R0
MOVCA,@A+DPTR
MOVP0,A;送十位
CLRP1.6
MOVR7,#20
LCALLDELAY;延时600us
SETBP1.6
INCR0
MOVA,@R0
MOVCA,@A+DPTR
MOVP0,A;送百位
CLRP1.7
MOVR7,#20
LCALLDELAY;延时600us
SETBP1.7
RET
;******************************************/
;**************延时函数*******************/
DELAY:
D4:
MOVR6,#180
DJNZR6,$
DJNZR7,D4
RET
;****************************************/
;************数据处理函数*****************/
TEM_DATA_PRO:
MOVA,30H;取低字节温度
ANLA,#0FH;取小数部分
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOV32H,A;将小数存放在32H中
MOVA,30H
ANLA,#0F0H
MOV60H,A;将高四位暂存于60H
MOVA,31H
ANLA,#0FH
ADDA,60H;与低字节高四位相加
SWAPA;交换和的高低四位,得温度的整数部分
MOVDQWD,A
MOVB,#100;分离出百,十,个位,分别存放在35H34H33H中
DIVAB
MOV35H,A
MOVA,B
MOVB,#10
DIVAB
MOV34H,A
MOV33H,B
RET
;********************************************/
;********读取温度函数***************/
READ_TEMP:
ACALLREST
MOVA,#0CCH;发送skip指令
ACALLWRWORD
MOVA,#044H;启动温度转换指令
ACALLWRWORD
ACALLREST
MOVA,#0CCH;发送skip指令
ACALLWRWORD
MOVA,#0BEH;发送读指令
ACALLWRWORD
ACALLREWORD
RET
;**********************************/
;**********键盘扫描函数****************/
KEY:
CLRP2.6
MOVA,P2
CJNEA,#0BFH,T21
LJMPRETNB
T21:
MOVR7,#200;延时6ms消抖
LCALLDELAY
MOVA,P2
CJNEA,#0BFH,AM
LJMPRETNB
AM:
MOVR7,A;判断按键
SS:
MOVA,P2
CJNEA,#0BFH,SS;松手检测
MOVA,R7
CJNEA,#0BBH,T22;功能键
INCA1
MOVA,A1
CJNEA,#3,KEY
MOVA1,#1
MOVA2,#1
SJMPKEY
T22:
CJNEA,#0BEH,T23;加键
MOVA,A1;当A1为1时上限加一
CJNEA,#1,T221
INCSHANGXIAN
SJMPKEY
T221:
CJNEA,#2,T22
INCXIAXIAN;当A1为2时下限加一
SJMPKEY
T23:
CJNEA,#0BDH,T24;减键
MOVA,A1
CJNEA,#1,T231
DECSHANGXIAN;当A1为1时上限减一
SJMPKEY
T231:
CJNEA,#2,T23
DECXIAXIAN;当A1为2时下限减一
SJMPKEY
T24:
CJNEA,#0B7H,RETNB;确认键
MOVA1,#0;置标志字节A1A2为零
MOVA2,#0
RETNB:
MOVA,A1;当A1A2为同时为零时返回
CJNEA,#0,T111
SJMPT11
T111:
CJNEA,#1,T112
MOVA,SHANGXIAN
SJMPT113
T112:
MOVA,XIAXIAN;当A1为2时显示下限
T113:
MOVB,#100
DIVAB
MOV35H,A
MOVA,B
MOVB,#10
DIVAB
MOV34H,A
MOV33H,B
MOV32H,#0
LCALLDISPLAY
LJMPKEY
T11:
MOVA,A2
CJNEA,#0,T114
T12:
RET
T114:
LJMPKEY
;*************************************/
;************温度监测函数*************/
BAOJING:
MOVA,DQWD
SUBBA,SHANGXIAN
JCQ1
SJMPBJ
Q1:
MOVA,DQWD
SUBBA,XIAXIAN
JNCRETN
SJMPBJ
RETN:
SETBF
SETBJ
SETBL
RET
BJ:
CLRF
CLRJ
CLRL
RET
;***********************************/
TAB:
DB0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H,00H,0ffH,0f7H;/*正码*/
TABF:
DB0c0H,0cfH,0a4H,86H,8bH,92H,90H,0c7H,80H,82H,00H,0ffH,0feH;/*反码*/
TAB1:
DB00H,01H,01H,02H,02H,03H,04H,04H,05H,05H,06H,07H,07H,08H,08H,09H;//小数表
END
总体设计
使用数字温度传感器,结合单片机电路设计,采用一只DS18B20温度传感器,直接读取被测温度值,之后进行转换,依次完成设计要求。
软件系统分析与设计
程序结构分析
系统程序流图
硬件系统方案设计
键盘控制设计
温度测试电路
温度控制器件电路
七段数码管显示电路
串行口通信电路
单片机接口电路设计
调试与分析
测试环境
测试方法
测试结果
测试分析
软件系统分析与设计
程序结构分析
主程序调用了5个子程序,分别是数码管显示程序、键盘扫描及按键处理程序、温度信号处理程序、继电器控制程序、单片机与PC机串口通讯程序。
键盘扫描电路及按键处理程序:
实现键盘的输入按键的识别及进入相应的程序。
温度信号处理程序:
对温度芯片送过来的数据进行处理,进行判断和显示。
数码管显示程序:
向数码的显示送数,控制系统的显示部分。
继电器控制程序:
控制继电器动作
串口通讯程序:
实现PC机与单片机通讯,将温度数据传送给PC机。
系统程序流图
系统程序主要包括主程序,读出温度子程序,写入子程序等,按键子程序,串口通信程序,显示子程序,声光报警子程序。
1)主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度。
通过调用读温度子程序把存入内存储中的整数部分与小数部分分开存放在不同的两个单元中,然后通过调用显示子程序显示出来
系统总的流程图
按键子程序流程图
DS18B20温度流程图
串口通信子程序流程图
硬件系统方案设计
键盘控制设计
单片机应用系统中除了复位按键有专门的复位电路,以及专一的复位功能外,其它的按键或键盘都是以开关状态来设置控制功能或输入数据。
键开关状态的可靠输入:
为了去抖动我采用软件方法,它是在检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍保持闭合状态电平,如保持闭合状态电平则确认为真正键按下状态,从而消除了抖动影响
在这种行列式矩阵键盘非编码键盘的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就要识别哪一个按键按下。
对键的识别通常有两种方法:
一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。
对照图示的3*4键盘,说明线反转法工作原理。
首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
方法是:
给P2口的一个口致0,其它致1,判断P2口值是否有变化,在判断是哪个按键按下。
温度测试电路
采用温度芯片DS18B20。
可以直接将被测温度转换为串行数字信号,工单片机进行处理,具有低功耗、高功能、抗扰能力强等优点。
温度传感器电路引脚图
温度控制器件电路
单片机通过三极管控制继电器的通断,最后达到控制外围器件电路的目的。
当温度未达到要求时,单片机发送高电平信号使三极管饱和导通,继电器使电源与外围器件接通。
当温度上升到预定温度时,单片机发送低电平信号三极管进入截止状态,继电器的弹片打到另一侧,使电热器与电源断开,外围器件截止。
继电器电路中有一个PNP三极管的保护电路,即将一个二极管反向接到三机管的两端。
连接方法如图所示。
其原理是:
当继电器突然断电时,继电器产生很大的反向电流。
二极管的作用是将反向电流分流,使流过三级管8050的电流比较小,达到保护三极管8050的作用
七段数码管显示电路
具体见实际连线图如图,当位选打开时,送入相应的段码,则相应的数码管打开,关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位选时,时间间隔低于20ms,从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。
串口通信电路
串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。
可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。
用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。
RS-232只限于PC串口和设备间点对点的通信。
RS-232串口通信最远距离是50英尺。
DB-9针连接头
\12345/
\6789/
从计算机连出的线的截面。
RS-232针脚的功能:
数据:
TXD(pin3):
串口数据输出
RXD(pin2):
串口数据输入
握手:
RTS(pin7):
发送数据请求
CTS(pin8):
清除发送
DSR(pin6):
数据发送就绪
DCD(pin1):
数据载波检测
DTR(pin4):
数据终端就绪
地线:
GND(pin5):
地线其他
RI(pin9):
铃声指示
单片机接口电路设计
晶振电路
单片机XIAL1和XIAL2分别接30PF的电容,中间再并个12MHZ的晶振,形成单片机的晶振电路。
串口引脚
P0口接9个2.2K的排阻然后接到显示电路上。
P2.2温度传感器DS18B20如图所示。
DS18B20与单片机的接口电路
P3.6引脚接继电器电路的4.7K的限流电阻上;
P1口中P1.4、P1.5、P1.6、P1.7分别接到显示电路的三极管上,P3.2接蜂鸣器电路,P1.3接到发光二极管上;
P2口接到按键电路。
其它引脚
ALE引脚悬空,复位引脚接到复位电路、VCC接电源、VSS接地、EA接电
调试与分析
测试环境
环境温度28摄氏度,室内面积20平方米
测试仪器:
数字万用表,温度计0----100摄氏度
测试方法
使系统运行,采用温度计同时测量室内度变化情况,得出系统测量的温度。
测试结果
设定温度由25摄氏度到40摄氏度
标定温差<=1摄氏度
静态误差<=0.5摄氏度
测试分析
对于实际室内的温度控制,可以再提出以下方法:
检验所做温度测量是否准确,可以用电吹风机作为加热设备,降温设备可采用空气压缩机等制冷设备,并将所采集到的温度与实际标准的温度计进行比较。
通过实验测试和分析,发现虽然传感器的温度采集精度最高可得到0.06℃,但测试得到的数据最小间隔为0.03℃。
通过分析,当对浮点数求平均处理时,遇到同一时刻两个传感头采集的温度相差不大,使0.06℃时求出平均温度变为0.03℃为了解该数据是否真实,可采用一个高精度的数字温度计测试,发现读出的值与其基本一致,由此推断如果在同一时间增加采集温度的个数,则可以进一步提高温度的精度。
结论
温度检测和控制都直接与安全生产、节约能源等技术经济指标相联系。
温度测量在工业、民用、军事等领域占着重要的地位。
航空、家电、科研等领域都需要温度测试设备,用于测试和确定电工、电子及其它产品及材料进行高温、低温、交变温度或恒定试验的温度环境的变化,判断当检测目标的温度值达到警示条件时发出警告信号。
在工业生产和日常生活中,对温度控制系统的要求,主要是保证温度在一定温度范围内变化,稳定性好,不振荡,对系统的快速性要求不高。
在本设计中简单分析了单片机温度控制系统设计过程及实现方法。
本系统的测温范围为-10℃~125℃,温度检测系统根据用户设定的温度范围完成一定范围的温度控制。
本设计使用的温度控制器结构简单、测温准确,具有一定的实际应用价值。
但是还有许多需要完善的地方。
此外,还能广泛地应用于其他一些工业生产领域,如建筑,仓储等行业。
本温度控制系统可以应用于多种场合,像的温度、育婴房的温度、水温的控制。
用户可灵活选择本设计的用途,有很强的实用价值。