发布时间 : 星期一 文章基于单片机的粮仓温湿度控制系统设计 - 图文更新完毕开始阅读8fb23d02941ea76e59fa0440
陕西理工学院毕业设计
附录D 实物图
第 29 页 共 39 页
陕西理工学院毕业设计
附录E 元器件清单
元器件名称 型号 数量 功能
蜂鸣器 Bell 1 报警 电容 10uF 1 电容 20uF 2 发光二极管 8 报警提示 继电器 Relay-SPDT 8 调控段外部用电器开关 显示屏 OLED12864 1 显示模块实时显示 电源接口 Header 2 2
PNP三极管 9012 9 放大电流 电阻 2K 17 上拉电阻 电阻 10K 5 保护电路 按键 SW-PB 5 单片机 STC89C52 1 温湿度传感器 DHT11 4
晶振 12M 1 起振单片机
第 30 页 共 39 页
陕西理工学院毕业设计
附录F 粮仓温湿度控制系统C语言程序
#include \#include \#include \#include \//
#define uchar unsigned char #define uint unsigned int
sbit dht_dat=P1^0; //用哪个 I/O 口自选,注意不要用 P3 口 sbit dht1_dat=P1^1; sbit dht2_dat=P1^2; sbit dht3_dat=P1^3; sbit jdq1= P2^0; sbit jdq2= P2^1; sbit jdq3= P2^2; sbit jdq4= P2^3; sbit jdq5= P2^4; sbit jdq6= P2^5; sbit jdq7= P2^6; sbit jdq8= P2^7; sbit beep= P1^4;
sbit key1= P3^4; sbit key2= P3^5; sbit key3= P3^7; sbit key4= P3^6;
uchar Tmax=30,Hmax=65; uchar setflag=0,rhflag=0;
uchar dht_t1[4]={0,0,0,0},dht_t2[4]={0,0,0,0}; //依次为温度整数部分和温度小数部分 uchar dht_d1[4]={0,0,0,0},dht_d2[4]={0,0,0,0}; //依次为湿度整数部分和湿度小数部分 uchar dht_chk[4]={0,0,0,0}; //和校验,可选择是否使用,具体参照数据手册 uchar dht_num[4]={0,0,0,0}; //用于 while 循环中计数,超时则跳出循环 #ifndef __INF_NEC__ #define __INF_NEC__
extern void dht_delay_10us();
extern void dht_delay_10ms(uchar t); extern uchar dht_readat(); extern void dht_getdat(); extern void dht_init(); #endif
void dht_delay_10us() //自己调,一定要尽量精确到 10us,很重要 {
uchar i=0;
for(i=0;i<1;i++); }
第 31 页 共 39 页
陕西理工学院毕业设计
void dht_delay_10ms(uchar t) //大概 10ms 就行,粗略延时 {
uchar i=0,j=0,k=0; for(i=0;i for(j=0;j<40;j++)for(k=0;k<75;k++); } } void dht_init() //DHT11 的初始化函数,别忘了写程序时先加上之 { dht_delay_10ms(100); //DHT11 上电前准备时间,大概 1s dht_dat=1; //总线准备 } /***********************************************第一DHT11*****************************/ /***********************************************第一DHT11*****************************/ /***********************************************第一DHT11*****************************/ /***********************************************第一DHT11*****************************/ uchar dht_readat() //接收一个 8 位数据,先高位后低位 { uchar i=0,dat=0; for(i=0;i<8;i++) { dht_num[0]=2; while((dht_dat==0)&&(dht_num[0]++)); dht_delay_10us();dht_delay_10us();dht_delay_10us();dht_delay_10us(); dat=dat<<1; if(dht_dat==1) { dht_num[0]=2; dat=dat|0x01; while((dht_dat==1)&&(dht_num[0]++)); } } return dat; } void dht_getdat() // 给 1 DHT11 一个开始信号,然后读取一次数据,共五个 8 位字节{ uchar i=0; dht_dat=0; dht_delay_10ms(4); dht_dat=1; //单片机给起始脉冲信号 第 32 页 共 39 页 个个个个