数码管显示温控电动机.docx
- 文档编号:12813032
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:26
- 大小:362.19KB
数码管显示温控电动机.docx
《数码管显示温控电动机.docx》由会员分享,可在线阅读,更多相关《数码管显示温控电动机.docx(26页珍藏版)》请在冰豆网上搜索。
数码管显示温控电动机
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数码管 显示 温控 电动机