基于at89s52单片机的温湿度检测仪毕业设计内容摘要:
图 LE为锁存控制端另外本产品还增加了掉电存储功能和报警装置,掉电存储就是用户在重新启机时或断电的情况下温度上下限设定的值会被保存用户不必再重新修改,若当前温湿度超过了用户设定的上下限值报警装置会自动报警。 掉电存储芯片我采用了AT24C01,报警装置选用三极管驱动蜂鸣器报警,具体电路如下图所示: AT24C02支持IC,总线数据传送协议IC,总线协议规定任何将数据传送到总线的器件作为发送器。 任何从总线接收数据的器件为接收器。 数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。 主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。 表2 管脚描述 管脚名称 功能 A0 A1 A2 器件地址选择 SDA 串行数据/地址 SCL 串行时钟 WP 写保护 Vcc +~ 工作电压 Vss 地 SCL 串行时钟 AT24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。 SDA 串行数据/地址 AT24C02 双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA 是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wireOR)。 A0、AA2 器件地址输入端 这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。 当使用AT24C02 时最大可级联8个器件。 如果只有一个AT24C02被总线寻址,这三个地址输入脚(A0、AA2 )可悬空或连接到Vss,如果只有一个AT24C02被总线寻址这三个地址输入脚(A0、AA2 )必须连接到Vss。 WP 写保护 如果WP管脚连接到Vcc,所有的内容都被写保护只能读。 当WP管脚连接到Vss 或悬空允许器件进行正常的读/写操作第2章 温湿度检测仪的软件设计167。 主程序模块设计主程序是控制和管理的核心,主要完成在系统上电后进行定时和中断图31 主程序流程图处理操作的初始化。 它的内容包括主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等等。 主程序设计框图如上图31。 主程序初始化的具体内容包括:时间中断的初始化、外部中断源的初始化、单片机I/O口初始化、RAM初始化、LCD初始化、对各个子程序的调用,然后对温度和湿度进行检测并将结果显示在LCD上。 初始化对单片机的工作非常重要,因为单片机经过复位以后一些状态字,寄存器的初值可能是随机分配的值也可能是全置0或置1,程序在运行过程中,程序状态字起着重要的作用,为了不影响程序的正常运行初始化是十分必要的。 167。 温湿度检测模块程序设计167。 温度检测模块程序设计1. 程序设计方案开始始初始化DS18B20,LCD读DS18B20序列号DS18B20是否存在 发送跳过RAM指令温度转换LCD显示NO2. 部分源程序如下: void init_lcd(){ write_zl(0x38)。 //开显示 write_zl(0x01)。 //清屏 write_zl(0x06)。 //整屏不移动 write_zl(0x0C)。 //不开光标 }void init_18b20(){ DQ=1。 delay(8)。 //延时 DQ=0。 delay(80)。 DQ=1。 delay(20)。 }void write_dat(uchar dat){ uchar i,k。 k=dat。 for(i=0。 i8。 i++) { DQ=0。 DQ=kamp。 0x01。 //从低位开始 delay(5)。 DQ=1。 k=1。 }delay(4)。 }int read_sj(){ uchar j,date。 for(j=0。 j8。 j++) { DQ=1。 delay(1)。 DQ=0。 date=date1。 DQ=1。 if(DQ==1) // date|=0x80。 delay(4)。 } return(date)。 } void temperaturechange(){ uint tempH,tempL。 init_18b20()。 write_dat(0xcc)。 //只对一个操作就跳过读序列号操作 write_dat(0x44)。 //启动温度转换 delay(60000)。 delay(33750)。 // init_18b20()。 write_dat(0xcc)。 write_dat(0xbe)。 //读温度寄存器 tempL=read_sj()。 //读取温度低位LSB tempH=read_sj()。 //读取温度高位MSB if(tempHamp。 0x80) //高5位是1为负数 { a=1。 tem=tempH。 tem=8。 //共16位 tem=tem|tempL。 //合并高低位数 tem=~tem+1。 tem=tem*()。 }else { a=0。 tem=((tempH*256)+tempL)*。 //转换实际温度 }}void write_temperature(uint temp) //被调用的函数必须在前{ uint bai,shi,ge。 bai=temp/100。 shi=temp%100/10。 ge=temp%10。 if(a==1) { if(shi0) {write_zl(0x80+0x40+3)。 write_sj(39。 39。 )。 write_zl(0x80+0x40+4)。 write_sj(0x30+shi)。 } else { write_zl(0x80+0x40+3)。 write_sj(0x00)。 write_zl(0x80+0x40+4)。 write_sj(39。 39。 )。 } }else { if(bai0) //若bai显示shi肯定显示 { write_zl(0x80+0x40+3)。 write_sj(0x30+bai)。 write_zl(0x80+0x40+4)。 write_sj(0x30+shi)。 } else { if(shi0) //否则判断shi是否显示{write_zl(0x80+0x40+4)。 write_sj(0x30+shi)。 }else{write_zl(0x80+0x40+4)。 write_sj(0x00)。 } write_zl(0x80+0x40+3)。 write_sj(0x00)。 }}write_zl(0x80+0x40+5)。 //个位公用总的显示write_sj(0x30+ge)。 } void sounderplay() { uint i。 for(i=0。 i1000。 i++) {sounder=~sounder。 delay(100)。 } }167。 湿度检测模块程序设计1. 程序设计方案 2. 部分源程序如下: void main() { P25=0。 P26=0。 P27=0。 EA=1。 TMOD=0x20。 ET1=1。 TR1=1。 TH1=0xff。 TL1=0xff。 shuma=0。 init_lcd()。 yejing=1。 displayyj()。 yejing=0。 while(1) { yejing=1。 shidu_set()。 yejing=0。 shuma=1。 display()。 shuma=0。 if(flag==0) { yejing=1。 sdxs()。 yejing=0。 } } }void exter() interrupt 3{P34=~P34。 } void display(){ P35=1。 _nop_()。 P35=0。 //开始AD转换 while(!P37)。 //等待Ad转换// P36=1。 //转换结束OE置高电平 数据出现在 D7D0引脚上 a=P0。 b=51。 c=a/b。 P20=1。 P21=0。 P1=tab[c]。 P17=0。 delay(1)。 P20=0。 f=a%b。 d=f/5。 P1=tab[d]。 P20=0。 P21=1。 delay(1)。 P21=0。 }167。 键盘扫描和LED显示模块程序设计167。 键盘扫描键盘是人机交换的桥梁,一个好的键盘能够让用户方便的使用仪表。 本设计的键盘就在此基础上设计的,同时也为了节约单片机的硬件资源,具体程序如下:void key_set() //按键设置{ if(button1==0) { delay2(5)。 if(button1==0) { while(button1==0)。 kk++。 flag=1。 fly=1。 switch(kk) { case 1:write_zl(0x80+10)。 write_zl(0x0f)。 //shan shuo break。 case 2:write_zl(0x80+11)。 break。 case 3:write_zl(0x80+0x40+10)。 break。 case 4:write_zl(0x80+0x40+11)。 break。 case 5:kk=0。 flag=0。 fly=0。 write_zl(0x0c)。 if(nn==1) fl=1。 if(nn==2) fl=0。 break。 } } } if(button2==0){ delay2(5)。 if(button2==0) { while(button2==0)。 switch(kk) { case 1:write_zl(0x80+10)。 if(fl==1){Ush++。 if(Ush9)Ush=3。 write_sj(0x30+Ush)。 write(12,Ush)。 } if(fl==0){Ushi++。 if(Ushi9)Ushi=1。 write_sj(0x30+Ushi)。 write(8,Ushi)。 } break。 case 2:write_zl(0x80+11)。 if(fl==1){Ug++。 if(Ug9)Ug=0。 write_sj(0x30+Ug)。 write(13,Ug)。 } if(fl==0){ Uge++。 if(Uge9)Uge=0。 write_sj(0x30+Uge)。 write(9,Uge)。 } break。 case 3:write_zl(0x80+0x40+10)。 if(fl==1){Dsh++。 if(Dsh2)Dsh=0。 write_sj(0x30+Dsh)。 write(14,Dsh)。 } if(fl==0){ Dshi++。 if(Dshi2)Dshi=0。 write_sj(0x30+Dshi)。 write(10,Dshi)。 } break。 case 4:write_zl(0x80+0x40+11)。 if(fl==1){Dg++。 if(Dg9)Dg=0。 write_sj(0x30+Dg)。 write(15,Dg)。 } if(fl==0){Dge++。 if(Dge9)Dge=0。 write_sj(0x30+Dge)。 write(11,Dge)。 } break。 } } } if(button3==0){ delay2(5)。 if(button3==0) { while(button3==0)。 switch(kk) { case 1: write_zl(0x80+10)。 if(fl==0){Ushi。 if(Ushi3)Ushi=9。 write_sj(0x30+Ushi)。 write(8,Ushi)。 } if(fl==1){Ush。 if(Ush3)Ush=9。 write_sj(0x30+Ush)。 write(12,Ush)。 } break。 case 2: write_zl(0x80+11)。 if(fl==0){Uge。 if(Uge0)Uge=9。 write_sj(0x30+Uge)。 write(9,Uge)。 } if(fl==1){Ug。 if(Ug0)Ug=9。 wri。基于at89s52单片机的温湿度检测仪毕业设计
相关推荐
) 6207 轴承 d=3 B=17。 轴段④和轴段⑥要对轴承进行 轴向定位, d4=d6=38mm; 2)确定各轴段的长度 齿轮轮毂宽度为 50mm,为保证齿轮端面与箱体不相碰,齿轮端面与箱体间距取为 15mm;为保证安装在箱体轴承孔内并考虑轴承的润滑,取轴承端面与箱体的距离为 5mm,所以轴段⑥长度取 17mm;为防止斜齿在啮合时向两边挤出大量润滑油,增加轴承的阻力
可穿戴设备不但能够实现对其他设备的控制,还将原本由手机、电脑实现的功能搬到了人的身体上。 从而让功能更加直观,让生活更加简单。 表达:可穿戴设备可随身携带,在交流的过程中,以投影、显示、三维成像、文件传输等方式实现更方便、更形象、更精确的表达。 另外,可穿戴设备也可以方便地在社交网络上分享个人见闻。 健康: 人的健康数据一些可穿戴设备如隐形眼镜、手环等,与人极度贴合,可检测到人的心率、血糖等数据
能管理者可以随时 更新,添加航线 ,临时添加航班给用户查询带来最新的最准确的消息 ; 第四, 应具备 客户留言 功能,通过此功能 可以 实现对客户意见的反馈,作出及时的调整来满足客户需求。 系统数据流图和数据字典 系统的数据流图 数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。 在数据流图中没有具体的物理部件,只是描绘数据在软件中流动和被处理的逻辑过程。 此外
0 2 周志敏,周纪海 .开关电源实用技术-设计与应用 .北京:人民邮 电出版社 .2020 3 杨 旭,裴云庆,王兆安 .开关电源技术 .北京:机械工业出版社 .2020 4 [日 ]原田耕介 主编 .耿文学 译 .开关电源手册 .北京:机械工业出版社 .2020 5 刘泉海,陈因等 .电子电子技术 .重庆:重庆大学出版社 .2020 6 滕国仁 .脉宽集成控制器 UC3842
9) 式中: λ c 1 -导热覆盖基板有效热导率; λ c2 -导流片的有效热导率; λ c3-电偶臂有效热导率; l c1-导热覆盖基板厚度; l c2-导流片厚度; lc3-电偶臂厚度; A c1-导热覆盖基板的面积; A c2-导流片的面积; A c3-电偶臂面积; K c1-导热覆 盖基板导热率; K c2-导流层导热率; K c3-电偶臂导热率。 导热覆盖基板的材料是氧化铝陶瓷