课程设计题目温度采集与显示系统汇总Word格式.docx

上传人:b****4 文档编号:17385943 上传时间:2022-12-01 格式:DOCX 页数:35 大小:603.34KB
下载 相关 举报
课程设计题目温度采集与显示系统汇总Word格式.docx_第1页
第1页 / 共35页
课程设计题目温度采集与显示系统汇总Word格式.docx_第2页
第2页 / 共35页
课程设计题目温度采集与显示系统汇总Word格式.docx_第3页
第3页 / 共35页
课程设计题目温度采集与显示系统汇总Word格式.docx_第4页
第4页 / 共35页
课程设计题目温度采集与显示系统汇总Word格式.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

课程设计题目温度采集与显示系统汇总Word格式.docx

《课程设计题目温度采集与显示系统汇总Word格式.docx》由会员分享,可在线阅读,更多相关《课程设计题目温度采集与显示系统汇总Word格式.docx(35页珍藏版)》请在冰豆网上搜索。

课程设计题目温度采集与显示系统汇总Word格式.docx

并对电路中的核心器件进行必要的说明单元模块设计

3.1.1时钟电路

图3.1晶振电路

3.1.2复位电路

图3.2复位电路

3.1.3报警电路

图3.3报警电路

3.1.4温度采集电路

图3.4温度采集电路

3.1.5存储电路

图3.5存储电路

3.1.6LCD显示模块

图3.6LCD模块电路

3.1.7按键部分

图3.7按键电路

3.1.8串口通信电路

图3.8串口通信电路

3.2核心器件介绍

3.2.1单片机STC89C52介绍

⏹STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。

主要特性如下:

工作电压:

5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机。

1.工作频率范围:

0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。

2.用户应用程序空间为8K字节。

3.片上集成512字节RAM。

4.通用I/O口(32个)复位后为FFH,P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。

5.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片

6.具有EEPROM功能。

7.具有看门狗功能。

8.共3个16位定时器/计数器。

即定时器T0、T1、T2。

9.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒。

⏹STC89C52RC引脚功能说明

VCC(40引脚):

电源电压。

VSS(20引脚):

接地。

P0端口(P0.0~P0.7P0.7,39~32引脚):

P0口是一个漏极开路的8位双向I/O口。

作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入每个引脚能驱动写入“1”时,可以作为高阻抗输入。

在访问外部程序和数据存储器时在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线位数据的复用总线。

此时,P0口内部上拉电阻有效。

在FlashROM编在程时,P0端口接收指令字节端口接收指令字节;

而在校验程序时,则输出指令字节则输出指令字节。

验证时,要求外接上拉电阻。

P1端口(P1.0~P1.7,1~8引脚):

P1口是一个带内部上拉电阻的8位双向I/O口。

P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。

P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。

此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表:

在对FlashROM编程和程序校验时,P1接收低8位地址。

P2端口(P2.0~P2.7,21~28引脚):

P2口是一个带内部上拉电阻的8位双向I/O端口。

P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。

P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(I)。

在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX@DPTR”指令)时,P2送出高8位地址。

在访问8位地址的外部数据存储器(如执行“MOVX@R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。

在对FlashROM编程和程序校验期间,P2也接收高位地址和一些控制信号。

P3端口(P3.0~P3.7,10~17引脚):

P3是一个带内部上拉电阻的8位双向I/O端口。

P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。

P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流()。

在对FlashROM编程或程序校验时,P3还接收一些控制信号。

P3口除作为一般I/O口外,还有其他一些复用功能,如下所示:

RST(9引脚):

复位输入。

当输入连续两个机器周期以上高电平时为有效,复位高电平有效。

ALE/ROG(30引脚)地址锁存控制信号:

(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

在Flash编程时,此引脚(ROG)也用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

XTAL1(19引脚):

振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2(18引脚):

振荡器反相放大器的输入端。

图3.9AT89C52引脚图图3.11LCD1602引脚图

3.2.2DS18B20介绍

DS18B20是DALLAS公司生产的一线式传感器,具有3引脚TO-92小体积封装形式;

温度测量范围为-55摄氏度到+125摄氏度,可编程为9到12位A/D转换精度,测温分辨率可达0.0625摄氏度,被侧温度用符号扩展的16位数字量方式串行输出;

其工作电源既可在远端引入,也可采用寄生电源方式产生。

CPU只需一根端口线就能与诸多DS18B20通信,占用问处理器的端口较少,可节省大量的引线和逻辑电路。

DS18B20主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH个TL、配置寄存器。

DS18B20中的温度传感器可完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625摄氏度/LSB形式表达,其中S为符号位。

例如+125摄氏度的数字输出为07DOH,+25.0625摄氏度的数字输出为0191H,-25.0625摄氏度的数字输出为FF6FH,-55摄氏度的数字输出为FC90H.

图3.10DS18B20的两种封装形式

DS18B20采用一线通信接口。

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

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

⑴读ROM指令0X33,⑵ROM匹配指令0X55,⑶搜索ROM指令0XF0,⑷跳过ROM指令0XCC,⑸报警检查指令0XEC。

这些指令操作作用在没有一个器件的64位光刻ROM序列号。

3.2.3LCD1602介绍(LCD1602引脚图见图3.11)

1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。

1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

液晶显示器各种图形的显示原理:

线段的显示

点阵图形式液晶由M×

N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×

8=128个点组成,屏上64×

16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。

例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;

当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;

当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。

这就是LCD显示的基本原理。

字符的显示

用LCD显示一个字符时比较复杂,因为一个字符由6×

8或8×

8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。

这样一来就组成某个字符。

但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

汉字的显示

汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。

⏹1602LCD主要技术参数:

显示容量:

16×

2个字符

芯片工作电压:

4.5—5.5V

工作电流:

2.0mA(5.0V)

模块最佳工作电压:

5.0V

字符尺寸:

2.95×

4.35(W×

H)mm

⏹引脚功能说明及11条控制指令

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如

1602液晶模块内部的控制器共有11条控制指令,如表下:

图3.10LCD1602中文字符代码与字符图形对应的关

3.2.4AT24C02引脚图及MAX232E引脚图

AT24C02引脚图MAX232E引脚图

4软件设计

用模块化程序设计此课程设计,各模块程序如下所示

⏹总程序main模块

#include<

reg52.h>

function.h>

charmiao,shi,fen;

uints1num;

ucharcount;

uintsu,tt,mm,m,n;

ucharbuff[4];

unsignedcharpDat[7],pDat1[7];

sbits1=P2^3;

sbits2=P2^4;

sbits3=P2^5;

voidmain()

{m=0;

n=0;

init();

EX0=1;

while

(1)

{write_sfm(10,miao);

write_sfm(7,fen);

write_sfm(4,shi);

dis_temp(tt);

dis_temp1(mm);

keyscan();

}

}

voidint_0()interrupt0

{EA=0;

IRcvStr(0xa0,n,&

pDat1[0],8);

mm=pDat1[0]*100+pDat1[1]*10+pDat1[2];

pDat1[0]=0;

pDat1[1]=0;

pDat1[2]=0;

n=n+8;

EA=1;

}

voidkeyscan()

{if(s1==0)

{delay(5);

if(s1==0)

{s1num++;

while(!

s1);

if(s1num==1)

{TR0=0;

write_com(0x80+0x40+10);

write_com(0x0f);

if(s1num==2)

{write_com(0x80+0x40+7);

if(s1num==3)

{write_com(0x80+0x40+4);

if(s1num==4)

{s1num=0;

write_com(0x0c);

TR0=1;

}

if(s1num!

=0)

{if(s2==0)

{delay(5);

if(s2==0)

{while(!

s2);

if(s1num==1)

{miao++;

if(miao==60)

miao=0;

write_sfm(10,miao);

write_com(0x80+0x40+10)

}

if(s1num==2)

{fen++;

if(fen==60)

fen=0;

write_sfm(7,fen);

write_com(0x80+0x40+7);

}

if(s1num==3)

{shi++;

if(shi==24)

shi=0;

write_sfm(4,shi);

write_com(0x80+0x40+4);

}

if(s3==0)

if(s3==0)

s3);

{miao--;

if(miao==-1)

miao=59;

write_com(0x80+0x40+10);

{fen--;

if(fen==-1)

fen=59;

{shi--;

if(shi==-1)

shi=23;

}

voidtimer0()interrupt1

{TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

su++;

if(su==20)

{su=0;

tempchange();

tt=get_temp();

pDat[0]=tt/100;

pDat[1]=(tt%100)/10;

pDat[2]=tt%10;

ISendStr(0xa0,m,&

pDat[0],8);

m=m+8;

pDat[0]=0;

pDat[1]=0;

pDat[2]=0;

count++;

if(count==20)

{count=0;

miao++;

if(miao==60)

{miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

{

shi=0;

}//write_sfm(4,shi)

}//write_sfm(7,fen)

}//write_sfm(10,miao);

}

⏹I2C程序模块

#include<

intrins.h>

Function.h>

#defineNOP()_nop_()

#define_Nop()_nop_()

sbitSCL=P2^1;

sbitSDA=P2^0;

bitack;

voidStart_I2c()

{SDA=1;

_Nop();

SCL=1;

SDA=0;

SCL=0;

voidStop_I2c()

{SDA=0;

SDA=1;

voidSendByte(unsignedcharc){

unsignedcharBitCnt;

for(BitCnt=0;

BitCnt<

8;

BitCnt++)

{if((c<

<

BitCnt)&

0x80)

SDA=1;

else

SDA=0;

_Nop();

SCL=1;

SCL=0;

if(SDA==1)ack=0;

elseack=1;

}

unsignedcharRcvByte()

{unsignedcharretc;

retc=0;

SDA=1;

BitCnt++)

{_Nop();

retc=retc<

1;

if(SDA==1)

retc=retc+1;

return(retc);

voidAck_I2c(bita)

{if(a==0)

⏹AT24C02模块

bitISendStr(unsignedcharsla,unsignedcharsuba,unsignedchar*s,unsignedcharno)

{

unsignedchari;

Start_I2c();

SendByte(sla);

if(ack==0)return(0);

SendByte(suba);

if(ack==0)return(0);

for(i=0;

i<

no;

i++)

{SendByte(*s);

s++;

}

Stop_I2c();

return

(1);

bitIRc

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

当前位置:首页 > 解决方案 > 学习计划

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

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