单片机论文Word文档格式.docx

上传人:b****5 文档编号:18614692 上传时间:2022-12-29 格式:DOCX 页数:22 大小:216.32KB
下载 相关 举报
单片机论文Word文档格式.docx_第1页
第1页 / 共22页
单片机论文Word文档格式.docx_第2页
第2页 / 共22页
单片机论文Word文档格式.docx_第3页
第3页 / 共22页
单片机论文Word文档格式.docx_第4页
第4页 / 共22页
单片机论文Word文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机论文Word文档格式.docx

《单片机论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机论文Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

单片机论文Word文档格式.docx

温度参数检测在测控系统、工业控制等场合中占有重要的地位。

针对环境温度检测,贴片机PCB板制造中回流焊接温度的测量分析,喯涂液、食品加工业、陶瓷工业、生物科研领域等需要检测和分析温度变化的场合,设计一个具有温度实时显示和动态记录功能的温度检测记录系统,对于提高工作效率和实现智能化测控具有很好的应用价值。

系统选用8031单片机作为主控制器,选用独立式按键和128*64图形点阵LCD模块LM6029作为人机接口。

外围接口芯片还有数字温度传感器DS18B20、实时时钟DS1302、存储温度信息的EEPROM芯片24C02。

另外,通过单片机的串口资源传输温度信息到PC,动态检测、记录温度变化曲线。

第二章元器件介绍

2.18031单片机模块

(1)外接晶振引脚XTAL1和XTAL2

①XTAL1:

内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。

当采用外部振荡器时,此引脚接地。

②XTAL2:

内部振荡电路反相放大器的输出端。

是外接晶体的另一端。

当采用外部振荡器时,此引脚接外部振荡源。

(2)电源复用引脚RST和ALE

①RST:

当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位。

②ALE:

地址锁存控制信号。

正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的)周期性地发出正脉冲信号。

因此,它可用作对外输出的时钟,或用于定时目的。

但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)八个LSTTL电路。

对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(功能)。

(3)P0.0-P0.7、P1.0-P1.7和P2.0-P2.7引脚

①P0.0-P0.7:

P0口8位双向端口线。

②P1.0-P1.7:

P1口8位双向端口线。

③P2.0-P2.7:

P2口8位双向端口线。

(4)EA/引脚

EA/:

访问程序存储控制信号。

2.2温度检测模块

(1)DS1820介绍

DS1820数字温度传感器采用美国DALLAS公司生产的DS1820可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

DS1820采用一线通信接口。

因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。

主要首先提供以下功能命令之一:

1)读ROM,2)ROM匹配,3)搜索ROM,4)跳过ROM,5)报警检查。

这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有有多少,什么样的设备。

(2)引脚功能

①1GND:

接地

②2DQ:

信号输入输出,一线输出:

源极开路。

③3VDD:

可选电源管脚。

(3)技术性能描述

①独特的单线接口方式,DS1820在与微处理器连接时仅需要一条口线即可实现微处理器与DS1820的双向通讯。

②测温范围-55℃~+125℃,固有测温分辨率0.5℃。

③支持多点组网功能,多个DS1820可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温。

④工作电源:

3~5V/DC。

⑤在使用中不需要任何外围元件。

⑥测量结果以9~12位数字量方式串行传送。

⑦适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温。

⑧标准安装螺纹“M10X1,M12X1.5,G1/2”任选。

⑨PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。

2.3时钟模块DS1302

(1)DS1302的结构及工作原理

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×

8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

(2)引脚功能及结构

①DS1302的引脚排列,其中VCC1为后备电源,VCC2为主电源。

在主电源关闭的情况下,也能保持时钟的连续运行。

DS1302由VCC1或VCC2两者中的较大者供电。

当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。

当VCC2小于VCC1时,DS1302由VCC1供电。

②X1和X2是振荡源,外接32.768kHz晶振。

③RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。

RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;

其次,RST提供终止单字节或多字节数据的传送手段。

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在VCC>

2.0V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

I/O为串行数据输入输出端(双向)。

SCLK为时钟输入端。

(3)数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

2.4温度存储模块

(1)24C02介绍

为了在掉电状态下能够存储温度和时钟信息,系统选用串行E2PROM芯片24C02,该芯片遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。

1WP为写保护引脚。

2A0-A2为器件地址线。

3SCL,SDA为二线串行接口,符合I2C总线协议。

(3)24C02器件的选用

无论是智能仪器仪表还是单片机工业控制系统都要求其数据能够安全可靠而不受干扰,特别是一些重要的设定参数(如温度控制设定值)受到干扰后变成一个很大的数字,那么就有可能发生烧箱毁物的破坏性后果,给生产和经济带来损失,因此必须选用可靠的24C02器件作为数据储存单元。

对于只用一片24C02器件的系统,因为不需要分辨不同的地址,只要WP保护功能正常就可以了,这只要断开WP与CPU连线且保持高电平,再试一下系统数据读写功能是否正常就可以了。

而这一点对软件抗干扰技术也是至关重要的。

一般来说,同种牌号的24C02器件性能是一样的,可以采用抽样试验决定取舍;

对于有2片24C02以上的系统,必须严格检查其器件寻址功能,这可以轮流拨下其中一片24C02器件,检查相应的数据存取功能,若没有交叉出错现象则可以选用。

2.5液晶显示模块

(1)引脚功能

①R/W读/写选择:

高电平为读数据,低电平为写数据。

②E:

读写使能,高电平有效,下降沿锁定数据。

③DB0-DB7:

数据输入输出引脚。

④CS1选择号,低电平时选择前64列。

⑤CS2片选择号,低电平时选择后64列。

⑥RET复位信号,低电平有效。

第三章硬件设计

系统硬件包括MCU、温度检测(包括实时时钟检测)、温度存储(EEPROM存储)、温度传输(串口电平转换)和人机接口(LCD与按键)五个主要模块电路,系统硬件如图3-1所示,电路原理图如图3-2所示,PCB图如图3-3。

图3-1

图3-2

图3-3

3.1MCU控制模块

由于系统的控制方案简单,数据量也不大,为了设计此系统,我们MCU选用8031单片机作为控制芯片,在前向通道中是一个非电信号的电量采集过程。

它由传感器采集非电信号,从传感器出来经过功率放大过程,使信号放大,再经过模/数转换成为计算机能识别的数字信号,再送入计算机系统的相应端口。

3.2温度传输

系统采用串口通信,将温度信息传输到上位机PC中,以便进行更多的信息处理及动态检测。

系统选用MAX公司推出的RS232电平转换芯片MAX3232。

PC串口RS232电平是-10~+10V,而一般的单片机应用系统的信号电压是TTL电平0~+5V,MAX3232可以实现期间的电平转换功能,而且该芯片具有低功耗特征,可采用5V或3.3V供电,耗电流为0.3mA。

第四章软件设计

根据任务要求及需求分析,首先把任务划分为相对独立的功能模块,系统的详细模块划分如图4-1所示,包括LCD显示、1线读温度等6个功能模块,每个模块包含若干相关函数。

 

温度检测系统软件框架图4-1

4.1系统软件整体设计

(1)主程序模块

Main.c:

完成系统初始化,调用时钟和温度控制函数,显示当前时间和温度。

循环扫描按键,按下0#键则调用读写数据存储器函数实现数据存储;

按下1#键则调用串口发送函数实现数据传输。

另外串口传送函数模块也直接放置在main.c中实现。

(2)LCD显示模块

实现LCD模块的初始化、写命令、写数据、设置页地址、显示字符、显示汉字等函数。

(3)1线读温度模块

实现DS1820初始化、读字节、写字节、读温度数据命令等函数。

(4)2线存储模块

实现24C02存储器的时序、存储单字节、存储1页8字节数据、读某地址单元的字节数据、读连续若干字节数据等函数。

(5)3线时钟模块DS1302

实现时钟芯片的初始化设置、读字节、写字节、配置状态寄存器、设置时钟寄存器、读取时钟寄存器等函数。

(6)串口传送数据模块

将存储在EEPROM中的数据传送到PC。

4.2模块程序设计

(1)DS1302源程序

#include"

define_h.h"

sbitDS1302_CLK=P1^2;

//实时时钟时钟线引脚

sbitDS1302_IO=P1^3;

//实时时钟数据线引脚

sbitDS1302_RST=P1^4;

//实时时钟复位线引脚

sbitACC0=ACC^0;

sbitACC7=ACC^7;

ucharidatahide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year;

ucharidataweek_value[3];

//秒,分,时到日,月,年位闪的计数

①DS1302时钟部分子程序模块

SYSTEMTIMECurrentTime;

SYSTEMTIME*Time1;

#defineAM(X)X

#definePM(X)(X+12)//转成24小时制

#defineDS1302_SECOND0x80//时钟芯片的寄存器位置,存放时间

#defineDS1302_MINUTE0x82

#defineDS1302_HOUR0x84

#defineDS1302_WEEK0x8A

#defineDS1302_DAY0x86

#defineDS1302_MONTH0x88

#defineDS1302_YEAR0x8C

②实时时钟写入一字节(内部函数)

voidDS1302InputByte(uchard)

{

uchari;

ACC=d;

for(i=8;

i>

0;

i--)

{

DS1302_IO=ACC0;

//相当于汇编中的RRC

DS1302_CLK=1;

DS1302_CLK=0;

ACC=ACC>

>

1;

}

}

③实时时钟读取一字节(内部函数)

ucharDS1302OutputByte(void)

1;

//相当于汇编中的RRC

ACC7=DS1302_IO;

return(ACC);

④ucAddr:

DS1302地址,ucData:

要写的数据

voidWrite1302(ucharucAddr,ucharucDa)

{

DS1302_RST=0;

DS1302_RST=1;

DS1302InputByte(ucAddr);

//地址,命令

DS1302InputByte(ucDa);

//写1Byte数据

}

⑤读取DS1302某地址的数据

ucharRead1302(ucharucAddr)

ucharucData;

DS1302InputByte(ucAddr|0x01);

//地址,命令

ucData=DS1302OutputByte();

//读1Byte数据

return(ucData);

⑥将时间年,月,日,星期数据转换成液

//晶显示字符串,放到数组里DateString[]

ucharcodetab[]={0XD2,0XBB,0XB6,0XFE,0XC8,0XFD,0XCB,0XC4,0XCE,0XE5,0XC1,0XF9,0XC8,0XD5};

voidDateToStr(SYSTEMTIME*Time)

if(hide_year<

2)//这里的if,else语句都是判断位闪烁,<

2显示数据,>

2就不显示,输出字符串为2007/07/22

{

Time->

DateString[0]='

2'

;

DateString[1]='

0'

DateString[2]=Time->

Year/10+'

DateString[3]=Time->

Year%10+'

}

else

'

DateString[2]='

DateString[3]='

}

DateString[4]='

-'

if(hide_month<

2)

DateString[5]=Time->

Month/10+'

DateString[6]=Time->

Month%10+'

DateString[5]='

DateString[6]='

DateString[7]='

if(hide_day<

DateString[8]=Time->

Day/10+'

DateString[9]=Time->

Day%10+'

DateString[8]='

DateString[9]='

if(hide_week<

week_value[0]=tab[2*(Time->

Week%10)-2];

//星期的数据另外放到week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示

week_value[1]=tab[2*(Time->

Week%10)-1];

week_value[0]='

week_value[1]='

week_value[2]='

\0'

DateString[10]='

//字符串末尾加'

判断结束字符

⑦时钟芯片初始化

voidInitial_DS1302(void)

ucharSecond=Read1302(DS1302_SECOND);

if(Second&

0x80)//判断时钟芯片是否关闭

Write1302(0x8e,0x00);

//写入允许

Write1302(0x8c,0x10);

//以下写入初始化时间日期:

07/07/25.星期:

3.时间:

23:

59:

55

Write1302(0x88,0x07);

Write1302(0x86,0x10);

Write1302(0x8a,0x07);

Write1302(0x84,0x23);

Write1302(0x82,0x59);

Write1302(0x80,0x55);

Write1302(0x8e,0x80);

//禁止写入

(2)主函数源程序

voidmain(void)

init_test();

//while

(1);

while

(1)

//savedata_eeprom();

//senddata_usart();

show_lcd();

(3)温度模块源程序

①初始化DS1820

Init_DS18B20(void)

DQ=1;

//DQ复位

Delay(10);

//稍做延时

DQ=0;

//单片机将DQ拉低

Delay(80);

//精确延时大于480us

//拉高总线

Delay(50);

presence=DQ;

//如果=0则初始化成功=1则初始化失败

Delay(40);

return(presence);

//返回信号,0=presence,1=nopresence

②读取温度

unsignedintRead_Temperature(void)

unsignedinttemp_data1;

unsignedinttemp_data2;

Init_DS18B20();

WriteOneChar(0xCC);

//跳过读序号列号的操作

WriteOneChar(0x44);

//启动温度转换

Delay(500);

Init_DS18B20();

//跳过读序号列号的操作

WriteOneChar(0xBE);

//读取温度寄存器

temp_data1=ReadOneChar();

//温度低8位

temp_data2=ReadOneChar();

//温度高8位

temp_data2=(temp_data2<

<

8)|temp_data1;

return(temp_data2);

③定时器0初始化

voidinit_tiem()

IE=0X92;

//开定时器0中断

//16位定时器

TH0=0X00;

TL0=0x00;

TR0=1;

④定时器0中断函数

功能:

读18B20并且经串口发送出去

voidItime_INT0()interrupt1

unsignedinttemp1;

unsignedinttemp2;

TH0=0X00;

TL0=0XFF;

temp1=Read_Temperature();

temp2=temp1>

8;

if(temp2&

0x80)

{temp1=((~temp1)+1)*0.0625;

else

{temp1=temp1*0.0625;

temp_data[0]=trdata[temp1/10];

temp_data[1]=trdata[temp1%10];

send_string_com(temp_data,2);

(4)LCD显示模块源程序

ucharidatachang[3]={

100,10,1

};

voidinttostring(ucharx,ucharloc)

charflag;

flag=0;

dis_string[2]=0;

loc=3-loc;

for(i=0;

i<

3;

i++)

if(i==loc)

flag=0xff;

if(flag==0)

dis_string[i]=(x/chang[i])|0x30;

x=x%chang[i];

dis_string[loc]='

.'

dis_string[i+1]=(x/chang[i])|0x30;

dis_string[3]=0;

voiddis_var(uchardata_x,uchardata_y,ulongdata1,ucharlenth,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1