版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SectorErase(0x2000);byte_write(0x2000,s_temp);byte_write(0x2001,s_dengji);byte_write(0x2060,a_a);}/******************把数据从单片机内部eeprom中读出来*****************/voidread_eeprom(){s_temp=byte_read(0x2000);s_dengji=byte_read(0x2001);a_a=byte_read(0x2060);}/**************开机自检eeprom初始化*****************/voidinit_eeprom(){read_eeprom();//先读if(a_a!=1)//新的单片机初始单片机内问eeprom{s_temp=50;s_dengji=60;a_a=1;write_eeprom();}}/***********************18b20初始化函数*****************************/voidinit_18b20(){bitq;dq=1;//把总线拿高delay_uint(1);//15usdq=0;//给复位脉冲delay_uint(80);//750usdq=1;//把总线拿高等待delay_uint(10);//110usq=dq;//读取18b20初始化信号delay_uint(20);//200usdq=1;//把总线拿高释放总线}/*************写18b20内的数据***************/voidwrite_18b20(uchardat){uchari;for(i=0;i<8;i++){//写数据是低位开始dq=0;//把总线拿低写时间隙开始dq=dat&0x01;//向18b20总线写数据了delay_uint(5);//60usdq=1;//释放总线dat>>=1;}}/*************读取18b20内的数据***************/ucharread_18b20(){uchari,value;for(i=0;i<8;i++){dq=0;//把总线拿低读时间隙开始value>>=1;//读数据是低位开始dq=1;//释放总线if(dq==1)//开始读写数据value|=0x80;delay_uint(5);//60us读一个时间隙最少要保持60us的时间}returnvalue;//返回数据}/*************读取温度的值读出来的是小数***************/uintread_temp(){uintvalue;ucharlow;//在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20();//初始化18b20write_18b20(0xcc);//跳过64位ROMwrite_18b20(0x44);//启动一次温度转换命令delay_uint(50);//500usinit_18b20();//初始化18b20write_18b20(0xcc);//跳过64位ROMwrite_18b20(0xbe);//发出读取暂存器命令EA=0;low=read_18b20();//读温度低字节value=read_18b20();//读温度高字节EA=1;value<<=8;//把温度的高位左移8位value|=low;//把读出的温度低位放到value的低八位中value*=0.0625;//转换到温度值returnvalue;//返回读出的温度}/*********** 读 数 模 转 换 数 据********************************************************///请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的//100通道//111通道unsignedcharad0832read(bitSGL,bitODD){unsignedchari=0,value=0,value1=0;SCL=0;DO=1;CS=0;//开始SCL=1;//第一个上升沿SCL=0;DO=SGL;SCL=1;//第二个上升沿SCL=0;DO=ODD;SCL=1;//第三个上升沿SCL=0;//第三个下降沿DO=1;for(i=0;i<8;i++){SCL=1;SCL=0;//开始从第四个下降沿接收数据value<<=1;if(DO)value++;}for(i=0;i<8;i++){//接收校验数据value1>>=1;if(DO)value1+=0x80;SCL=1;SCL=0;}CS=1;SCL=1; if(value==value1)//与校验数据比较,正确就返回数据,否则返回0returnvalue;return0;}/*************定时器0初始化程序***************/voidtime_init(){EA=1;//开总中断TMOD=0X01;//定时器0、定时器1工作方式1ET0=1;//开定时器0中断TR0=1;//允许定时器0定时}/********************独立按键程序*****************/ucharkey_can;//按键值voidkey()//独立按键程序{staticucharkey_new;key_can=20;//按键值还原P1|=0x0f;if((P1&0x0f)!=0x0f)//按键按下{delay_1ms(1);//按键消抖动if(((P1&0x0f)!=0x0f)&&(key_new==1)){//确认是按键按下key_new=0;switch(P1&0x0f){case0x0e:key_can=4;break;//得到k1键值case0x0d:key_can=3;break;//得到k2键值case0x0b:key_can=2;break;//得到k3键值case0x07:key_can=1;break;//得到k4键值}}}elsekey_new=1;}/****************按键处理LCD1602液晶显示函数***************/voidkey_with(){if(key_can==4)//紧急报警键手动报警{if(menu_1==0)shoudong=1;}if(key_can==1)//设置键{menu_1++;if(menu_1>=3){menu_1=0;}if(menu_1==0)init_1602();//初始化显示}if(menu_1==0){if((key_can==2)||(key_can==3))shoudong=0;//取消手动报警}if(menu_1==1)//设置高温报警{if(key_can==2){s_temp++;//高温报警值加1if(s_temp>99)s_temp=99;}if(key_can==3){s_temp--;//高温报警值减1if(s_temp<=10)s_temp=10;}write_sfm2(1,8,s_temp);//显示温度write_sfm2(2,8,s_dengji);//显示烟物等级write_com(0x80+7);//将光标移动到第2行第到3位write_com(0x0f);//显示光标并且闪烁write_eeprom();//保存数据}if(menu_1==2)//设置低温报警{if(key_can==2){s_dengji++;//烟物报警值加1if(s_dengji>=99)s_dengji=99;}if(key_can==3){s_dengji--;//烟物报警值减1if(s_dengji<=1)s_dengji=1;}write_sfm2(1,8,s_temp);//显示温度write_sfm2(2,8,s_dengji);//显示烟物等级write_com(0x80+0x40+7);//将光标移动到第2行第到3位write_com(0x0f);//显示光标并且闪烁write_eeprom();//保存数据}}/****************报警函数***************/voidclock_h_l(){staticucharvalue;if((dengji>=s_dengji)||(temperature>=s_temp)||(shoudong==1))//报警{value++;if(value>=2){value=10;beep=~beep;//蜂鸣器报警fengshan=0;//起动风扇}}else{if((dengji<s_dengji)&&(temperature<(s_temp))&&(shoudong==0))//取消报警{value=0;beep=1;fengshan=1;//关闭风扇}}}/***************主函数*****************/voidmain(){beep=0;//开机蜂鸣器叫一声delay_1ms(200);P0=P1=P2=P3=0xff;//初始化IO口temperature=read_temp();//读取温度值init_1602();//1602液晶初始化init_eeprom();//读eeprom数据time_init();//初始化定时器delay_1ms(650);while(1){key();//独立按键程序if(key_can<10){key_with();//按键按下要执行的程序}if(flag_300ms==1){flag_300ms=0;temperature=read_temp();//读取温度值clock_h_l();dengji=ad0832read(1,0);dengji=dengji*99/255;if(menu_1==0){if(temperature>=99)temperature=99;write_sfm2(1,8,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小型化双波长光声光谱系统:癌胚抗原检测的创新突破与应用探索
- 2025年上海第二工业大学马克思主义基本原理概论期末考试笔试题库
- 2026年工业数据空间项目公司成立分析报告
- 2026年宠物拟人化虚拟偶像项目可行性研究报告
- 2024年宁波开放大学马克思主义基本原理概论期末考试真题汇编
- 2026年中国医疗诊断仪行业市场分析及投资前景研究预测报告
- 2026年行政文员岗位面试题库含答案
- 2026届浙江省Z20名校联盟高三第一次联考历史试题含答案
- 2026年中信银行市场专员面试题库含答案
- 2026届广东东莞七校高三上学期12月联考英语试题含答案
- 初中文言文群文整合教学实践探究
- 2025年上海市闵行区中考数学一模试卷
- 行政组织学 课件 第7章 行政组织绩效;第8章 行政组织变革
- 【MOOC期末】《信号与系统》(北京邮电大学)中国慕课期末网课答案
- 米脂中国HRT指南
- 消防设施维保服务投标方案
- ISO14001及ISO45001法律法规清单
- (完美版)四肢骨折现场急救外固定技术
- DLT664-2023年带电设备红外诊断应用规范
- 基于三角形生长下的特殊平行四边形复习
- 厂房矩形控制网测设及柱列轴线与柱基施工测量
评论
0/150
提交评论