基于AT89S52单片机温度测量的课程设计毕业论文.doc

上传人:h**** 文档编号:130927 上传时间:2018-07-09 格式:DOC 页数:71 大小:635KB
下载 相关 举报
基于AT89S52单片机温度测量的课程设计毕业论文.doc_第1页
第1页 / 共71页
基于AT89S52单片机温度测量的课程设计毕业论文.doc_第2页
第2页 / 共71页
基于AT89S52单片机温度测量的课程设计毕业论文.doc_第3页
第3页 / 共71页
基于AT89S52单片机温度测量的课程设计毕业论文.doc_第4页
第4页 / 共71页
基于AT89S52单片机温度测量的课程设计毕业论文.doc_第5页
第5页 / 共71页
点击查看更多>>
资源描述

1、 JIUJIANG UNIVERSITY 单片机课程设计报告 题 目 温度测量及时钟显示的设计 院 系 电子工程学院 专 业 电气自动化技术 姓 名 宋建军 班 级 学号 39 组 员 荣美静、颜小波 指导教师 丁 文斌 2 目 录 一 、内容提要 - 错误 !未定义书签。 二、设计目的与要求 - 错误 !未定义书签。 2.1设计目的 - 错误 !未定义书签。 2.2设计要求 - 错误 !未定义书签。 三、设计方法步骤及设计原理 - 4 3.1单片机资源分配情况 - 4 3.2系统的工作原理图 - 4 3.3程序流程图 - 5 3.4程序 - 7 四、调试故 障的检测与分析 - 16 五、心得

2、体会 - 16 六、参考文献 - 17 3 基于 AT89S52 单片机温度测量及时钟显示设计 一 、内容提要 本设计 主要 是 温度测量及时钟显示 的设计 ,由单片机 AT89S52 芯片和DS18B20 芯片及 1602 液晶显示 为核心,辅以必要的电路来设计制作完成 。 它是低功耗、高性能的 CMOS 型 8 位单片机。片内带有 4KB 的 Flash 存储器 ,且允许在系统内改写或用编程器编程。另外 , AT89S52 的指令系统和引脚与 51 完全兼容 ,片内有 128B 的 RAM、 32 条 I/O 口线、 2 个 16 位定时计数 器、 5 个中断源、一个全双工串行口等。由于其

3、功能的实现主要通过软件编程来完成 ,降低了硬件电路的复杂性 ,而且其成本也有所降低 ,所以在该设计中采用单片机利用AT89S52。并且 AT89S52 单片机结合 1602 液晶 显示器 的 设计 ,在显示方面比数码管更简单,不用送段码和位码只需键入所要输出的数字或单词即可 。 二、设计目的与要求 2.1 设计目的 进一步掌握单片机的原理及其功能。学会利用单片机做一些简单的电子设计与制作 。 熟悉 DS18B230 温度传感器的作用及其原理,会利用其进行温度的测量。 熟悉 1602 液晶显示的内部结构 原理及其相关的技术参数。 通过此次的电路焊接和调试提高自己的动手及其分析问题的能力。 2.2

4、 设计要求 .设计内容包括了秒信号发生器、时间显示电路、 温度检测电路、 供电电源以及闹铃指示电路等几部分的设计。 根据内容画出相应的电路图,再利用 c 语言编写出相应的程序 。 .编写完程序后,进行实物的焊接,将程序烧写到单片机上,最后进行调试。 2.3 系统的主要功能 4 通过 DS18B20 进行温度的测量,再由一条 I/0 数据端口与单片机进行通信,最后将结果显示在 1602 液晶显示屏上,实现温度检测的功能, 该系统还设有报警功能 ,当环境的温度超过我们设计的温度就将报警,红灯闪烁,蜂鸣器开始报警 ,以提醒人们温度过高。 另外在单片机上编写一个时钟程序同时在显示器上显示出来,实现时钟

5、显示的功能。 小组分工情况 荣美静主要负责软件部分,主要工作是编写程序,画电路图。宋建军主要负责焊接电 路,颜小波主要负责报告的撰写,一起完成了本次课程设计的任务。 三 、 设计方法步骤及设计原理 3.1 单片机资源分配情况 AT89S52 单片机的 p3.7 口接 DS18B20 的 I/0 数据端口, p2.0、 p2.1、 p2.2 口分别接 1602 的数据 /命令选择端( RS)、读写选择端( R/W)、使能信号端( E) ; p3.0 接报警信号 ;p1.0、 p1.1、 p1.2 接三个按钮用来调节时钟; p0.0p0.7 分别接液晶显示器的 D0D7。 3.2 系统的工作原理图

6、 5 基本框图如下: 3.3 程序流程图 如下 : DS18B20 传感器 AT89S52 芯片 复位电路 LED 灯报警电路 液晶显示电路 6 显示子程序 元器件清单表 名称 型号 数量 芯片 AT89S2 1 7 测温芯片 DS18b20 1 液晶显示器 1602 1 蜂鸣 器 Buzzer 1 电阻 3305K4.7K 各一个 排阻 Lok 2 二极管 红色 1 按钮 3 插槽 1440 各二个 电路板 1 光敏二极管 1 晶振 11.0592 1 电容 30PF 1 电解电容 10U 1 电源 5V 1 3.4 程序如下: #include #define uchar unsigned

7、 char #define LCD_DATA P0 sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; sbit LCD_busy=P07; sbit Tempuredataline=P37; sbit key1=P10; sbit key2=P11; sbit key3=P12; sbit ming=P30; uchar shi,fen, miao,count,flag,i,j,k; /复位 18B20 bit Reset18B20(void) uchar i; bit Tempurelinerest; Tempuredataline=0; f

8、or(i=255;i0;i-);/ /延时约 500us Tempuredataline=1;/释放总线 for(i=50;i0;i-); /延时约 100us Tempurelinerest=Tempuredataline;/把 18B20d 数据给零时变量 for(i=190;i0;i-);/延时约 400Ms 8 return(Tempurelinerest); /写指令 void write_18B20com(uchar shuju ) uchar i,j; for(i=0;i0;j-);/延时约 2us Tempuredataline=( shuju for(j=30;j0;j-);

9、/延时约 60us shuju=1; Tempuredataline=1; uchar read18B20() uchar i,j,temp=0; for(i=0;i=1; /延时 2s Tempuredataline=1;/释放总线 for(j=4;j0;j-); /延时 8us if(Tempuredataline) temp|=0x80; for(j=30;j0;j-) ;/延时 60us return(temp); uchar readtempure(void) uchar tempH,tempL; tempL=read18B20();/先读出低八位的数据 tempH=read18B2

10、0();/再读出高八位的数据 tempH=4; / 1111 温度的整数 温度的小数 tempH|=tempL; /0000xxxx|xxxx0000 return(tempH); void chek_busy(void)/检测 LCD 是否在忙 while(1) LCD_E=0; 9 LCD_RS=0; LCD_RW=1; LCD_DATA=0xff; LCD_E=1; if(! LCD_busy)break; LCD_E=0; void delay(int z) /延时子程序 int x,y; for(x=z;x0;x-) for(y=110;y0;y-); void write_com(

11、uchar com) /写指令 chek_busy(); LCD_RS=0; LCD_RW=0; LCD_DATA=com; LCD_E=1; LCD_E=0; void write_data(uchar data1) /输出一个字符 chek_busy(); LCD_RS=1; LCD_RW=0; LCD_DATA=data1; LCD_E=1; LCD_E=0; void write_datas(uchar *datas) /输出一个字符串 uchar i=0; chek_busy(); while(datasi!=0x00) chek_busy(); write_data(datasi)

12、; i+; 10 void LCD_initial(void) /chek_busy(); write_com(0x38); /显示两行 write_com(0x0e);/显示开 ,显示光标 并且光标不闪烁 write_com(0x06);/AC 自动加一 write_com(0x01);/清屏 /write_com(0x80);/ 光标在第一行第一个位置 /write_datas(“ 2010-6-8 JUAE“); /delay(100); /write_com(0x80+0x40); /write_datas(“ 23:58:55“); TMOD=0X01; TR0=1; EA=1; E

13、S=1; ET0=1; TH0=0X3C; TL0=0XB0; void changetime(uchar add,uchar datasfm) /中断使得时间改变 uchar shiwei,gewei; shiwei=datasfm/10; gewei=datasfm%10; write_com(0x80+0x40+add); write_data(48+shiwei); write_data(48+gewei); void keyscan(void)/按键扫描 key1为光标闪烁 key2为使得光标所在的数据加 1 key3 为使得光标所在的数据减 1。 if(key1=0) delay(20); if(key1=0) TR0=0; flag+; while(!key1); switch(flag) case 1: write_com(0x80+0x40+7); write_com(0x0f); break; case 2: write_com(0x80+0x40+4) ; break;

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。