单片机温度测试报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩:《单片机应用实践》报告
专业:通信工程
学号:
姓名:
指导老师:
福州大学阳光学院电子信息工程系
一.设计目的与意义
随着现代信息技术的飞速发展和传统工业改造的逐步实现,能够独立工作的温度检测和显示系统应用于诸多领域。无论是在工业方面,农业方面或者是平民大众的生活当中,我们都能看到温度计的身影。
传统的温度检测以热敏电阻和AD590为温度敏感元件。热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差。测温准确度低,检测系统也有一定的误差。因此,利用新型温度传感器取代旧式的温度传感器是必然的趋势,新型的温度传感器的优势越来越得到体现,越来越普及。单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用的器件,尤其在日常生活中也发挥越来越大的作用。
本设计的温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,测温传感器使用
DS18B20,LCD以串口传送数据,实现温度显示,能准确达到以上要求。同时计时器的应用,使得温度计在使用时能够提示运行时间,设置报警时间等。
二.设计的主要功能
(1)功能1,采集一路温度信号,温度范围为0~100℃,温度传感器可采用DS18B20,采集的数据系统自动存储并显示,温度显示精确到小数一位,
温度超限自动报警。
(2)功能2,方波信号输出,输出波形的频率范围为1Hz~1kHz,频率可调,输出波形幅度范围固定5V。
(3)按键操作功能,按键切换功能1和功能2。
(4)采用多位数码管或LCD显示,显示当前温度值或当前方波频率。
三.硬件设计
1、设计系统框图如下图:
图1-1 系统框图
利用AT89S52芯片控制温度传感器DS18B20进行实时温度检测并显示,同时当LCD液晶显示器接收到来自AT89S52单片机传送来的温度信息后,分别显示了当前的温度,温度上限,温度下限。
2、AT89S52的引脚如图4-1所示:
图1-2 AT89S52单片机引脚图
3、晶振电路
在晶振电路中,主要用到了XTAL1和XTAL2两个引脚。
(1)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
(2)XTAL2:来自反向振荡器的输出。
在晶振电路中,AT89S52具有两种晶振方式,一种是片内时钟振荡方式,但需要在引脚外接石英晶体和振荡电容,振荡电容的值一般取10-30pf。另一种是外部时钟方式,即将XTAL1接外部时钟,XTAL2脚悬空。本设计的晶振电路如图1-3所示。
图1-3 晶振电路
4、温度采集电路
温度控制电路主要运用到了DS18B20和AT89S52。如何使两者连接实现功能是温度控制电路的主要设计目的。
图1-4 DS18B20管脚图
在硬件上,DS18B20与单片机的连接有两种方法,一种是VCC接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O。内部寄生电源I/O口线要接5KΩ左右的上拉电阻。这里采用的是第一种连接方法,如图图1-5所示:
图1-5 温度采集电路
传感器数据采集电路主要指DS18B20温度传感器与单片机的接口电路。DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式考虑到实际应用中寄生电源供电方式适应能力差且易损坏,此处采用电源供电方式,I/O口接单片机的P1.3口。
5、液晶显示电路
液晶显示器是一种将液晶显示器件,连接器件,集成电路,PCB线路板,背光源,结构器件装配在一起的组件。
在显示电路中,VSS接地,VDD接5V正电源, VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,为了获得最佳对比度,VEE接地。
图1-6 液晶显示电路图6、报警电路和按键电路
图1-7 报警电路
图1-8 按键电路
四.软件设计
1、流程图
图5-1 主程序流程2、主要程序
(1)、管脚定义
#define KeyPort P3 //定义按键端口
bit ReadTempFlag;//定义读时间标志
sbit SPK=P1^2; //定义喇叭端口
sbit led = P2^0; //管脚定义
sbit led0 = P1^0; //管脚定义
sbit KEY=P3^4; //定义按键输入端口
unsigned char count=0; //定义变量
void Init_Timer0(void);//定时器初始化
unsigned char KeyScan(void);//键盘扫描
(2)、串口通讯初始化
void UART_Init(void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; // TH1: 重装值 9600 波特率晶振11.0592MHz
TR1 = 1; // TR1: timer 1 打开
//EA = 1; //打开总中断
//ES = 1; //打开串口中断
TI=1;
}
(3)、初始化液晶
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
Init_Timer0();
UART_Init(); //UART:是一种通用串行数据总线,用于异步通信。Init:初始化
Lcd_User_Chr(); //写入自定义字符
LCD_Write_Char(7,0,'h'); //LCD第1行第7列显示h
LCD_Write_Char(8,0,'a');
LCD_Write_String(1,1,"welcome"); //LCD第2行第1列开始显示welcome
{ KEY=1; //按键输入端口电平置高(KEY=3^4)开始工作按钮
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
Init_Timer0(); //初始化定时器
UART_Init();
Lcd_User_Chr(); //写入自定义字符
LCD_Write_Char(7,0,'h');
LCD_Write_Char(8,0,'a');
LCD_Write_String(1,1,"welcome");
(4)、温度上限下限
switch(TempFlag)
{
case 0: //输出温度上限下限
sprintf(displaytemp,"H.%3d L.%3d ",tempH,tempL);