温度仪控制_课程设计报告.doc_第1页
温度仪控制_课程设计报告.doc_第2页
温度仪控制_课程设计报告.doc_第3页
温度仪控制_课程设计报告.doc_第4页
温度仪控制_课程设计报告.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

温度显示仪摘要:本设计采用LCD液晶屏幕显示系统,以AT89C52单片机为核心,温度采集功能模块组成。本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,硬件少、系统稳定性大大提高,实现了温度采集并显示。关键字:AT89C52单片机、LCD液晶显示、温度传感器。 一、设计题目.1二、系统实现框图和硬件清单.2三、设计原理图.3四、软件流程图和软件清单.5五、试验中遇到的问题.11六、实验体会与总结.12参考文献.13一、设计题目1、 题目:温度显示仪2、 设计原理说明:温度计在现实生活中有着广泛的作用,如室内、实验室等。本设计应用单片机最小系统,配上少数的外部元件,构成一个简单的精度为3位度的温度显示仪。本次设计主要是为了掌握利用单片机设计实用电路的方法。设计任务:(1)、实现现场温度采集;(2)、实现温度在LCD上的显示;(3)、使用一个按键实现复位。二、系统实现框图和硬件清单 1、系统实现框图:2、元器件参数列表: 1、AT89S52芯片 :一片2、1602液晶显示器 :一片3、18B20温度传感器 :一个4、电阻1K和5.1K :各一个5、瓦片电容30pF 2个,极性电容22uF一个6、交流220V转直流5V电源3、18B20温度传感器引脚图:4、1602液晶显示器引脚图:三、设计原理图Protues仿真图实物图:四、软件流程图和软件清单 温度测量流程图如图11所示: 图11 温度测量程序流程图软件清单:主程序:#include #include #define uchar unsigned char#define uint unsigned intsbit DQ = P33 ; /定义DS18B20端口DQ bit presence ; /检测18b20是否插好sbit LCD_RS = P20 ; sbit LCD_RW = P21 ;sbit LCD_EN = P22 ;uchar code cdis1 = XIAN ZAI ; uchar code cdis2 = WENDU: . C ;uchar code cdis3 = DS18B20 ERR0R ;uchar code cdis4 = PLEASE CHECK ;unsigned char data temp_data2 = 0x00,0x00 ;unsigned char data display5 = 0x00,0x00,0x00,0x00,0x00 ;unsigned char code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 ; unsigned char code mytab8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00 ;#define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ;/*/void delay1(int ms) unsigned char y ; while(ms-) for(y = 0 ; y250 ; y+) _nop_() ; _nop_() ; _nop_() ; _nop_() ; /*检查LCD忙状态 */*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */*/ bit lcd_busy() bit result ; LCD_RS = 0 ; LCD_RW = 1 ; LCD_EN = 1 ; delayNOP() ; result = (bit)(P0&0x80) ; LCD_EN = 0 ; return(result) ; /*写指令数据到LCD */*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */*/void lcd_wcmd(uchar cmd) while(lcd_busy() ; LCD_RS = 0 ; LCD_RW = 0 ; LCD_EN = 0 ; _nop_() ; _nop_() ; P0 = cmd ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; /*写显示数据到LCD */void lcd_wdat(uchar dat) while(lcd_busy() ; LCD_RS = 1 ; LCD_RW = 0 ; LCD_EN = 0 ; P0 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; /* LCD初始化设定 */void lcd_init() delay1(15) ; lcd_wcmd(0x01) ; /清除LCD的显示内容 lcd_wcmd(0x38) ; /16*2显示 delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x0c) ; /显示开,关光标 delay1(5) ; lcd_wcmd(0x06) ; /移动光标 delay1(5) ; lcd_wcmd(0x01) ; /清除LCD的显示内容 delay1(5) ;/* 设定显示位置 */void lcd_pos(uchar pos) lcd_wcmd(pos | 0x80) ; /数据指针=80+地址变量/*自定义字符写入CGRAM */void writetab() unsigned char i ; lcd_wcmd(0x40) ; /写CGRAM for (i = 0 ; i 0 ; i-) DQ = 0 ; / 给脉冲信号 dat = 1 ; DQ = 1 ; / 给脉冲信号 if(DQ) dat |= 0x80 ; Delay(4) ; return (dat) ;/* 写一个字节 */ WriteOneChar(unsigned char dat) unsigned char i = 0 ; for (i = 8 ; i 0 ; i-) DQ = 0 ; DQ = dat&0x01 ; Delay(5) ; DQ = 1 ; dat=1 ; /* 读取温度 */ Read_Temperature(void) Init_DS18B20() ; WriteOneChar(0xCC) ; / 跳过读序号列号的操作 WriteOneChar(0x44) ; / 启动温度转换 Init_DS18B20() ; WriteOneChar(0xCC) ; /跳过读序号列号的操作 WriteOneChar(0xBE) ; /读取温度寄存器 temp_data0 = ReadOneChar() ; /温度低8位 temp_data1 = ReadOneChar() ; /温度高8位 /* 数据转换与温度显示 */ Disp_Temperature() display4=temp_data0&0x0f ; display0=ditabdisplay4+0x30 ;/查表得小数位的值 display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4) ; display3=display4/100+0x30 ; display1=display4%100 ; display2=display1/10+0x30 ; display1=display1%10+0x30 ; if(display3=0x30) /高位为0,不显示 display3=0x20 ; if(display2=0x30) /次高位为0,不显示 display2=0x20 ; lcd_pos(0x48) ; lcd_wdat(display3) ; /百位数显示 lcd_pos(0x49) ; lcd_wdat(display2) ; /十位数显示 lcd_pos(0x4a) ; lcd_wdat(display1) ; /个位数显示 lcd_pos(0x4c) ; lcd_wdat(display0) ; /小数位数显示 /* DS18B20 OK 显示菜单 */void Ok_Menu () uchar m ; lcd_init() ; /初始化LCD lcd_pos(0) ; /设置显示位置为第一行的第1个字符 m = 0 ; while(cdis1m != 0) /显示字符 lcd_wdat(cdis1m) ; m+ ; lcd_pos(0x40) ; /设置显示位置为第二行第1个字符 m = 0 ; while(cdis2m != 0) lcd_wdat(cdis2m) ; /显示字符 m+ ; writetab() ; /自定义字符写入CGRAM delay1(5) ; lcd_pos(0x4d) ; lcd_wdat(0x00) ; /显示自定义字符/* DS18B20 ERROR 显示菜单 */void Error_Menu () uchar m ; lcd_init() ; /初始化LCD lcd_pos(0) ; /设置显示位置为第一行的第1个字符 m = 0 ; while(cdis3m != 0) /显示字符 lcd_wdat(cdis3m) ; m+ ; lcd_pos(0x40) ; /设置显示位置为第二行第1个字符 m = 0 ; while(cdis4m != 0) lcd_wdat(cdis4m) ; /显示字符 m+ ; /* 主函数 */void main() Ok_Menu () ; do Read_Temperature() ; /读取温度 Disp_Temperature() ; /显示温度 while(!presence) ; Error_Menu () ; do Init_DS18B20() ; while(presence) ;头文件:intrins.h#ifndef _INTRINS_H_#define _INTRINS_H_extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long, unsigned char);extern unsigned char _chkfloat_(float);extern void _push_ (unsigned char _sfr);extern void _pop_ (unsigned char _sfr);#endif五、试验中遇到的问题1、硬件电路布局不合理导致焊线有问题2、LCD液晶显示亮度调节问题3、程序调节比较麻烦六、实验体会与总结通过这个课程的设计,学会了用C语言写单片机程序的简单方法,同时也锻炼我们使用仪器和计算机、单片

温馨提示

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

评论

0/150

提交评论