基于单片机的粮仓温湿度控制系统设计 - 图文 联系客服

发布时间 : 星期一 文章基于单片机的粮仓温湿度控制系统设计 - 图文更新完毕开始阅读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 页

个个个个