数码管显示温控电动机.docx

上传人:b****1 文档编号:2253374 上传时间:2023-05-03 格式:DOCX 页数:26 大小:362.19KB
下载 相关 举报
数码管显示温控电动机.docx_第1页
第1页 / 共26页
数码管显示温控电动机.docx_第2页
第2页 / 共26页
数码管显示温控电动机.docx_第3页
第3页 / 共26页
数码管显示温控电动机.docx_第4页
第4页 / 共26页
数码管显示温控电动机.docx_第5页
第5页 / 共26页
数码管显示温控电动机.docx_第6页
第6页 / 共26页
数码管显示温控电动机.docx_第7页
第7页 / 共26页
数码管显示温控电动机.docx_第8页
第8页 / 共26页
数码管显示温控电动机.docx_第9页
第9页 / 共26页
数码管显示温控电动机.docx_第10页
第10页 / 共26页
数码管显示温控电动机.docx_第11页
第11页 / 共26页
数码管显示温控电动机.docx_第12页
第12页 / 共26页
数码管显示温控电动机.docx_第13页
第13页 / 共26页
数码管显示温控电动机.docx_第14页
第14页 / 共26页
数码管显示温控电动机.docx_第15页
第15页 / 共26页
数码管显示温控电动机.docx_第16页
第16页 / 共26页
数码管显示温控电动机.docx_第17页
第17页 / 共26页
数码管显示温控电动机.docx_第18页
第18页 / 共26页
数码管显示温控电动机.docx_第19页
第19页 / 共26页
数码管显示温控电动机.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数码管显示温控电动机.docx

《数码管显示温控电动机.docx》由会员分享,可在线阅读,更多相关《数码管显示温控电动机.docx(26页珍藏版)》请在冰点文库上搜索。

数码管显示温控电动机.docx

数码管显示温控电动机

1引言

本设计是一种基于单片机原理的简易实用的温度控制系统。

采用AT89C51作为CPU主控装置,电路主要由温度采集和电机控制电路组成。

温度采集由智能温度传感器DS18B20集成芯片完成,该系统主要用于实现温度采集、显示和控制功能。

1.1设计任务及要求

使用AT89C51单片机为核心,使用4位集成式数码管显示当前温度,温度传感使用DS18B20。

用4位集成式数码管显示当前温度,当温度在

范围之外时,直流电动机开始旋转。

控制程序在Keil软件中编写,编译,整个控制电路在Proteus仿真软件中连接调试。

1.2实用价值及理论意义

温度的测量和控制在工业生产中获得了广泛的应用,在工农业生产、日常的生活等领域都占有重要的地位。

随着对温度控制精度的不断提高,温度控制系统的控制技术得到了迅速发展。

目前温度控制系统广泛应用于社会生活、生产,成为发展国民经济的重要设备之一。

所以温度控制智能化有着极其重要的意义。

通过对温度控制通信系统的设计,了解信息采集测试、控制及通信的过程,提高在电子工程设计和操作方面的综合能力,初步培养在完成工程项目中所应具备的基本素质和要求。

以AT89C51单片机为核心,使用4位集成式数码管显示当前温度,使用DS18B20温度传感器来设计一个用4位集成式数码管显示当前温度,当温度在

范围之外时,使直流电动机开始旋转的程序并仿真调试,验证该设计可行性。

2方案设计

采用AT89C51作为CPU主控制器,电路由温度采集、电机控制、显示电路组成,系统的总体电路原理图如图2.1所示

 

 

图2.1电路原理图

3硬件电路的设计

3.1温度采集电路

3.1.1DS18B20数字温度传感器基本特性

独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55°C至+125℃。

可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统.

表3.1中所示为DS18B20内部寄存器阵列。

其中的2、3字节是可设置的文都超限报警值,同一总线上的器件可以设置不同的高、低限报警数值,当某一点的文都超限是,改点就会发出报警信号。

表3.1DS18B20内部寄存器

寄存器位置

说明

寄存器位置

说明

0

温度测量低字节

5

保留

1

温度测量高字节

6

保留

2

高限报警温度值

7

保留

3

低限报警温度值

8

CRC

4

状态设置字

主控制器件对DS18B20的各种控制都是通过传输操作指令进行的。

对ROM操作的命令制记过能表如表3.2所示

表3.2DS18B20ROM操作指令

命令

功能

命令

功能

33H

读取器件的编码制

F0H

搜索器件编码

55H

根据编码制查找器件

ECH

报警器件搜索

CCH

跳过读取编码制操作

表3.3DS18B20RAM操作指令

命令

功能

命令

功能

4EH

写内部数据存储器

44H

温度转换命令

BEH

读内部数据存储器

B8H

调用EEROM内数值

48H

复制内部数据存储器

B4H

读器件供电方式

3.1.2DS18B20数字温度传感器芯片引脚

表3.4DS18B20的引脚

引脚

符号

说明

1

GND

地线引脚

2

DQ

单线运用的数据输入/输出引脚

3

VDD

可选VDD引脚

3.1.3电路

如3.1图所示为温度采集电路,由于DS18B20是单线数据传输的智能温度传感器,在使用中不需要如何外围的元件,在连接时仅需要一条口线即可实现单片机及DS18B20的双向通信。

所以此温度采集电路只需将DS18B20外接一个上拉电阻,然后接在单片机的I/O接口。

 

 

VCC

图3.1温度采集电路

3.2CPU电路

CPU电路主要包括复位和晶振电路。

复位电路主要是在系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。

为可靠起见,电源稳定后还要经一定延时才撤销复位信号,以防止电源开关过程中引起的抖动而影响复位。

本电路,主要是由一个按键和电容电阻组成的RC复位电路。

晶振电路是由片内振荡电路输入线外接石英晶体和微调电容组成,此处使用12MHZ的晶体振荡器。

3.3电机控制电路

本系统的电机控制电路:

电动机回路是一个简单的开关电路,主要由单片机的I/O接口接电路的输入端,通过单片机的I/O口的电平控制三极管的通断,来控制继电器,从而达到控制电机的目的。

3.4显示电路

硬件显示电路部分由四位数码管构成。

采用的是动态扫描方式。

通常将所有位的段选线相应的并联在一起,有一个8位的I/O口控制,形成段选线的多路复用。

而各位共阳极分别有相应的I/O口控制,实现各位的分时复用。

段选和位选位同相驱动,不需要对每个LED数码管单独配置锁存和驱动电路,简化电路。

显示部分的四位一体的数码管用74LS04驱动,P3.3作为温度采集信号线,P0口为显示数据线,P2口作为位选线,动态扫描实现显示温度。

4软件设计电路

软件设计主要分为两部分:

主程序和服务子程序,子程序包括显示和温度传感器读/写程序。

4.1温度转换的程序设计

单片机实现温度转换读取温度数值程序的流程如图4.1所示

 

 

图4.1温度转换N-S图

4.2数码管显示电路

显示数据刷新子程序主要是对显示缓冲器中的显示数据惊喜刷新操作,当最高显示位为0时将符号位移入下一位。

显示数据刷新流程图如图4.2所示

 

 

 

图4.2显示N-S图

5Keil及Protues仿真

在Keil中完成编辑、编译、连接、调试、仿真等整个流程。

然后分别由C51及A51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以及库文件一起经L51连接定位生成绝对目标文件(.ABS).ABS文件由OH51转换成标准的Hex文件。

在Proteus中连接电路,实现它的电路仿真是交互的,可视化,实现软件源码级的实时调试。

图5.1Keil软件中的调试图

以下各图分别为仿真的结果图,图5.2是proteus软件中的电路图。

四位数码管显示采集到的温度,当温度为负值时显示符号“-”,当十位和百位为零时不显示该位。

从图中可以看出:

在-20°--70°范围内电机停转,数码管显示温度传感器的温度值;当温度大于70°或者小于-20°时电机开始转动。

图5.2电路仿真图

图5.3温度采集及显示电路

图5.4规定正范围内电机停转

图5.5超出70°电机转动

图5.6规定负范围内电机停转

图5.7小于-20°电机转动

6结论

本课程设计阐述了以AT89C51单片机为核心,使用DS18B20温度传感器以及4位集成式数码管显示温度的数码管显示的温控电动机。

实现了通过数码管监测温度,当温度在

范围之外时,直流电动机开始旋转的要求。

附录:

温控电动机源程序

//DS18B20的读写程序,数据脚P3.3//

//温度传感器18B20汇编程序,采用器件默认的12位转化//

//最大转化时间750微秒,显示温度-55到+125度,显示精度//

//为0.1度,显示采用4位LED共阳显示测温值//

//P0口为段码输入,P2.0~P2.3为位选//

//***************************************************/

#include

#include

#defineDisdataP0//段码输出口

#definediscanP2//扫描口

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^6;//温度输入口

sbitDIN=P0^7;//LED小数点控制

uinth;

inttemp;

floattemp2;

//**************温度小数部分用查表法***********//

ucharcodeditab[16]=

{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//

ucharcodedis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};

//共阳LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"

ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//列扫描控制字

uchardatatemp_data[2]={0x00,0x00};//读出温度暂放

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用

//*****************11us延时函数*************************/

//

voiddelay(uintt)

{

for(;t>0;t--);

}

voiddelayms(uintms)

{

uinti;

ucharj;

for(i=ms;i>0;i--)

for(j=112;j>0;j--);

}

/****************显示扫描函数***************************/

voidscan()

{

chark;

for(k=0;k<4;k++)//4位LED扫描控制

{

Disdata=0xff;

Disdata=dis_7[display[3-k]];//数据显示

if(k==2)

DIN=0;

discan=~scan_con[k];//位选

delayms(5);

}

}

//

//

/****************DS18B20复位函数************************/

voidow_reset(void)

{

charpresence=1;

while(presence)

{

while(presence)

{

DQ=1;_nop_();_nop_();//从高拉倒低

DQ=0;

delay(50);//550us

DQ=1;

delay(6);//66us

presence=DQ;//presence=0复位成功,继续下一步

}

delay(45);//延时500us

presence=~DQ;

}

DQ=1;//拉高电平

}

//

//

/****************DS18B20写命令函数************************/

//向1-WIRE总线上写1个字节

voidwrite_byte(ucharval)

{

uchari;

for(i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();//从高拉倒低

DQ=0;_nop_();_nop_();_nop_();_nop_();//5us

DQ=val&0x01;//最低位移出

delay(6);//66us

val=val/2;//右移1位

}

DQ=1;

delay

(1);

}

//

/****************DS18B20读1字节函数************************/

//从总线上取1个字节

ucharread_byte(void)

{

uchari;

ucharvalue=0;

for(i=8;i>0;i--)

{

DQ=1;_nop_();_nop_();

value>>=1;

DQ=0;_nop_();_nop_();_nop_();_nop_();//4us

DQ=1;_nop_();_nop_();_nop_();_nop_();//4us

if(DQ)value|=0x80;

delay(6);//66us

}

DQ=1;

return(value);

}

//

/****************读出温度函数************************/

//

read_temp()

{

ow_reset();//总线复位

delay(200);

write_byte(0xcc);//发命令

write_byte(0x44);//发转换命令

ow_reset();

delay

(1);

write_byte(0xcc);//发命令

write_byte(0xbe);

temp_data[0]=read_byte();//读温度值的低字节

temp_data[1]=read_byte();//读温度值的高字节

temp=temp_data[1];

temp<<=8;

temp=temp|temp_data[0];//两字节合成一个整型变量。

temp2=temp*0.0625;

if(temp>6348)//温度值正负判断

{temp2=(65536-temp)*0.0625;}//负温度求补码,标志位置1

returntemp;//返回温度值

}

//

/****************温度数据处理函数************************/

//二进制高字节的低半字节和低字节的高半字节组成一字节,这个

//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩

//下的低字节的低半字节转化成十进制后,就是温度值的小数部分

/********************************************************/

voidwork_temp(uinttem)

{

ucharn=0,t,r;

if(tem>6348)//温度值正负判断

{tem=65536-tem;n=1;}//负温度求补码,标志位置1

display[4]=tem&0x0f;//取小数部分的值

display[0]=ditab[display[4]];//存入小数部分显示值

display[4]=tem>>4;//取中间八位,即整数部分的值

display[3]=display[4]/100;//取百位数据暂存

t=display[3];

display[1]=display[4]%100;//取后两位数据暂存

display[2]=display[1]/10;//取十位数据暂存

r=display[2];

display[1]=display[1]%10;

//P1=0x00;

//P1=0XF7;

/******************符号位显示判断**************************/

if(!

display[3])

{

display[3]=0x0a;//最高位为0时不显示

if(!

display[2])

{

display[2]=0x0a;//次高位为0时不显示

}

}

if(n)

{if(!

r)

{display[3]=0x0a;display[2]=0x0b;}

elsedisplay[3]=0x0b;

}//负温度时最高位显示"-"

//***************报警温度,控制电机转动*********//

if(n)

{

if(display[2]>=2)

{

P1=0xF7;

}

elseP1=0xFf;

}

else

if(((display[2]>=7)&&r)||(t>0))

{P1=0xF7;}

elseP1=0xFf;

}

//****************主函数************************/

main()

{

Disdata=0xff;//初始化端口

discan=0xff;

for(h=0;h<4;h++)//开机显示"0000"

{display[h]=0;}

ow_reset();//开机先转换一次

write_byte(0xcc);//SkipROM

write_byte(0x44);//发转换命令

for(h=0;h<100;h++)//开机显示"0000"

{scan();}

while

(1)

{

work_temp(read_temp());//处理温度数据

scan();//显示温度值

}

}//

//***********************结束**************************//

参考文献

[1]李朝青.单片机原理及接口技术.北京航空航天大学出版社.2005

[2]李全利.单片机原理及应用技术.高等教育出版社.2004.11

[5]彭伟.单片机C语言程序设计实训100例——基于8051+Proteus仿真.电子工业出版社.2009

[6]郁有文.传感器原理及工程应用.西安电子科技大学出版社.2000.6

[7]孙焕铭等.51单片机C程序应用实例详解.2011.3

[8]潘新民.单片微型计算机实用系统设计.人民邮电大学出版社.1998.5

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2