版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年福州市仓山区妇女联合会招聘1名编外人员参考题库(综合题)附答案详解
- 2026福建厦门市集美区杏东小学产假顶岗教师招聘1人备考题库及参考答案详解【达标题】
- 2026年家庭记忆测试题及答案
- 2026年线程性能测试题及答案
- 2026年特殊能力测试题及答案
- 2026年大嚼科学测试题及答案
- 2026年设计生活标志测试题及答案
- 河北单招题库分类及答案
- 智慧农业传感器校准工程师考试试卷及答案
- 2026年村超赛事组织与贵州省市县三级体育部门协同报告
- 摩根大通-第一性原理:AI电力基础设施:追踪电力需求-First Principles-AI Power Infrastructure:Following the Power-20260625
- 中医全科(副高)高级职称考试题库及答案
- 2024年4月自考00067财务管理学答案及评分参考
- 中专《数学》(基础模块)上册80张课件
- 建筑设计公司绩效总方案
- 无菌模拟灌装工艺验证
- 护理技能竞赛的方案
- XX地区负荷预测项目负荷预测模型训练模块详细设计
- WB/T 1019-2002菱镁制品用轻烧氧化镁
- GB/T 1401-1998化学试剂乙二胺四乙酸二钠
- (禽生产学课件) 绪论
评论
0/150
提交评论