版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2017届课程设计基于单片机步进电机温度控制系统塔里木大学教务处制目录摘要:3一、设计要求3二、系统组成方框图3三、电路设计说明33.1 单片机AT89C5133.2 步进电机53.3 DS18B20温度传感器53.4 LCD1602液晶显示屏63.5工作原理7四、总结74.1 参考文献74.2 仿真图74.3代码9摘要:本课题是一种基于单片机步进电机控制系统的软硬件设计。本设计能实现出步进电机的正转,反转。通过数字温度传感器DS18B20对温度进行监控实现超温报警提示,温度过高电机将会正转,温度过低将会反转。该系统具有控制方便、结构简单、界面友好、和系统运行稳定等优点,具有一定的应用价值。一
2、、设计要求1、设计一个基于单片机步进电机温度控制系统;2、在LCD屏上显示温度控制的上下限和当前室温;3、可以调节温度的上下限;4、室温超过设定的上限时,步进电机将会正转,室温低于设定的下限时,步进电机将会反转;二、系统组成方框图如图:三、电路设计说明3.1 单片机AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM) ,器件采用ATMEL公司的高密度、非易失性存储技术生产, 兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Fl
3、ash存储单元,功能强大AT89C51单片机能提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89C513.3 DS18B20温度传感器DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点:a. 采用单总线的接口方式 与微处理器连接时 仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。b.测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 + 125 ; 在 -10+ 85°C 范围内,精度为
4、 ± 0.5°C 。c. 持多点组网功能 多个 DS18B20 可以并联在惟一的单线上,实现多点测温。d.供电方式灵活 DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而 使系统结构更趋简单,可靠性更高。f.测量结果以912位数字量方式串行传送单线总线特点:单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。单总线通常要求外接一个约为 4.7K10K 的上拉电阻,这样,当总线闲置时其状态为高电平。DS18B20单总线的工作方式:DS18B20的初始化:主机首先发出一个480960微秒的低电平脉冲,
5、然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就一直在检测总线上是否有480960微秒的低电平出现,如果有,在总线转为高电平后等待1560微秒后将总线电平拉低60240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。主机发出各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。写周期最少为60微秒,最长不超过12
6、0微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则将总线置为低电平,若主机想写1,则将总线置为高电平,持续时间最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给总线恢复 。而DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。对于读数据操作时序也分为读0时序和读1时序两个过程。读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。作为从机DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总
7、线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60微秒才能完成3.4 LCD1602液晶显示屏1602采用标准的16脚接口,其中:第1脚:GND为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数
8、据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。特性:3.3V或5V工作电压,对比度可调,内含复位电路,提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能,有80字节显示数据存储器DDRAM,内建有192,5X7点阵的字型的字符发生器CGROM,8个可由用户自定义的5X7的字符发生器CGRAM通信协议:每次通信 /写数据时RS
9、=L lcden=0; /使能端高电平无效 P0=date; /给端口送数据 delay(5); /延时5MS lcden=1; /使能端高电平有效 delay(5); lcden=0;LCD1602液晶显示屏3.5 24C02暂存器CAT24WC01/02/04/08/16 是一个1K/2K/4K/8K/16K 位串行CMOS E2PROM 内部含有128/256/512/1024/2048 个8 位字节CATALYST 公司的先进CMOS 技术实质上减少了器件的功耗CAT24WC01 有一个8 字节页写缓冲器CAT24WC02/04/08/16 有一个16 字节页写缓冲器该器件通过I2C
10、总线接口进行操作有一个专门的写保护功能3.6工作原理通过DS18B20温度传感器采集室温,传输给单片机;设定温度的上下限,用的是P3.0,P3.1,P3.2口来调节;P0.0P0.7口来输出给LCD1062液晶显示器;P1.0P1.3四个口来控制步进电机的转动;P2.7口是控制LCD的E端使能端,高电平(1)时读取信息,负跳变时执行指令;P2.6控制LCD的RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;P2.5口控制LCD的RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。当室温高于设定的温度时,步进电机会正转,当室温低于设定温度时,步进电机反转。四
11、、总结4.1 参考文献1王静霞.单片机应用技术.电子工业出版社.2009。2楼然苗.单片机课程设计指导.北京航空航天大学出版社. .20073周润景.Proteus在MCS-51&ARM7系统中的应用百例.电子工业出版社.20064.2 仿真图4.3代码主函数#include<reg51.h> #include"i2c.h" #define uint unsigned int #define uchar unsigned char/第4个引脚是RS,5是RW,6是en sbit lcdrs=P26;/数据命令端口 sbit lcdrw=P25;/读写端口
12、.我们在这里只写/ sbit lcden=P27;/使能端口。 sbit DQ=P37;/ds18b20 端口 sbit K1=P31;/温度的上线加 sbit K2=P32;/温度的下线减 sbit K3=P30;/上下线切换 sbit K4=P33;/温度的上线加 sbit K5=P34;/温度的下线减 sbit K6=P35; sbit A1=P10; /定义步进电机连接端口sbit B1=P11;sbit C1=P12;sbit D1=P13;sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;void At24c02Write(unsigned char ,
13、unsigned char );unsigned char At24c02Read(unsigned char );#define Coil_A1 A1=1;B1=1;C1=0;D1=0;/A相通电,其他相断电#define Coil_B1 A1=0;B1=1;C1=1;D1=0;/B相通电,其他相断电#define Coil_C1 A1=0;B1=0;C1=1;D1=1;/C相通电,其他相断电#define Coil_D1 A1=1;B1=0;C1=0;D1=1;/D相通电,其他相断电 unsigned char Speed;void DelayUs2x(unsigned char t) w
14、hile(-t);void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); int Hwendu=23,Lwendu=20,flag=1,qiehuan; uint temp,TempH,TempL; uchar code table1=" " uchar code table2=" " unsigned int i; void At24c02Write(unsigned char addr,unsigned char dat)I2C_Start();
15、I2C_SendByte(0xa0, 1);/发送写器件地址I2C_SendByte(addr, 1);/发送要写入内存地址I2C_SendByte(dat, 0);/发送数据I2C_Stop();unsigned char At24c02Read(unsigned char addr)unsigned char num;I2C_Start();I2C_SendByte(0xa0, 1); /发送写器件地址I2C_SendByte(addr, 1); /发送要读取的地址I2C_Start();I2C_SendByte(0xa1, 1); /发送读器件地址num=I2C_ReadByte();
16、/读取数据I2C_Stop();return num; void delay(uint z) uint x,y; for(x=0;x<z;x+) for(y=0;y<110;y+); void delay1(unsigned int i)/延时函数 while(i-);void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ复位 delay1(8); /稍做延时 DQ = 0; /单片机将DQ拉低 delay1(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay1(10); x=DQ; /稍做延时后 如
17、果x=0则初始化成功 x=1则初始化失败 delay(5);/*/* 读一个字节 */*/unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; / 给脉冲信号 dat>>=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay1(5); return(dat);/*/* 写一个字节 */*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (
18、i=8; i>0; i-) DQ = 0; DQ = dat&0x01; delay1(5); DQ = 1; dat>>=1; delay1(5);/*/* 读取温度 */*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay1(200);Init_DS18B20();WriteOneCh
19、ar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); /低位b=ReadOneChar(); /高位b<<=8;t=a+b;return(t); void write_com(uchar com) lcdrs=0; /写指令时RS=L lcden=0; P0=com; /给端口送指令 delay(5); /延时5MS lcden=1; /使能端高电平有效 delay(5); lcden=0; void write_date(uchar date) lcdrs=1;
20、/写数据时RS=L lcden=0; P0=date; /给端口送数据 delay(5); /延时5MS lcden=1; /使能端高电平有效 delay(5); lcden=0; void init() uchar num; lcdrw=0;/写信号拉低 lcden=0;/使能端拉低 write_com(0x38); /开显示 write_com(0x0c); /0e开显示不显示光标 write_com(0x06); /每写一个地址和光标加一 write_com(0x01); /显示清零 write_com(0x80); /第一行的初始地址为0x80 for(num=0;num<14;
21、num+)/循环的数字要看上面的占多少个字符 write_date(table1num);/多了和少了都不会对的。 delay(5); write_com(0x80+0x40); /第二行初始地址为0x80+0x40 for(num=0;num<14;num+) write_date(table2num); delay(5); void key() if(K3=0)/高低线切换delay(20);if(K3=0)qiehuan=!qiehuan;while(!K3);if(qiehuan=0)/高上线if(K1=0)/加delay(20);if(K1=0)Hwendu+;DelayMs(
22、1);At24c02Write(2,Hwendu);if(Hwendu>=99)Hwendu=99;while(!K1);if(K2=0)/减delay(20);if(K2=0)Hwendu-;DelayMs(1);At24c02Write(2,Hwendu);if(Hwendu<=0)Hwendu=0;while(!K1);write_com(0x80+10);write_date(0x40+8);write_date(0x30+10);write_date(0x30+Hwendu/10);write_date(0x30+Hwendu%10);write_date(0xd0+15
23、);write_date(0x40+3);if(qiehuan=1)/下线if(K1=0)/加按键delay(20);if(K1=0)Lwendu+;At24c02Write(3,Lwendu);if(Lwendu>=99)Lwendu=99;while(!K1);if(K2=0)/减delay(20);if(K2=0)Lwendu-;DelayMs(1);At24c02Write(3,Lwendu);if(Lwendu<=0)Lwendu=0;while(!K1);write_com(0x80+0x40+10);write_date(0x40+12);write_date(0x3
24、0+10);write_date(0x30+Lwendu/10);write_date(0x30+Lwendu%10);write_date(0xd0+15);write_date(0x40+3); unsigned int i;unsigned int num0 = 4,num1 = 0,n;char c; void main() init(); while(1) temp=ReadTemperature();/温度读取 if(temp&0x8000)/判断 flag=0;/负号标志 temp=temp; / 取反加1 temp +=1; else temp=temp;flag=1;
25、/温度为正标志位1 TempH=temp>>4;/温度高4位write_com(0x80+0x40);if(flag=0)write_date(0xB0);/负号标志else write_date(0x20+11);/正号标志.write_com(0x80+0x41);write_date(0x30+TempH/10);/显示温度的十位write_date(0x30+TempH%10);/显示温度的各位 TempL=temp&0x0F; TempL=TempL*6;/小数近似处理write_com(0x80+0x43);write_date(0x2e);/显示小数点writ
26、e_date(0x30+TempL/10);/显示温度的小数write_date(0xd0+15);write_date(0x40+3);key();/按键扫描DelayMs(1);Hwendu = At24c02Read(2);DelayMs(1);Lwendu = At24c02Read(3);write_com(0x80);write_date(0x40+8);write_date(0x40+5);write_date(0x40+12);write_date(0x40+12);write_date(0x40+15);write_com(0x80+7);write_com(0x80+10)
27、;/高上线write_date(0x40+8);write_date(0x30+10);write_date(0x30+Hwendu/10);write_date(0x30+Hwendu%10);write_date(0xd0+15);write_date(0x40+3);write_com(0x80+0x40+10);/低下线write_date(0x40+12);write_date(0x30+10);write_date(0x30+Lwendu/10);write_date(0x30+Lwendu%10);write_date(0xd0+15);write_date(0x40+3);fo
28、r(i=0;i<15;i+)if(TempH*10+TempL/10)>(Hwendu*10)&&(flag=1)/温度判断if(K3=0)/高低线切换delay(20);if(K3=0)qiehuan=!qiehuan;while(!K3);Speed=8; Coil_A1 DelayMs(Speed); Coil_B1 DelayMs(Speed); Coil_C1 DelayMs(Speed); Coil_D1 DelayMs(Speed);if(TempH*10+TempL/10)<(Lwendu*10)&&(flag=1)if(K3=
29、0)/高低线切换delay(20);if(K3=0)qiehuan=!qiehuan;while(!K3);Speed=8; Coil_D1 DelayMs(Speed); Coil_C1 DelayMs(Speed); Coil_B1 DelayMs(Speed); Coil_A1 DelayMs(Speed); 子函数#include"i2c.h"/* 函 数 名 : Delay1us()* 函数功能 : 延时* 输 入 : 无* 输 出 : 无*/void I2C_Delay10us()uchar a, b;for(b=1; b>0; b-)for(a=2; a
30、>0; a-);/* 函 数 名 : I2C_Start()* 函数功能 : 起始信号:在I2C_SCL时钟信号在高电平期间I2C_SDA信号产生一个下降沿* 输 入 : 无* 输 出 : 无* 备 注 : 起始之后I2C_SDA和I2C_SCL都为0*/void I2C_Start()I2C_SDA = 1;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立时间是I2C_SDA保持时间>4.7usI2C_SDA = 0;I2C_Delay10us();/保持时间是>4usI2C_SCL = 0;I2C_Delay10us();/*
31、 函 数 名 : I2C_Stop()* 函数功能 : 终止信号:在I2C_SCL时钟信号高电平期间I2C_SDA信号产生一个上升沿* 输 入 : 无* 输 出 : 无* 备 注 : 结束之后保持I2C_SDA和I2C_SCL都为1;表示总线空闲*/void I2C_Stop()I2C_SDA = 0;I2C_Delay10us();I2C_SCL = 1;I2C_Delay10us();/建立时间大于4.7usI2C_SDA = 1;I2C_Delay10us();/* 函 数 名 : I2cSendByte(uchar num)* 函数功能 : 通过I2C发送一个字节。在I2C_SCL时钟信号高电平期间,* * 保持发送信号I2C_SDA保持稳定* 输 入 : num ,ack* 输 出 : 0或1。发送成功返回1,发送失败返回0* 备 注 : 发送完一个字节I2C_SCL=0, 需要应答则应答设置为1,否则为0*/uchar I2C_SendByte(uchar dat, uchar ack)uchar a = 0,b = 0;/最大255,一个机器周期为1us,最大延时255us。for(a=0; a<8; a+)/要发送8位,从最高位开
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年电子合同争议解决办法2篇
- 2024全新展览展示项目志愿者管理合同3篇
- 2024年标准办公室装修协议
- 智慧作业算不算课程设计
- 2024年土地复垦与耕地质量提升合作协议书3篇
- 我们班的课程设计
- 2024年标准桩基施工协议模板版B版
- 物业合同管理与监控方案
- 2024版二建劳动合同范本:建筑工程造价控制2篇
- 2024版智能交易证券居间合作协议2篇
- 散打集体活动策划方案
- 学管师述职报告
- 老年人合理用药的基本原则课件
- 哈尔滨冰雪大世界
- 【珠江啤酒公司盈利能力的杜邦分析(7400字论文)】
- 传染科护理敏感指标建立
- 旧房翻新培训课件教学
- 2023-2024学年安徽省芜湖市无为市八年级(上)期末数学试卷(含解析)
- 《反渗透系统简介》课件
- 医疗安全不良事件警示教育课件
- illustrator练习试题附答案
评论
0/150
提交评论