电子装置课程设计报告.docx

上传人:b****8 文档编号:27871851 上传时间:2023-07-05 格式:DOCX 页数:14 大小:442.31KB
下载 相关 举报
电子装置课程设计报告.docx_第1页
第1页 / 共14页
电子装置课程设计报告.docx_第2页
第2页 / 共14页
电子装置课程设计报告.docx_第3页
第3页 / 共14页
电子装置课程设计报告.docx_第4页
第4页 / 共14页
电子装置课程设计报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

电子装置课程设计报告.docx

《电子装置课程设计报告.docx》由会员分享,可在线阅读,更多相关《电子装置课程设计报告.docx(14页珍藏版)》请在冰豆网上搜索。

电子装置课程设计报告.docx

电子装置课程设计报告

电子装置课程设计报告

浙江理工大学

电子装置课程设计

 

班级:

08电子信息实验班

学号:

Q08610110

姓名:

周慧

指导老师:

陈科

2010~2011第二学期

设计题目:

温度检测系统设计

一、实验内容

1、利用板载模拟温度传感器TC1047A实现一温度采集系统;

2、间隔1--5s采集一次(步进1s,可以预设),在液晶屏第一行显示连续的3个采集温度值;

3、当最新采集的温度大于这三个温度的平均值温度1℃时,蜂鸣器报警,当温度降低后,解除报警;

4、记录报警次数,在LCD上显示,,并将结果存入24LC024。

二、电路原理图以及各功能模块的工作原理

1、驱动蜂鸣器

APP001开发板上的BUZZER是由RC2控制一个三极管来驱动的,当JP4的跳线开关短路时,RC2管脚输出高电平便会使蜂鸣器发出声音,RC2管脚输出低电平便禁止蜂鸣器发声。

2.字符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读取和写入的是要显示的数据。

3.温度测量

使用模拟温度传感器TC1047A,利用模数转换,将模拟电压转换为数字电压。

对应于相应的温度。

4.键盘

使用开发板上的2组按键SW2和SW3

5.RTC

采用Timer1外接32.768kHz的晶振可以产生精确的1秒计时,从而实现RTC。

6.24LC024

 

7.LCD、LED&ADC按键读取

 

三、主要函数程序流程图

1.Main函数流程图

 

 

2.LCD__EEPROM更新

 

3.温度比较和蜂鸣器

 

四、实验主要源码

(1)Main函数:

voidmain(void)

{

intAlarmNum;

/*首先初始化*/

InitializePORT();

InitializeINTs();

InitializeAD();

InitializeTMR1();

Initialize_I2C_Master();

/*lcd初始化*/

OpenLCD();

while

(1)

{

Key_Press_Check();

if(Flagbits.Timer1_Flag)//updateTemperatureonLCDevery1Sec

{

Flagbits.Timer1_Flag=0;

get_key_flag++;

if(get_key_flag>=Time_count)

{

get_key_flag=0;

LCD_Temp_Update();//updateTemperature

Temp_Compare();

}

}

}

}

(2)读取温度:

intRead_TC1047_Temperature(void)

{intAD_Temp;

ADCON0bits.CHS0=1;

for(AD_Temp=0;AD_Temp<5;AD_Temp++);

ADCON0bits.GO=1;//StarttoconverttheA/D

while(ADCON0bits.GO);//WaitingA/Duntildone

AD_Temp=ReadADC();//Get10bitsA/Dresult

returnAD_Temp;

}

(3)LCD__EEPROM更新

voidLCD_Temp_Update(void)

{

inti;

LCD_Set_Cursor(0,0);//清理lcd

for(i=0;i<16;i++)putcLCD('');

/****显示第一个温度值******/

LCD_Set_Cursor(0,0);//定位光标

T2_buffer[0]=T2_buffer[1];//从后面向前传递温度参数

if(T2_buffer[0]!

=0)//如果是零,不要显示

{

Buffer_LCD(T2_buffer[0]);

LCD_Set_Cursor(0,4);//定位光标

putcLCD(0xDF);//显示”度“这个标志

}

/****显示第二个温度值******/

LCD_Set_Cursor(0,5);

if(T2_buffer[1]!

=0)

{

Buffer_LCD(T2_buffer[1]);

LCD_Set_Cursor(0,9);

putcLCD(0xDF);

}

/****显示第三个温度值******/

LCD_Set_Cursor(0,10);

T2_buffer[2]=T2_buffer[3];

if(T2_buffer[2]!

=0)

{

Buffer_LCD(T2_buffer[2]);

LCD_Set_Cursor(0,14);

putcLCD(0xDF);

}

T2_Buffer=Read_TC1047_Temperature();//GetCurrentTemperaturefromTC1047A

T2_buffer[3]=T2_Buffer;

EEPROM.Word=EERandomRead(0xA0,0x30);

//显示累积温度报警次数

LCD_Set_Cursor(1,13);

NUM=EEPROM.Byte[0];

itoa(EEPROM.Byte[0],ASCII_String);

putsLCD(ASCII_String);

//显示当次温度报警次数

LCD_Set_Cursor(1,11);

itoa(alarm_count,ASCII_String);

putsLCD(ASCII_String);

EEByteWrite(0xA0,0x30,(NUM+NUMN));

EEAckPolling(0xA0);

NUMN=0;

}

(4)温度比较和蜂鸣器

voidTemp_Compare(void)

{

inti,range;

unsignedintalarm_value=0;

//当所有的温度采集完毕之后才能正常比较

if(T2_buffer[0]!

=0)

{

for(i=0;i<=2;i++)

{

alarm_value+=T2_buffer[i];

}

range=alarm_value/3.0;

LCD_Set_Cursor(1,0);

Buffer_LCD(range);

LCD_Set_Cursor(1,4);

putcLCD(0xDF);

if((T2_Buffer)>(range+0x000A))//温度值超过告警值时报警

{

PORTCbits.RC2=1;//开蜂鸣器

PORTDbits.RD7=1;//点LEDD8

alarm_count++;

NUMN++;

}

else

{

PORTCbits.RC2=0;//观蜂鸣器

PORTDbits.RD7=0;//关LEDD8

//T2_Buffer_Flag=1;

}

}

}

(5)按键查询

voidKey_Press_Check(void)

{

if(!

SW2)

{

PIE1bits.TMR1IE=0;

Delay10KTCYx(100);

if(Time_count>4)

{

Time_count=1;

}

else

Time_count++;

PIE1bits.TMR1IE=1;

}

 

if(!

SW3)

{

EEByteWrite(0xA0,0x30,0);

EEAckPolling(0xA0);

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');

}

五、心得体会

通过本次实验,我学会了温度检测系统,整个过程如下:

首先利用传感器去采集温度,接着将采集过来的温度通过一定的公式转化成电压,然后又通过一定的公式将其转化成电路板上合适的电压值,用AD将其进行编码,最后将其转化成温度显示出来。

接着讲讲主程序的编写主要包括以下部分:

首先是程序的初始化,接着跳入循环while

(1)中,接着调用Key_Press_Check()对按键进行判断,如果有按键按下则处理按键,然后判断中断,若达到所规定的时间,则更新温度,并将中断次数写入EPROM中,最后在采集完三次温度之后,可以用Temp_Compare()函数进行温度比较,如果温度高于三次温度的平均值,则进行报警。

整个过程是采用模块编程、分块调试、之后系统联调的原则。

通过本次实验,我觉得.自己学到了很多东西,以后应该会进一步去学习。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1