ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:363.83KB ,
资源ID:17893126      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17893126.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于51单片机的温湿度与时钟显示器文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于51单片机的温湿度与时钟显示器文档格式.docx

1、4、 设计步骤及原理步骤1:原理图分析与设计单片机最小系统原理图如图4-1-1所示:图4-1-151单片机最小系统包括了主要由电源、复位、振荡电路以及扩展部分等部分组成。对于电源供电模块可以通过USB电源线连接电脑供给,另外也可以用外部稳定的5V电源供电模块供给。对于复位电路,本设计中采用按键复位方法。按键复位就是在复位电容上并联一个开关,当开关按下时电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。对于时钟震荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。而本次设计采用了12MHz的晶体振荡器作为震荡源。 温湿度

2、传感器温湿度数据采集模块如图4-1-2所示,DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度+-5%RH, 温度+-2,量程湿度20-90%R温度050。DHT11数 图4-1-2字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在

3、检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。本设计中采用DHT11传感器将采集的温度传送给单片机,然后内部进行BCD码转换,最后通过LCD1602液晶显示器显示出来。 LCD1602液晶显示器模块如图4-1-3所示,602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。本次设计中将多出来的15脚接上VCC,然后GND(16脚)接到单片机的P24口,然

4、后通过按键K5 图4-1-3来控制P24口输出电平的状态从而控制LCD1602液晶显示器的背光的开关。仿真中由于无法仿真背光效果,只能通过LED状态图4-1-4 确定,如图4-1-4所示。通过网上查阅LCD1602液晶显示器的芯片手册可以知道,将D0-D7八个数据口连接P0,然后通过RS、RW以及使能端E控制LCD的读写操作。步骤2:流程设计通过对课本的学习以及课外学习的知识,然后根据自己的构想来设计实现怎么样的效果,通过对软件设计思路的分析,得到该设计的系统主程序流程图如图4-2-1所示:图4-2-1系统开始后,先对定时器以及显示器进行初始化,然后写入框架显示时间和温度。当定时器中断时,内部

5、对秒进行自加,加到60s后自动归零且分自加,其它时间标志位也是一样。当然,每1s满时显示会刷新一次从新显示新的数据,温度函数也是按照指定时间进行测量刷新。步骤3:软件编程1. 建立LCD.H文件#ifndef _LCD_H_#define _LCD_H_#include#define uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sbit LCD1602_E=P27;sbit LCD1602_RW=P25;sbit LCD1602_RS=P26;void Lcd1602_Delay1ms(uint

6、c);void LcdWriteCom(uchar com);void LcdWriteData(uchar dat) ;void LcdInit(); #endif2. 建立LCD.C函数#includeLCD.h/包含自建立库文件void Lcd1602_Delay1ms(uint c) /延时函数 uchar a,b; for (; c0; c-) for (b=199;bb-) for(a=1;aa-); void LcdWriteCom(uchar com) LCD1602_E = 0; LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DATAPINS

7、 = com; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_DATAPINS = com 4;void LcdWriteData(uchar dat) LCD1602_RS = 1; LCD1602_DATAPINS = dat; LCD1602_DATAPINS = dat void LcdInit() /初始化 LcdWriteCom(0x32); LcdWriteCom(0x28); LcdWriteCom(0x0c); LcdWriteCom(0x06); LcdWriteCom(0x01); Lcd

8、WriteCom(0x80);3. 建立DHT11.H库文件#ifndef _DHT11_H_#define _DHT11_H_#include sbit DHT_DATA = P10;bit DHT_Start();bit DHT_ByteRead(unsigned char *dat);4. 建立DHT11.C文件DHT11.hvoid delay_ms(unsigned char x) unsigned char a; while(x-) for(a=0;a114;a+);void delay_30us(void) for(a=12;void delay_40us(void) unsig

9、ned char a,b; for(b=3; for(a=4;bit DHT_Start() unsigned char m=0; DHT_DATA=1; DHT_DATA=0; delay_ms(20); delay_40us(); if(DHT_DATA=1) return 0; else while(DHT_DATA=0)&(m200)m+; return 1; bit DHT_ByteRead(unsigned char *dat) unsigned char temp=0; unsigned char x,y; unsigned char m=0; unsigned char n=0

10、; unsigned char mask=0x01; unsigned char sum=0; for(y=0;y=1) while(DHT_DATA=0&m200)m+; delay_30us(); if(DHT_DATA) temp|=mask; else temp&=(mask); while(DHT_DATA=1&n200)n+; *(dat+y)=temp; temp=0; for(x=0;x4;x+) sum+=*(dat+x); if(sum&=0xff)=*(dat+4) return 1;5. 建立主函数main.c文件sbit beep=P10;/sbit BG=P24;s

11、bit K1=P11;sbit K2=P12;sbit K3=P13;sbit K4=P14;sbit K5=P15;/sbit beep=P20;uchar code table0=H:;uchar code table1=T:uchar code table2=%uchar code table3=Cuchar code table_1=2016-06-03uchar code table_2=16:00:00 5uchar DHT5;uchar tmp,i,j,k;uchar count,shi,fen,miao,month,day,week,year;uchar K1num,K2num

12、,K3num;bit flag_1s=1;void Delay10ms(unsigned int x);void Keyscan();void Keyscan2();void Wtimer(uchar ad,uchar dat);void main() LcdInit(); BG = 1; beep; TMOD = 0X01; TH0 = (65536 - 50000)/256; /*11.0592MHz 46080*/ TL0 = (65536 - 50000)%256; EA = 1; ET0 = 1; TR0 = 1; LcdWriteCom(0X86); for (j = 0;j 10

13、;j+) LcdWriteData(table_1j); LcdWriteCom(0Xc6); LcdWriteData(table_2j); while(1) Keyscan(); Keyscan2(); if(flag_1s) flag_1s=0; DHT_Start(); tmp=DHT_ByteRead(&DHT); /* LcdWriteCom(0x80); for(i=0;i2;i+) LcdWriteData(table0i); LcdWriteData(DHT0/10+0); LcdWriteData(DHT0%10+ LcdWriteData(table20); LcdWri

14、teCom(0xC0); LcdWriteData(table1i); LcdWriteData(DHT2/10+ LcdWriteData(DHT2%10+ LcdWriteData(table30); /LcdWriteCom(0x07); /void Delay10ms(unsigned int x) unsigned int t; while(x-) for(t=0;t7) week=1; if (31 = day) day = 1; month+; if (12 = month) month = 1; year+; Wtimer(6-0x40+2,year); Wtimer(6-0x

15、40+5,month); Wtimer(6-0x40+8,day); Wtimer(6,shi); Wtimer(9,fen); Wtimer(12,miao);void Keyscan() K1 = 1; K2 = 1; K3 = 1; if (0 = K1) Delay10ms(5); K1num+; while (!K1); if (1 = K1num) TR0 = 0; LcdWriteCom(0XC0+13); LcdWriteCom(0X0F); if (2 = K1num) LcdWriteCom(0XC0+10); if (3 = K1num) LcdWriteCom(0XC0

16、+7); if (4 = K1num) LcdWriteCom(0x89); if (5 = K1num) LcdWriteCom(0x8C); if (6 = K1num) LcdWriteCom(0x8F); if (7 = K1num) TR0 = 1; K1num = 0; LcdWriteCom(0x0c); if (0 != K1num) if (0 = K2) Delay10ms(5); while (!K2); if(1 = K1num) miao+; if(60 = miao) miao = 0; LcdWriteCom(0xc0+12); Wtimer(12,miao);

17、LcdWriteCom(0xc0+13); if(2 = K1num) fen+; if(60 = fen) fen = 0; LcdWriteCom(0xc0+9); Wtimer(9,fen); LcdWriteCom(0xc0+10); if(3 = K1num) shi+; if(24 = shi) shi = 0; LcdWriteCom(0xc0+6); Wtimer(6,shi); LcdWriteCom(0xc0+7); if(4 = K1num) year+; if(30 = year) year = 16; LcdWriteCom(0x88); Wtimer(0x08-0x

18、40,year); LcdWriteCom(0x89); if(5 = K1num) month+; if(13 = month) month = 1; LcdWriteCom(0x8B); Wtimer(0x0B-0x40,month); LcdWriteCom(0x8C); if(6 = K1num) day+; if(day31) day = 1; LcdWriteCom(0x8E); Wtimer(0x0E-0x40,day); LcdWriteCom(0x8F); if (0 = K3)K3); miao-; if(255 = miao) miao = 59; LcdWriteCom(0xc0+10+2); LcdWriteCom(0xc0+11+2); if(2 = K1num) fen-; if(255 = fen) fen = 59; if(3 = K1num) shi-; if(255 = shi) shi = 23; year-; if(255 = year) month-; if(255 = month) month = 12; day-; if(day1) day = 31;void Wtimer(uchar ad,uchar

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1