单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示

上传人:aa****6 文档编号:38356979 上传时间:2018-05-01 格式:DOC 页数:18 大小:334.50KB
返回 下载 相关 举报
单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示_第1页
第1页 / 共18页
单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示_第2页
第2页 / 共18页
单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示_第3页
第3页 / 共18页
单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示_第4页
第4页 / 共18页
单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示》由会员分享,可在线阅读,更多相关《单片机课程设计--基于pic16f877单片机与ds18b20的温度采集与显示(18页珍藏版)》请在金锄头文库上搜索。

1、PIC 单片机课程设计单片机课程设计学生姓名: 学 号: 学 部:信息科学技术部专业班级: 电信 1 指导教师: 2014 年 7 月 4 日单片机课程设计报告- 1 -一、课程设计目的一、课程设计目的本课程设计是在PIC单片机原理及应用及单片机C语言编程课程的基础上,通过硬件设计、软件编程及仿真调试的实践,进一步掌握PIC单片机的应用方法,熟练掌握PICC C语言程序的编写与调试,是毕业设计前的一次重要实践实践,为今后走上工作岗位打下坚实的单片机应用基础。单片机课程设计报告- 2 -二、二、设计题目及要求设计题目及要求2.1 设计题目:基于基于PIC16F877PIC16F877单片机与单片

2、机与DS18B20DS18B20的温度采集与显示的温度采集与显示2.2 功能实现:实时温度显示,并具有超限报警功能。输出显示采用LCD1602。2.3 设计要求:自己设计硬件和程序编程,画出完整的电路原理图,用Multisim或Proteus仿真,最终可实现脱机运行。单片机课程设计报告- 3 -三、设计原理说明三、设计原理说明3.2 显示模块如用LCD1602作为显示设备,要求显示屏分两行显示,第一行显示日期(年-月-日)和星期,第二行显示时间(时:分:秒)和温度。显示秒由00一直加到59,分钟数也由00加到59,小时采用24小时制,由00加到23,如此循环显示。3.3 按键模块按键用来作为时

3、间调整。要求至少设计4个按键,按键1作为设置键;按键2、按键3分别为增加、减少键,在设置键按下时,此两个按键方有效;按键4是确定键,在设置键按下时方才有效。3.4 温度采集模块DS18B20是美国DALLAS公司推出的单总线数字温度传感器。DS18B20内部集成了温敏元件、数据转换芯片、存储器芯片和计算机接口芯片等多功能模块。其主要技术特点有:具有独特的单线接口方式;可以通过数据线供电,具有超低功耗工作方式;测温范围为-55125,测温精度为0.5;温度转换精度912位可编程,直接将温度转换值以二进制数码的方式串行输出。单片机课程设计报告- 4 -四、硬件原理图四、硬件原理图(含原理图、电路仿

4、真图)图 2 电路仿真图单片机课程设计报告- 5 -五、软件设计五、软件设计(含流程图、带注释的程序清单)程序设计流程图是初始化picLcd,ds18b20否是否为正数Ds18b20 复位, 是否应答验证,开始温度转换并读取显示取补码,加 1否是单片机课程设计报告- 6 -主文件主文件 hehe/*/#include_CONFIG(0x3B31);/芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M 晶体 HS 振荡/宏定义#define DQ RC1 /温度数据口#define DQ_HIGH() TRISC1=1#define DQ_LOW() TRISC1=0;DQ=0

5、#define uchar unsigned char#define uint unsigned int单片机课程设计报告- 7 -#define RS RA0 /LCD 功能选择位#define RW RA1 /读写选择#define EN RA2 /使能/变量定义int temper;char f = 0 ;uchar a1,a2,a3,a4;uchar Prompt=“P1ress K1 - K3 To Start Demo Prog“;/各种申明void init();void DelayMS(uint ms);uchar Busy_Check();void Write_LCD_Com

6、mand(uchar cmd);void Write_LCD_Data(uchar dat);void Initialize_LCD();void ShowString(uchar x,uchar y,uchar *str);void Showword0(uchar x,uchar y,char word );void Showword1(char word );void write_shuzi(uchar num1,uchar num2,uchar num3,uchar num4);/18b20void delay(uint x);void delayus(uint,uchar);单片机课程

7、设计报告- 8 -void init();void write_byte(uchar date);uchar read_byte();void get_tem();/*子函数*/ /系统初始化函数void init()ADCON1=0X07; /设置 A 口为普通数字口TRISA =0X00; /设置 A 口方向为输出TRISB =0x00;OPTION=0x00; /B 口电阻上拉TRISC = 1;PORTC = 0x20;TRISD =0X00;TRISD =0x00;/延时函数void delayus(uint x,uchar y)uint i;uchar j;单片机课程设计报告- 9

8、 -for(i=x;i0;i-);for(j=y;j0;j-);void delay(uint x)uint a,b;for(a=x;a0;a-)for(b=110;b0;b-);/ds18b20 复位函数void reset()uchar st=1;DQ_HIGH(); /开始于高电平NOP();NOP(); /延时 2uswhile(st) DQ_LOW();delayus(70,30); /750DQ_HIGH(); /释放总线delayus(4,4); /等 70if(DQ=1) /应答判断单片机课程设计报告- 10 -st=1; elsest=0; delayus(50,10); /

9、延时 450/ds18b20 写函数void write_byte(uchar date)uchar i,temp;DQ_HIGH(); /开始于高电平NOP();NOP();for(i=8;i0;i-) temp=date/ /分位写入DQ_LOW();delayus(0,0); /15if(temp=1)DQ_HIGH();delayus(2,2); /45DQ_HIGH();date=date1;/单片机课程设计报告- 11 -/ds18b20 读函数uchar read_byte()uchar i,date;static bit j;for(i=8;i0;i-)date=date1;D

10、Q_HIGH(); /开始于高电平NOP();NOP();DQ_LOW();NOP();NOP();NOP();NOP();NOP();NOP(); /6DQ_HIGH();NOP();NOP();NOP();NOP(); /4j=DQ; /读取总线if(j=1)date=date|0x80;/1000 0000delayus(1,1); /30return (date); /返回函数值单片机课程设计报告- 12 -/温度读取处理函数void get_tem()uchar tem1,tem2,num;float aaa;reset(); /复位write_byte(0xCC);/跳过 ROMw

11、rite_byte(0x44);/温度转换reset();write_byte(0xCC); /跳过 ROMwrite_byte(0xBE); /温度传递tem1=read_byte(); /读取低 8 位tem2=read_byte();/读取高 8 位if(tem27) /符号判断tem2=255-tem2;tem1=255-tem1;f=1;else f=0;单片机课程设计报告- 13 -aaa=(tem2*256+tem1)*6.25*8; /转化为实际温度值temper=(int)aaa; /强行转化位整数a1=temper/1000; /十进制分位a2=temper%1000/10

12、0;a3=temper%100/10;a4=temper%10;if(a17|a15) RD7=1;else RD7=0;/延时void DelayMS(uint ms) /毫秒uchar i;while(ms-) for(i=0;i120;i+);/LCD 忙检查函数uchar Busy_Check()uchar LCD_Status;RS=0;/寄存器选择(0 指令 1 数据)RW=1;/读状态寄存器单片机课程设计报告- 14 -EN=1;/开始读DelayMS(1);LCD_Status=PORTB;EN=0;return LCD_Status;/写 LCD 命令函数void Write

13、_LCD_Command(uchar cmd)/ while(Busy_Check() /忙等待RS=0;/选择命令寄存器RW=0;/写EN=0;PORTB=cmd;EN=1;DelayMS(1);EN=0;/LCD 发送数据函数void Write_LCD_Data(uchar dat)/ while(Busy_Check() /忙等待RS=1;RW=0;EN=0;PORTB=dat;EN=1;DelayMS(1);EN=0;/LCD 初始化函数单片机课程设计报告- 15 -void Initialize_LCD()Write_LCD_Command(0x38);DelayMS(1); /3

14、8:数据长 8 位,两行显示,字体 5*7 点阵(80)Write_LCD_Command(0x01);DelayMS(1);/清屏Write_LCD_Command(0x06);DelayMS(1);/字符进入模式:屏幕不动,字符后移Write_LCD_Command(0x0c);DelayMS(1);/显示开,光标关;0x0e 是开光标/显示字符函数void Showword0(uchar x,uchar y,char word ) /y:行地址,x:列地址 if(y=0) Write_LCD_Command(0x80|x);/设置显示起始位置(x,0)第一行if(y=1) Write_LCD_Command(0xc0|x); / (x,1)第二行 Write_LCD_Data(word+0x30); /stri等价于*(str+i)/显示温度函数void write_shuzi(uchar num1,uchar num2,uchar num3,uchar num4) 单片机课程设计报告-

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

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号