(参考)基于PIC18F452的温度测量与控制应用系统.docVIP

(参考)基于PIC18F452的温度测量与控制应用系统.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、实验内容 实验的内容是利用APP001开发板实现一个温度测量显示和控制的单片机应用系统,利用APP001开发板上的温度传感器测量温度,通过键盘输入一个稳定设定值,当测量温度高于设定温度时发出声音报警,开启散热风扇开头,并在LCD上显示衬里温度值、设定温度值和散热风扇的开关状态,其中日期和时间利用单片机的定时器来产生,并能通过键盘来设定。通过该实验学习和掌握以下的内容: MPALB开发环境的使用,程序编写和排错及软件仿真 利用MPLAB和ICD2以程序进行在线仿真和调试 使用万用表和示波器等仪器对硬件系统进行测量和调试 PIC18F452单片机的I/O和PWM驱动及编程 PIC18F452单片机LCD和键盘接口及编程方法 PIC18F452的UART编程及与PC机的通讯方法 利用Timer1外接32.768kHz的晶振产生RTC 二、实现方法 采用模块编程、分块调试、之后系统联调的原则。 1、驱动蜂鸣器 APP001开发板上的BUZZER是由RC2控制一个三极管来驱动的,当JP4的跳线开关短路时,RC2管脚输出高电平便会使蜂鸣器发出声音,RC2管脚输出低电平便禁止蜂鸣器发声。 2、散热风扇开关输出控制 实验中利用一个LED来模拟风扇状态,当菜瓜风扇开关打开时,LED被点亮发光,当散热风扇关闭时,LED不发光。开发板上的指示灯D11由RB2控制,低电平亮,高电平来。在代码中通过TRISBbits.TRISB2=0/1来设置输出/输入,通过PORTBbits.RB2来控制管脚输出高低电平。 3.字符LCD APP001开发板配置了一个2*16的字符LCD,它和PIC18F452的接口是RD0-RD3连接到LCD模块的DB4-DB7,用来向LCD模块写入命令和数据,其中DB7可以用来作为LCD模块控制器的忙标志位;RD5是读写控制位;RD4是命令和数据标志位。RD=0时,RD0-RD3是读取和写入数据到LCD的命令寄存器;RD=1时,RD0-RD3读取和写入的是要显示的数据。 4.温度测量 使用模拟温度传感器TC1047A,利用模数转换,将模拟电压转换为数字电压。对应于相应的温度。 5.键盘 使用开发板上的2组按键SW2和SW3 6.串口 波特率19200,8位数据位,无校验,1位停止位。 7. RTC 采用Timer 1外接32.768kHz的晶振可以产生精确的1秒计时,从而实现RTC。 三、硬件结构框图和原理图 硬件结构框图如下: 原理图见附件。 四、软件流程图和部分接口函数及说明 软件流程图如下: 部分函数如下: 1、主函数 void main(void) { char i; for( i=0;i3;i++) dt[i]=0; dt[3]=1; dt[4]=1; dt[5]=0; dt[6]=99; dt[7]=99; cp=0; InitializePORT( ); InitializeINTs( ); InitializeAD( ); InitializeTMR1( ); Initialize_I2C_Master( ); InitializeUSART(); OpenLCD( ); flag=0; while(1) { if (Flagbits.Timer0_Flag) // update Temperature on LCD every 0.4 Sec { Flagbits.Timer0_Flag=0; LCD_Temp_Update ( ) ; // update Temperature send2PC( ); LATDbits.LATD0 = !LATDbits.LATD0 ; } if((PORTBbits.RB0==0)) { Delay10KTCYx(100); flag++; if(flag17) { flag=1; } flag_set(flag); } if(PORTBbits.RB0==1) { Add_value(flag); } if(((T_Buffer/10)=dt[7]) dt[6]/10==0 dt[6]%10==0) { PORTCbits.RC2=1; PORTDbits.RD7=1; } else { PORTCbits.RC2=0; PORTDbits.RD7=0; } } } 2、按键部分函数 flag_set( )函数功能:程序设定RB0为set键,当RB0按下的时候,标志变量flag++,当RB0松开的时候,程序调用

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档