《电子装置课程设计报告温度检测系统设计.doc》由会员分享,可在线阅读,更多相关《电子装置课程设计报告温度检测系统设计.doc(11页珍藏版)》请在三一办公上搜索。
1、 设计题目:温度检测系统设计一、实验内容1、 利用板载模拟温度传感器TC1047A实现一温度采集系统;2、 间隔1-5s采集一次(步进1 s,可以预设),在液晶屏第一行显示连续的3个采集温度值;3、 当最新采集的温度大于这三个温度的平均值温度1时,蜂鸣器报警,当温度降低后,解除报警;4、 记录报警次数,在LCD上显示,,并将结果存入24LC024。二、 电路原理图以及各功能模块的工作原理1、驱动蜂鸣器APP001开发板上的BUZZER是由RC2控制一个三极管来驱动的,当JP4的跳线开关短路时,RC2管脚输出高电平便会使蜂鸣器发出声音,RC2管脚输出低电平便禁止蜂鸣器发声。2.字符LCDAPP0
2、01开发板配置了一个2*16的字符LCD,它和PIC18F452的接口是RD0-RD3连接到LCD模块的DB4-DB7,用来向LCD模块写入命令和数据,其中DB7可以用来作为LCD模块控制器的忙标志位;RD5是读写控制位;RD4是命令和数据标志位。RD=0时,RD0-RD3是读取和写入数据到LCD的命令寄存器;RD=1时,RD0-RD3读取和写入的是要显示的数据。3.温度测量使用模拟温度传感器TC1047A,利用模数转换,将模拟电压转换为数字电压。对应于相应的温度。4.键盘使用开发板上的2组按键SW2和SW35. RTC采用Timer 1外接32.768kHz的晶振可以产生精确的1秒计时,从而
3、实现RTC。6.24LC0247LCD、LED&ADC按键读取三、主要函数程序流程图1.Main函数流程图2.LCD_EEPROM 更新3.温度比较和蜂鸣器四、实验主要源码(1)Main函数:void main(void)int AlarmNum;/*首先初始化*/ InitializePORT( );InitializeINTs( );InitializeAD( ); InitializeTMR1( ); Initialize_I2C_Master( );/*lcd初始化*/ OpenLCD( );while(1) Key_Press_Check();if (Flagbits.Timer1_
4、Flag)/ update Temperature on LCD every 1 SecFlagbits.Timer1_Flag=0;get_key_flag+;if(get_key_flag=Time_count)get_key_flag=0;LCD_Temp_Update() ;/ update TemperatureTemp_Compare(); (2)读取温度:int Read_TC1047_Temperature(void)intAD_Temp;ADCON0bits.CHS0=1;for (AD_Temp=0;AD_Temp5;AD_Temp+);ADCON0bits.GO=1;/
5、Start to convert the A/Dwhile(ADCON0bits.GO);/ Waiting A/D until doneAD_Temp = ReadADC( );/ Get 10 bits A/D resultreturn AD_Temp;(3)LCD_EEPROM 更新void LCD_Temp_Update (void)int i;LCD_Set_Cursor(0,0);/ 清理lcd for (i=0;i16;i+)putcLCD( );/*显示第一个温度值*/LCD_Set_Cursor(0,0);/定位光标T2_buffer0=T2_buffer1;/从后面向前传递
6、温度参数 if(T2_buffer0!=0)/如果是零,不要显示 Buffer_LCD(T2_buffer0);LCD_Set_Cursor(0,4);/定位光标 putcLCD(0xDF);/显示 ”度 “ 这个标志 /*显示第二个温度值*/LCD_Set_Cursor(0,5); if(T2_buffer1!=0)Buffer_LCD(T2_buffer1);LCD_Set_Cursor(0,9);putcLCD(0xDF);/*显示第三个温度值*/LCD_Set_Cursor(0,10);T2_buffer2=T2_buffer3;if(T2_buffer2!=0)Buffer_LCD(
7、T2_buffer2);LCD_Set_Cursor(0,14);putcLCD(0xDF);T2_Buffer=Read_TC1047_Temperature( );/ Get Current Temperature from TC1047AT2_buffer3=T2_Buffer; EEPROM.Word=EERandomRead(0xA0,0x30);/显示累积温度报警次数 LCD_Set_Cursor(1,13);NUM=EEPROM.Byte0;itoa(EEPROM.Byte0,ASCII_String);putsLCD(ASCII_String);/显示当次温度报警次数LCD_S
8、et_Cursor(1,11);itoa(alarm_count,ASCII_String);putsLCD(ASCII_String);EEByteWrite(0xA0, 0x30, (NUM+NUMN);EEAckPolling(0xA0);NUMN=0;(4) 温度比较和蜂鸣器void Temp_Compare(void)int i,range;unsigned int alarm_value=0;/当所有的温度采集完毕之后 才能正常比较 if(T2_buffer0!=0)for(i=0;i(range+0x000A)/温度值超过告警值时报警PORTCbits.RC2=1;/开蜂鸣器PO
9、RTDbits.RD7=1;/点LED D8alarm_count+;NUMN+;else PORTCbits.RC2=0;/观蜂鸣器PORTDbits.RD7=0;/关 LED D8/T2_Buffer_Flag=1;(5) 按键查询void Key_Press_Check(void)if(!SW2)PIE1bits.TMR1IE=0;Delay10KTCYx(100);if(Time_count4)Time_count=1;elseTime_count+;PIE1bits.TMR1IE=1;if(!SW3)EEByteWrite(0xA0, 0x30, 0);EEAckPolling(0x
10、A0);LCD_Set_Cursor(1,13);putcLCD( ) ;LCD_Set_Cursor(1,14);putcLCD( ) ;LCD_Set_Cursor(1,15);putcLCD( ) ;LCD_Set_Cursor(1,6);WriteDataLCD(T);LCD_Set_Cursor(1,7);WriteDataLCD(=);LCD_Set_Cursor(1,8);itoa(Time_count,ASCII_String);putsLCD(ASCII_String);LCD_Set_Cursor(1,9);WriteDataLCD(s);五、心得体会 通过本次实验,我学会
11、了温度检测系统,整个过程如下:首先利用传感器去采集温度,接着将采集过来的温度通过一定的公式转化成电压,然后又通过一定的公式将其转化成电路板上合适的电压值,用AD将其进行编码,最后将其转化成温度显示出来。 接着讲讲主程序的编写主要包括以下部分:首先是程序的初始化,接着跳入循环while(1)中,接着调用Key_Press_Check()对按键进行判断,如果有按键按下则处理按键,然后判断中断,若达到所规定的时间,则更新温度,并将中断次数写入EPROM中,最后在采集完三次温度之后,可以用Temp_Compare()函数进行温度比较,如果温度高于三次温度的平均值,则进行报警。整个过程是采用模块编程、分块调试、之后系统联调的原则。通过本次实验,我觉得.自己学到了很多东西,以后应该会进一步去学习。