单片机课程设计讲述_第1页
单片机课程设计讲述_第2页
单片机课程设计讲述_第3页
单片机课程设计讲述_第4页
单片机课程设计讲述_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 单片机 AT89c51AT89C51是美国ATMEL公司生产的低电压,高性能CM0S8位单片机,片内含4k bytes 的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件 采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通 用8位中央处理

3、器(CPU)和Flash存储单元,功能强大AT89c51单片机能提供许多高性价比的 应用场合,可灵活应用于各种控制领域。UI重,土:=XTAL1XTAL2RSTPSEN ALE EA0123456711111111PPPPPPPPPO.a/ADO PD.1 /AD1 PD.2/AD2 PO.3/AD3 PO.4/AD4 PO.5/AD5 PO.6/AD6PO.7/AD7P2.0/A8 P2.1/A9P2.2/A1 0 P2.3/A1 1 P2.4XA1 2 P2.S/A1 3 P2.6/A1 4 P2.7/A1 SP3.0小 XD P3.1XTXDP3.2疝T支TP3.3丽序TP3.4/TO

4、P3 .S/T1P3.5/WRP3.7/RUAT89C51AT89C513.3 DS18B20温度传感器DS18B20单线数字温度传感器,即“一线器件”,其具有独特的优点:a.采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度 测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。b.测量温度范围宽,测量精度高DS18B20的测量范围为-55 +125 ;在-10+ 85 C范围内,精度为 0.5 C。c.持多点组网功能多个DS18B20可以并联在惟一的单线上,实

5、现多点测温。d.供电方式灵活DS18B20可以通过内部寄生电路从数据线上获取电源。因此,当数据线 上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。f.测量结果以912位数字量方式串行传送单线总线特点:单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。单总线通常要求外接一个约为4.7K-10K的上拉电阻,这样,当总线闲置时其状态为 高电平。DS18B20单总线的工作方式:DS18B20的初始化:主机首先发出一个480960微秒的低电平脉冲,然后释放总线变为高电平,并在随后 的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若

6、无 低电平出现一直都是高电平说明总线上无器件应答。做为从器件的DS18B20在一上电后就一直在检测总线上是否有480960微秒的低电平 出现,如果有,在总线转为高电平后等待15 60微秒后将总线电平拉低60240微秒做出 响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。初始近3卷“复也和存在傲冲里线息线线型含义:息线校窄嚷狼电平r-息线度制嚣和DS1820同 为低电平DS182哪电平 电阻上拉主机发出各种操作命令都是向DS18B20写。和写1组成的命令字节,接收数据时也是 从DS18B20读取。或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1 的。写周期最少

7、为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1 微秒表示写周期开始。随后若主机想写0,则将总线置为低电平,若主机想写1,则将总线 置为高电平,持续时间最少60微秒直至写周期结束,然后释放总线为高电平至少1微秒给 总线恢复。而DS18B20则在检测到总线被拉底后等待15微秒然后从15ns到45us开始对 总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为最对于读数据操作时序也分为读0时序和读1时序两个过程。读周期是从主机把单总线拉低1微秒之后就得释放单总线为高电平,以让DS18B20把 数据传输到单总线上。作为从机DS18B20在检测到总线被拉低1微秒后,便

8、开始送出数据, 若是要送出。就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机 在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微 秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高 电平则确认为1。完成一个读时序过程,至少需要60微秒才能完成3.4 LCD1602液晶显示屏1602采用标准的16脚接口,其中:第1脚:GND为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高 (对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第

9、4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/O2VDD电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(H/L)12D5Data I/O5R/W读/写选择端(H/L)13D6Data

10、 I/O6E使能信号14D7Data I/O7DOData I/O15BLA背光源正极8D1Data I/O16BLK背光源负极特性:3.3V或5V工作电压,对比度可调,内含复位电路,提供各种控制命令,如:清屏、字符闪 烁、光标闪烁、显示移位等多种功能,有80字行显示数据存储器DDRAM,内建有192, 5X7点阵的字型的字符发生器CGROM, 8个可由用户自定义的5X7的字符发生器CGRAM二进制小数位四位十进制小数对应显示码(共阴极)00000.0000产03FH00010.0625106H00100.1250*106H00110.1875F25BH01000.2500L34FH01010

11、.3125产34FH01100. 3750466HL 01H0.4370/466H10000.5000F56DH10010.5625A67DH1010r0.6250k67DH10110.6275707H11000.7500*87FH11010.812587FH11100.8750*96FH11110.937596FH通信协议:每次通信写数据时RS=Llcden=0;使能端高电平无效P0=date;给端口送数据delay(5);延时 5MSlcden=l;使能端高电平有效delay(5);lcden=0;3.5 24C02暂存器CAT24WC01/02/04/08/16 是一个 1K/2K/4K

12、8K16K 位串行 CMOS E2PR0M 内部含有 128/256/512/1024/2048个8位字节CATALYST公司的先进CMOS技术实质上减少了器件 的功耗CAT24WC01有一个8字节页写缓冲器CAT24WC02/04/08/16有一个16字节页写缓冲器 该器件通过I2C总线接口进行操作有一个专门的写保护功能3.6 工作原理通过DS18B20温度传感器采集室温,传输给单片机:设定温度的上下限,用的是 P3.0.P3.1,P3.2 口来调节;P0.0-P0.7 口来输出给LCD1062液晶显示器:P1.0-P13四个口来 控制步进电机的转动:P2.7 口是控制LCD的E端使能端,高

13、电平(1)时读取信息,负跳变 时执行指令;P2.6控制LCD的RS为寄存器选择,高电平1时选择数据寄存器、低电平0 时选择指令寄存器;P2.5 口控制LCD的RW为读写信号线,高电平(D时进行读操作, 低电平(0)时进行写操作。当室温高于设定的温度时,步进电机会正转,当室温低于设定温度时,步进电机反转。四、总结4.1 参考文献1王静霞.单片机应用技术.电子工业出版社.2009。2楼然苗.单片机课程设计指导.北京航空航天大学出版社. . 20073周润景.Proteus在MCS-51&ARM7系统中的应用白.例.电子工业出版社.20064.2 仿真图LCD1LM016LHELLO H:I5 +

14、19.Ei L:I5 MQv-zmbgpzHHUJQQQQaaOQO/AD0 1/AD1 2,AD2 &AD8 47AD4 5/AD5 &AD8 7/AD72.0/A82.1/A9 .2/A10 .3/A11.4/A1237小 RP112223-242526=lESRACK-8Xld 1XIAl-5:?三!:arssa2n t1-2WliAS pa-jziAac七4,人口Pff.POX3 r5xa rjxfhTc ianKTi -*nc 必十IT 1javSm X,名rU3三 -AdWES5MaAOOT4CKD4.3代码主函数#mclude#includeHi2c.h#defiiie umt

15、unsigned mt#defiiie uchar unsigned char第4个引脚是RS, 5是RW, 6是ensbit lcdrs=P2人6;数据命令端口sbit lcdnv=P2八5读写端口.我们在这里只写/sbit lcden=P2人7;使能端 口 sbit DQ=P3A7y/dsl8b20 端 口sbit K如P37;温度的上线加sbit K2=P3人2温度的下线减sbit K3=P3八0;上下线切换sbit K4=P3人3;温度的上线加sbit K5=P3%;温度的下线减sbit K6=P3A5;sbitAl=PlAO; 定义步进电机连接端口sbitBl=PlAl;sbitCl

16、=PlA2;sbitDl=PlA3;sbit LSA=P2A2;sbit LSB=P2A3;sbit LSC=P2A4;,v-oid At24c02Write(unsigned char .unsigned char );unsigned char At24cO2Read(unsigned char );#defiiie Coil_Al A1=1:B1=1:C1=O:D1=O;A 相通电,其他相断电#defiiie Coil_Bl A1=O;B1=1;C1=1:D1=O;B 相通电,其他相断电 define Coil_Cl A1=O:B1=O;C1=1:D1=1;C 相通电,其他相断电 def

17、ine Coil_Dl A1=1:B1=O:C1=O:D1=1:/D 相通电,其他相断电 unsigned char Speed;void DelayUs2x(iinsigned char t)(while(-t);)void DelayMs(unsigned char t)wliile(t)(大致延时ImSDelayUs2x(245);DelayUs2x(245);)mt Hweiidu=23 ,Lwendu=20,flag= 1 ,qiehiian;umt temp.TempH,TeinpL;uchar code table 1=Huchar code table2=Munsigned i

18、nt i;void At24cO2Write(imsigned char addrjmsigned char dat) (I2C_Start():I2C_SendByte(0xa0, 1)力发送写器件地址I2C_SendByte(ad#,);发送要写入内存地址I2C_SendByte(dat. 0); 发送数据I2C_StopO;)unsigned char At24cO2Read(unsigned char addr)(misigned char num;I2C_Start():I2C_SendByte(0xa0, 1);发送写器件地址I2C_SendByte(addr, 1):发送要读取的

19、地址I2C_Start():I2C_SendByte(0xaL 1); 发送读器件地址num=I2C_ReadByte0; 读取数据I2C_StopO;renim num;)void delay(umt z)umt x,y;fbr(x=0:xz ;x+)fbr(y=0;y0;i)(DQ = 0;/给脉冲信号dat=l;DQ=1;/给脉冲信号if(DQ)dat|=0x80;delay 1(5);renini(dat);)*/Me*:写一个字节/*,void WnteOiieChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i)(DQ =

20、 0;DQ = dat&OxOl;delay 1(5);DQ=1;dat=l;delay M5);)/Me*;*/读取温度/*,unsigned mt ReadTeinperanire(void) (unsigned char a=0;unsigned mt b=0:unsigned mt t=0;Imt_DS18B20();WriteOneChar(OxCC); /跳过读序号列号的操作WnteOneChar(Ox44); / 启动温度转换delay1(200);Imt_DS18B20();WriteOneChar(OxCC); 跳过读序号列号的操作WnteOneChar(OxBE); 读取温

21、度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar(); 低位b=ReadOneChar(); 高位b=8;t=a+b;retiim(t);)void Tite_com(uchar com)(lcdrs=O;写指令时 RS=Llcden=0;P0=com;给端口送指令delay(5);延时 5MSlcden= 1;使能端高电平有效delay(5);lcden=0;)void yTite_date(uchar date)(lcdrs=l;写数据时 RS=Llcden=0;PO=date;给端口送数据delay(5);延时 5MSlcden= 1;使能端高电平有效delay(5

22、);lcden=0;uchar num;lcdrw=0;写信号拉低lcden=0;使能端拉低write_com(0x3 8);xTite_com(0x0c);开显示/Oe开显示不显示光标write_com(0x06);每写一个地址和光标加一Tite_com(0x01);显示清零mte_com(0x80);第一行的初始地址为0x80for(nimi=0:num 14:num+)循环的数字要看上面的占多少个字符 Tite_date(table 1 num);多了 和少了都不会对的。delay ;wnte_com(0x80+0x40);第二行初始地址为 0x80-0x40fbr(num=0 ;num

23、=99) (Hwendu=99:) while(lKl);) if(K2=0)减delay(20);if(K2=0) (Hweiidu-;DelayMs(l);At24c02 Write(2 Hweiidu); if(Hrendu=99) (Lwendu=99;) while(!Kl);) )if(K2=0)减 (delay(20);if(K2=0) (Lweiidu-;DelayMs(l);At24c02 Wnte(3 .Lweiidu); if(Lwendu=0) Lwendu=0;) while(5Kl);) ) ATite_com(0x80*0x40+10); Tite_date(0x

24、40+12); ATite_date(0x30+10); vrite_date(0x30+Lwendu/l 0); Tite_date(0x30+Lwendu% 10); xTite_date(0xd0+15); write_date(0x40+3);)unsigned mt i;unsigned mt niunO = 4,numl = O.n;char c;void main()(while(l)temp=ReadTemperatuie();温度读取 if(temp&0x8000)判断flag=O;负号标志temp-temp; / 取反加 1temp +=1;)else(teinp=temp

25、;flag=l温度为正标志位1)TempH=temp4;温度高 4 位 Tite_com(0x80*0x40);if(flag=O) writ e_da te (OxB 0); 负号标志elsewrit e_date(0x20+l 1);正号标志.write_com(0x80-0x41);write_date(0x30+TeiiipH/10),显示温度的十位 ATite_date(0x30+TempH% 10);显示温度的各位 TempL=temp&OxOF;TempL=TempL * 6 ;小数近似处理 wnte_com(0x80-0x43);write_date(0x2e); 显示小数点w

26、rite_date(0x30+TempL,l 0),显示温度的小数ATite_date(OxdO+15);xTite_date(0x40+3);key。; 按键扫描DelayMs(l);Hwendu = At24cO2Read(2);DelayMs(l);Lwendu = At24cO2Read(3);ATite_com(0x80);Tite_date(0x40+8);xTite_date(0x40+5);wnte_date(0x40+12);wnte_date(0x40+12);writ e_date(0x40+15);xTite_com(0x80-7);writ e_com(0x80+10

27、);高上线xTite_date(0x40+8);wnte_date(0x30+10);wnte_date(0x30+Hwendu/l 0);writ e_date(0x30+Hwendu%l 0);Tite_date(OxdO+15);write_date(0x40+3);Tite_com(0x80-0x40+10);/氐下线Tite_date(0x40+12);Tite_date(0x30+10);write_date(0x30+Lwendu/l 0);ATite_date(0x30+Lwendu% 10);xTite_date(0xd0+15);write_date(0x40+3);fbr

28、(i=0;i(Hwendu*l 0)&(flag= 1 )温度判断 (if(K3=0)高低线切换delay(20);if(K3=0)(qiehuan=! qiehiian;while(!K3);)Speed=8;Coil_AlDelayMs( Speed);CoiLBlDelayMs(Speed);Coil_ClDelayMs(Speed);CoiLDlDelayMs(Speed);)if(TempH * 10+TempL,l 0)0; b)fbr(a=2; a0; a);)/* 函数名 :I2C_Start()* 函数功能:起始信号:在I2C_SCL时钟信号在高电平期间I2C_SDA信号产生

29、一个下降沿* 输入:无* 输出:无* 备注:起始之后I2C_SDA和I2C_SCL都为0*void I2C_Start()I2C.SDA = 1;I2C_Delayl Ous();I2C SCL=1;I2C_Delayl0us();建立时间是 I2C.SDA 保持时间4.7usI2C.SDA = 0;I2C_Delayl 0us();保持时间是 4usI2C SCL = 0;I2C_Delayl 0us();) /* 函数名:I2C_Stop()* 函数功能:终止信号:在I2C_SCL时钟信号高电平期间I2C_SDA信号产生一个上升沿* 输入:无* 输出:无* 备注:结束之后保持I2C_SDA和I2C_SCL都为1:表示总线空闲*void I2C_Stop()I2C_SDA = 0;I2C_Delayl 0us();I2C.SCL = 1;I2C_Delayl0us();建立时间大于 4.7usI2C.SDA = 1;I2C_Delayl 0us();)/*函数名*函数功能:I2cSendByte(uchar num):通过12c发送一个字If。在I2C_SCL时钟信号高电平期间,*保持发送信号I2C.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论