已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于STC89C52单片机的18b20测温程序主程序:/*使用单片机:STC89C52晶振频率:11.0592MHZ开发环境:Keil4.0功能简述:调试用12864LCD的显示功能,蜂鸣器报警装置*/#include#include#include#include #define uchar unsigned char#define uint unsigned int#define lcd_data P0#include lcd.h#include ds18b20.hcode uchar Display18=实际温度;code uchar Display28=报警温度;sbit sl=P03;sbit sr=P04;sbit su=P05;sbit sd=P06;char f=0; /定义标志位sbit beep=P17; /蜂鸣器uint temp,templa; /定义整形温度数据float f_temp; /定义浮点型得温度数据int Actual_Temp;int Alarm_Temp;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void delay(uint z)/延时函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void Key_Scan() /键盘扫描程序 if(sl=0) /实现光标的左移delay(5); /消抖if(sl=0)while(!sl);/按键松手检测 等待按键释放if(f=0)f=4;else f-; / 按键自减1if(sr=0) /实现光标的右移delay(5); /消抖if(sr=0)while(!sr); /按键松手检测f+;if(f=4)f=0; if(su=0) /实现按键加的功能delay(5); /消抖 if(su=0) while(!su);/按键松手检测if(f=1)Alarm_Temp=Alarm_Temp+100;if(f=2)Alarm_Temp=Alarm_Temp+10;if(f=3)Alarm_Temp=Alarm_Temp+1;if(sd=0) / 实现按键减的功能delay(5); /消抖if(sd=0)while(!sd); /按键松手检测if(f=1)Alarm_Temp=Alarm_Temp-100;if(f=2) Alarm_Temp=Alarm_Temp-10;if(f=3) Alarm_Temp=Alarm_Temp-1; Alarm_Temp= Alarm_Temp;void LCD_Display(int value,char x,char y) uint abs_value; code uchar Display_Dot1=.;code uchar Display_Unit1=C; if(value0) LCD_Pos(x,y-1); LCD_SendData(-,1); else LCD_Pos(x,y-1); LCD_SendData(+,1);abs_value=abs(value); LCD_Pos(x,y);LCD_Write(abs_value/100+0x30,1);LCD_Write(abs_value%100/10+0x30,1);LCD_SendData(Display_Dot,1);/显示小数点LCD_Write(abs_value%10+0x30,1);LCD_SendData(Display_Unit,1);/显示单位void LCD_DisplayTemp() /显示实际温度与报警温度值 LCD_Display(Actual_Temp ,0,5); LCD_Display(Alarm_Temp ,1,5); switch(f) case 0:LCD_Pos(2,5);LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符 break; case1:LCD_Pos(2,5);LCD_Write(24,1); /显示向上指针LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符 break; case 2: LCD_Pos(2,5); LCD_Write(32,1); /显示空白字符LCD_Write(24,1); /显示向上指针 LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符 break; case 3:LCD_Pos(2,5); LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符 LCD_Write(24,1); /显示向上指针LCD_Write(32,1); /显示空白字符 case 4:LCD_Pos(2,5); LCD_Write(32,1); /显示空白字符LCD_Write(32,1); /显示空白字符 LCD_Write(32,1); /显示向上指针LCD_Write(24,1); /显示空白字符 void DS18B20_TempChange(void) /DS18B20 开始获取温度并转换 DS18B20_Reset(); delay(1); DS18B20_WriteByte(0xcc); / 写跳过读ROM指令 DS18B20_WriteByte(0x44); / 写温度转换指令void DS18B20_GetTemp() / 从DS18B20读取寄存器中存储的温度数据 uchar a,b; DS18B20_Reset(); delay(1); DS18B20_WriteByte(0xcc); DS18B20_WriteByte(0xbe); a=DS18B20_Read(); /读低8位 b=DS18B20_Read(); /读高8位 temp=b; tempAlarm_Temp) beep=0; /蜂鸣器响 else beep=1;/蜂鸣器不响 void main() uint i;LCD_init(); /初始化LCDLCD_Clear();/LCD清屏LCD_Pos(0,0);/设置显示位置为第一行的第一个字符LCD_SendData(Display1,8);/显示:实际温度LCD_Pos(1,0);/设置显示位置为第二行的第一个字符LCD_SendData(Display2,8);/显示报警温度while(1)DS18B20_TempChange( ); for(i=0;i10;i+)Beep_Warn (); DS18B20_GetTemp(); LCD_DisplayTemp(); /调用显示函数 Key_Scan(); /调用键盘函数 /程序很棒,仅供参考,不明白处可留言。lcd.h程序内容#ifndef _lcd_H_#define _lcd_H_#include#include #define uchar unsigned char#define uint unsigned int/液晶接口定义sbit CS = P20;sbit SID = P21;sbit CLK = P22;void LCD_init(void);/LCD初始化程序void LCD_Write(uchar word,uchar dat);/写液晶子程序void LCD_SendData(unsigned char *date,char num);/一次写多个字符函数程序void LCD_Pos(unsigned char X,unsigned char Y);/设定LCD显示定位void LCD_Clear();/LCD清屏#endiflcd.c程序内容#includelcd.h/*函 数 名:LCD_init功能说明:LCD初始化子程序调用函数:LCD_Write入口参数:出口参数:说 明:*/void LCD_init(void)CS =1;SID =0; CLK=0; LCD_Write( 0x30,0 );/功能设置,一次送8位数据,基本指令集 LCD_Write( 0x30,0 );/功能设置,一次送8位数据,基本指令集 LCD_Write( 0x0c,0 );/0000,1100 整体显示,游标off,游标位置off LCD_Write( 0x01,0 );/0000,0001 清DDRAM LCD_Write( 0x02,0 );/0000,0010 DDRAM地址归位 LCD_Write( 0x80,0 );/1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC/ LCD_Write( 0x06,0 );/*函 数 名:LCD_Write功能说明:写液晶子程序调用函数:入口参数:word(要写的内容)dat(1为数据,0为指令)出口参数:说 明:*/void LCD_Write(uchar word,uchar dat)uchar lcddat3;uchar i,j,k;lcddat0 = ( 0xf8+(dat1) ); /第一个字节lcddat1 = ( word&0xf0 ) ; /第二个字节 内容的高四位+0000lcddat2 = ( (word4)&0xf0 ); /第三个字节 内容的第四位+0000CS = 0;CS = 1;CLK = 0;for(i=0;i3;i+)j = lcddati;for(k=0;k8;k+)if( (jk)&0x80 )SID = 1; else SID = 0;/*时钟下降沿写入数据*/CLK = 1;CLK = 0; /*函 数 名:LCD_SendData功能说明:一次写多个字符调用函数:LCD_Write入口参数:*data(要显示的字符)num(显示的字符个数)出口参数:说 明:需要编程者自行判断显示的字符个数*/void LCD_SendData(unsigned char *date,char num)char j;for(j = 0;jnum;j+)LCD_Write(datej,1);/显示字符 /*函 数 名:LCD_pos功能说明:设定LCD显示定位调用函数:LCD_Write入口参数:X,Y分别为液晶上行和列坐标出口参数:说 明:12864液晶一共可以显示4行,每行可以显示八个汉子或16个字符,都有固定的地址*/void LCD_Pos(unsigned char X, unsigned char Y)unsigned char pos;if(X=0)X = 0x80;else if(X=1)X = 0x90;else if(X=2)X = 0x88;else if(X=3)X = 0x98;pos = X + Y;LCD_Write(pos,0);/*函 数 名:LCD_Clear功能说明:LCD显示清屏调用函数:LCD_Write入口参数:出口参数:说 明:不能清屏游标等。*/void LCD_Clear()LCD_Write(0x01,0 );/0000,0001 清DDRAMLCD_Write(0x02,0 );/0000,0010 DDRAM地址归位ds18b20.h程序内容#ifndef _ds18b20_H_#define _ds18b20_H_#include#include #define uchar unsigned char#define uint unsigned intsbit ds=P23; /温度传感信号线void DS18B20_Reset(void); /18B20复位,初始化函数bit DS18B20_ReadBit(void); /读1位函数uchar DS18B20_Read(void); /读1个字节void DS18B20_WriteByte(uchar dat); /向18B20写一个字节数据#endifds18b20.c程序内容#include ds18b20.hvoid DS18B20_Reset(void) /18B20复位,初始化函数 uint i; ds=0; i=103; while(i0)i-; ds=1; i=4; while(i0)i-;bit DS18B20_ReadBit(void) /读1位函数 uint i; bit dat; ds=0;i+; /i+ 起延时作用 ds=1;i+;i+; dat=ds; i=8;while(i0)i-; return (dat);uchar DS18B20_Read(void) /读1个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=DS18B20_R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字测绘项目质量控制标准解析
- 少儿美术培训市场推广方案设计
- 声波检测仪器操作标准及维护指南
- 高一生物课教学案例分析
- 2025年电子价签硬件供应与安装协议合同二篇
- 古文词类活用重点语法解析
- XX平安城市施工合同
- XX金属幕墙施工合同
- 关于某某基因驱动技术研究伦理风险评估合同
- 农村楼房施工合同范本
- 假体周围骨折课件
- 建筑工程施工安全与技术管理相关知识试卷
- 2025年高等教育工学类自考-02382管理信息系统历年参考题库含答案解析(5套典型题)
- 2025年人教版新教材数学三年级上册教学计划(含进度表)
- 2025年搅拌站员工技能考试题库
- 医院移动护理系统
- 初中道德与法治名师讲座
- 急性胆源性胰腺炎护理查房
- 《血管内导管相关性血流感染预防与诊治指南(2025)》解读 4
- 法布里病护理查房
- 人教版-物理-中考专题复习-电路故障分析-学案有答案
评论
0/150
提交评论