|
單片機(jī)溫濕度資料有問題 無法仿真
有錯誤 求指導(dǎo):
錯誤的溫濕度設(shè)計(jì).7z
(178.67 KB, 下載次數(shù): 299)
2022-3-31 15:40 上傳
點(diǎn)擊文件名下載附件
溫濕度設(shè)計(jì)
單片機(jī)溫濕度仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (19.84 KB, 下載次數(shù): 53)
下載附件
2017-12-5 00:22 上傳
0.png (9.8 KB, 下載次數(shù): 76)
下載附件
2017-12-5 00:23 上傳
拿到仿真文件后請運(yùn)行下,我有安裝文件提供給親。很多買家直接一句話運(yùn)行不了要求退款,或者有些人提出我原理圖只要99se格式,給轉(zhuǎn)換后又說打不開直接退貨。我碰到了很多。雖然這沒什么錢也不多一碗面的錢都不夠。作為IT民工加攻城獅來說自己寫的程序就這么被人忽悠了實(shí)在懵逼。如果親確認(rèn)需要,確認(rèn)收貨后我把源文件發(fā)送給親。防小人,望親諒解。
0.png (65.16 KB, 下載次數(shù): 43)
下載附件
2017-12-5 00:23 上傳
0.png (7.36 KB, 下載次數(shù): 44)
下載附件
2017-12-5 00:22 上傳
附帶下面的論文:
單片機(jī)溫濕度畢業(yè)設(shè)計(jì).docx
基于AT89C52單片機(jī)和SHT10溫濕度傳感器的溫、濕度監(jiān)測系統(tǒng)的設(shè)計(jì).doc
基于C52單片機(jī)花房溫濕度控制系統(tǒng)的是合計(jì)與仿真.doc
基于單片機(jī)的溫度顯示報警系統(tǒng)設(shè)計(jì).docx
基于單片機(jī)的溫度檢測和報警系統(tǒng).doc
基于單片機(jī)的溫度采集系統(tǒng)設(shè)計(jì)4.doc
基于單片機(jī)的溫濕度報警器設(shè)計(jì).doc
基于單片機(jī)的溫濕度檢測報警系統(tǒng).doc
室內(nèi)溫度控制報警器-(優(yōu)秀畢業(yè)設(shè)計(jì)).doc
溫度報警器畢業(yè)論文.docx
親你好:
拿到仿真文件后請運(yùn)行下,我有安裝文件提供給親。很多買家直接一句話運(yùn)行不了要求退款,或者有些人提出我原理圖只要99se格式,給轉(zhuǎn)換后又說打不開直接退貨。我碰到了很多。雖然這沒什么錢也不多一碗面的錢都不夠。作為IT民工加攻城獅來說自己寫的程序就這么被人忽悠了實(shí)在懵逼。如果親確認(rèn)需要,確認(rèn)收貨后我把源文件發(fā)送給親。防小人,望親諒解。
單片機(jī)源程序如下:
- #include "reg52.H"
- #include "stdio.h"
- #include "intrins.h"
- #include <math.h>
- #define DB P0//液晶并行數(shù)據(jù)接口
- sbit RS = P2^0;//液晶指令數(shù)據(jù)信號
- sbit RW = P2^1;//液晶讀寫信號
- sbit E = P2^2;//液晶使能信號
- unsigned char key_value;//獲取到按鍵的值
- sbit Sck_P = P1^1; // SHT11傳感器的時鐘管腳
- sbit Data_P = P1^0; // SHT11傳感器的數(shù)據(jù)管腳
- unsigned char temp; // 保存溫度
- unsigned char humi; // 保存濕度
- enum { TEMP,HUMI };
- typedef union //定義共用同類型
- {
- unsigned int i;
- float f;
- }value;
- //是否應(yīng)答
- #define NACK 0
- #define ACK 1
- //SHT75傳感器命令集 地址 命令 讀/寫
- #define MEASURE_TEMP 0x03 //000 0001 1
- #define MEASURE_HUMI 0x05 //000 0010 1
- #define STATUS_REG_W 0x06 //000 0011 0
- #define STATUS_REG_R 0x07 //000 0011 1
- #define RESET 0x1E //000 1111 0
- unsigned char now_window;//當(dāng)前顯示窗口
- unsigned char curr_menu;
- #define normal_mode 0x10//輸入密碼狀態(tài)
- #define set_mode 0x20//輸入密碼狀態(tài)
- signed char AlarmTL=10; // 溫度下限報警值
- signed char AlarmTH=30; // 溫度上限報警值
- signed char AlarmHL=40; // 濕度下限報警值
- signed char AlarmHH=80; // 濕度上限報警值
- unsigned char i;
- unsigned char cnt_100ms;
- unsigned char time_100ms_flag;
- unsigned char open_del;//開鎖成功延時計(jì)數(shù)
- unsigned char open_flag;//鎖狀態(tài)標(biāo)志
- sbit beep = P1^2;
- sbit LedTL_P = P1^3; // 溫度過低報警指示燈
- sbit LedTH_P = P1^4; // 溫度過高報警指示燈
- sbit LedHL_P = P1^5; // 濕度過低報警指示燈
- sbit LedHH_P = P1^6; // 濕度過高報警指示燈
- /*******************************************************************************
- * 函 數(shù) 名 : delay_ms
- * 函數(shù)功能 : 延時函數(shù),延時1ms
- * 輸 入 : cnt
- * 輸 出 : 無
- * 說 名 : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時。
- *******************************************************************************/
- void delay_ms(unsigned int cnt) //
- {
- unsigned int x;
- for( ; cnt>0; cnt--)
- {
- for(x=110; x>0; x--);//軟件延時為1MS
- }
- }
- #if 0
- void delay_us(unsigned int cnt) //
- {
- while(cnt--);
- }
- #endif
- /******************************************************
- ** 函數(shù)名:time_init
- ** 描述 :定時器初始化
- ** 輸入 :無
- ** 輸出 :無
- ******************************************************/
- void time_init(void)
- {
- TMOD |= 0x01;//time0 工作方式為1
- TH0 = 0xf8;//裝載初值
- TL0 = 0x2f;//裝載初值,為2ms(65535-63535)
- TR0 = 1;//開啟定時器
- ET0 = 1;//打開中斷
- EA=1;
- }
- /******************************************************
- ** 函數(shù)名:key_scan
- ** 描述 :按鍵掃描
- ** 輸入 :無
- ** 輸出 :無
- ******************************************************/
- void key_scan(void)
- {
- static unsigned char key_in_flag = 0;//按鍵按下標(biāo)志
- unsigned char key_l;//存儲掃描到行列值。
- key_value = 20;//按鍵值清除
- if((P3 & 0x0f) != 0x0f)//按鍵按下
- {
- delay_ms(1);//按鍵消抖動
- if(((P3 & 0x0f) != 0x0f) && (key_in_flag == 1))
- {
- key_in_flag = 0;//松手檢測防止一直觸發(fā)
- P3 = 0x0f;
- //delay_ms(1);//按鍵消抖動
- key_l = P3;//掃描得到按鍵值
- switch(key_l)
- {
- //獲取按鍵值
- case 0x0e:
- {
- key_value = 1;
- }
- break;
- case 0x0d:
- {
- key_value = 2;
- }
- break;
- case 0x0b:
- {
- key_value = 3;
- }
- break;
- //case 0x70:
- //break;
- }
- }
- }
- else
- {
- key_in_flag = 1;//(按鍵松開標(biāo)志)
- }
- }
- /*******************************************************************************
- * 函 數(shù) 名 : LcdWriteCom
- * 函數(shù)功能 : 向LCD寫入一個字節(jié)的命令
- * 輸 入 : u8com
- * 輸 出 : 無
- *******************************************************************************/
- void lcd_wri_com(unsigned char com) //寫入命令
- {
- E = 0; //使能清零
- RS = 0; //選擇寫入命令
- RW = 0; //選擇寫入
- DB = com;
- delay_ms(1);
- E = 1; //寫入時序
- delay_ms(5);
- E = 0;
- }
- /*******************************************************************************
- * 函 數(shù) 名 : LcdWriteData
- * 函數(shù)功能 : 向LCD寫入一個字節(jié)的數(shù)據(jù)
- * 輸 入 : u8dat
- * 輸 出 : 無
- *******************************************************************************/
- void lcd_wri_data(unsigned char dat)//寫入數(shù)據(jù)
- {
- E = 0; //使能清零
- RS = 1; //選擇寫入數(shù)據(jù)
- RW = 0; //選擇寫入
- DB = dat;
- delay_ms(1);
- E = 1; //寫入時序
- delay_ms(5);
- E = 0;
- }
- /*******************************************************************************
- * 函 數(shù) 名 : WriString
- * 函數(shù)功能 : 刷新屏幕顯示
- * 輸 入 : hang,add,*p
- * 輸 出 : 無
- *******************************************************************************/
- void wri_string(unsigned char y,unsigned char x,unsigned char *p)
- {
- if(y==1)//如果選擇第一行
- lcd_wri_com(0x80+x);//選中地址
- else
- lcd_wri_com(0xc0+x);//選中地址
- while(*p)
- {
- lcd_wri_data(*p);//寫入數(shù)據(jù)
- p++;
- }
- }
- /*******************************************************************************
- * 函 數(shù) 名 : lcd_write_char
- * 函數(shù)功能 :
- * 輸 入 :
- * 輸 出 : 無
- *******************************************************************************/
- void lcd_write_char(unsigned char y, unsigned char x, unsigned char dat) //列x=0~15,行y=0,1
- {
- unsigned char temp_l, temp_h;
- if(y==1)//如果選擇第一行
- lcd_wri_com(0x80+x);//選中地址
- else
- lcd_wri_com(0xc0+x);//選中地址
- temp_l = dat % 10;
- temp_h = dat / 10;
- lcd_wri_data(temp_h + 0x30); //convert to ascii
- lcd_wri_data(temp_l + 0x30);
- }
- /*********************光標(biāo)控制***********************/
- void lcd1602_guanbiao(unsigned char y, unsigned char x,unsigned char on_off)
- {
- if(on_off == 1) //開光標(biāo)
- {
- if(y==1)//如果選擇第一行
- lcd_wri_com(0x80+x);
- else
- lcd_wri_com(0xc0+x);//將光標(biāo)移動到秒個位
- lcd_wri_com(0x0f);//顯示光標(biāo)并且閃爍
- }
- else
- {
- if(y==1)//如果選擇第一行
- lcd_wri_com(0x80+x);
- else
- lcd_wri_com(0xc0+x);//將光標(biāo)移動到秒個位
- lcd_wri_com(0x0c); //關(guān)光標(biāo)
- }
- }
- /*******************************************************************************
- * 函 數(shù) 名 : LcdInit()
- * 函數(shù)功能 : 初始化LCD屏
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void lcd_init(void) //LCD初始化子程序
- {
- lcd_wri_com(0x38);//置功能8位雙行
- lcd_wri_com(0x0c);//顯示開關(guān)光標(biāo)
- lcd_wri_com(0x06);//字符進(jìn)入模式屏幕不動字符后移
- delay_ms(5);//延時5ms
- lcd_wri_com(0x01); //清屏
- wri_string(1,0,"welcome user DHT");//初始化顯示
- wri_string(2,0,"H: %RH T: C ");//初始化顯示
- }
- /*********************************************************/
- // 往SHT11寫入一個字節(jié)
- /*********************************************************/
- char ShtWriteByte(unsigned char value)
- {
- unsigned char i,error=0;
- for(i=128;i>0;i>>=1) // 高位為1,循環(huán)右移
- {
- if (i&value)
- Data_P=1; // 和要發(fā)送的數(shù)相與,結(jié)果為發(fā)送的位
- else
- Data_P=0;
- Sck_P=1;
- _nop_(); // 延時3us
- _nop_();
- _nop_();
- Sck_P=0;
- }
- Data_P=1; // 釋放數(shù)據(jù)線
- Sck_P=1;
- error=Data_P; // 檢查應(yīng)答信號,確認(rèn)通訊正常
- _nop_();
- _nop_();
- _nop_();
- Sck_P=0;
- Data_P=1;
- return error; // error=1 通訊錯誤
- }
- /*********************************************************/
- // 從SHT11讀出一個字節(jié)
- /*********************************************************/
- char ShtReadByte(unsigned char ack)
- {
- unsigned char i,val=0;
- Data_P=1; // 釋放數(shù)據(jù)線
- for(i=0x80;i>0;i>>=1) // 高位為1,循環(huán)右移
- {
- Sck_P=1;
- if(Data_P)
- val=(val|i); // 讀一位數(shù)據(jù)線的值
- Sck_P=0;
- }
- Data_P=!ack; // 如果是校驗(yàn),讀取完后結(jié)束通訊
- Sck_P=1;
- _nop_(); // 延時3us
- _nop_();
- _nop_();
- Sck_P=0;
- _nop_();
- _nop_();
- _nop_();
- Data_P=1; // 釋放數(shù)據(jù)線
- return val;
- }
- /*********************************************************/
- // SHT11啟動傳輸
- /*********************************************************/
- void ShtTransStart(void)
- {
- Data_P=1;
- Sck_P=0;
- _nop_();
- Sck_P=1;
- _nop_();
- Data_P=0;
- _nop_();
- Sck_P=0;
- _nop_();
- _nop_();
- _nop_();
- Sck_P=1;
- _nop_();
- Data_P=1;
- _nop_();
- Sck_P=0;
- }
- /*********************************************************/
- // SHT11連接復(fù)位
- /*********************************************************/
- void ShtConnectReset(void)
- {
- unsigned char i;
- Data_P=1; //準(zhǔn)備
- Sck_P=0;
- for(i=0;i<9;i++) //DATA保持高,SCK時鐘觸發(fā)9次,發(fā)送啟動傳輸,通迅即復(fù)位
- {
- Sck_P=1;
- Sck_P=0;
- }
- ShtTransStart(); //啟動傳輸
- }
- /*********************************************************/
- // SHT11溫濕度檢測
- /*********************************************************/
- char ShtMeasure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
- {
- unsigned error=0;
- unsigned int i;
- ShtTransStart(); // 啟動傳輸
- switch(mode) // 選擇發(fā)送命令
- {
- case 1 : // 測量溫度
- error+=ShtWriteByte(0x03);
- break;
- case 2 : // 測量濕度
- error+=ShtWriteByte(0x05);
- break;
- default:
- break;
- }
- for(i=0;i<65535;i++)
- if(Data_P==0)
- break; // 等待測量結(jié)束
- if(Data_P)
- error+=1; // 如果長時間數(shù)據(jù)線沒有拉低,說明測量錯誤
- *(p_value) =ShtReadByte(1); // 讀第一個字節(jié),高字節(jié) (MSB)
- *(p_value+1)=ShtReadByte(1); // 讀第二個字節(jié),低字節(jié) (LSB)
- *p_checksum =ShtReadByte(0); // read CRC校驗(yàn)碼
- return error; // error=1 通訊錯誤
- }
- /*********************************************************/
- // SHT11溫濕度值標(biāo)度變換及溫度補(bǔ)償
- /*********************************************************/
- void CalcSHT11(float *p_humidity ,float *p_temperature)
- {
- const float C1=-4.0; // 12位濕度精度 修正公式
- const float C2=+0.0405; // 12位濕度精度 修正公式
- const float C3=-0.0000028; // 12位濕度精度 修正公式
- const float T1=+0.01; // 14位溫度精度 5V條件 修正公式
- const float T2=+0.00008; // 14位溫度精度 5V條件 修正公式
- float rh=*p_humidity; // rh: 12位 濕度
- float t=*p_temperature; // t: 14位 溫度
- float rh_lin; // rh_lin: 濕度 linear值
- float rh_true; // rh_true: 濕度 ture值
- float t_C; // t_C : 溫度 ℃
- t_C=t*0.01 - 40; //補(bǔ)償溫度
- rh_lin=C3*rh*rh + C2*rh + C1; //相對濕度非線性補(bǔ)償
- rh_true=(t_C-25)*(T1+T2*rh)+rh_lin; //相對濕度對于溫度依賴性補(bǔ)償
- *p_temperature=t_C; //返回溫度結(jié)果
- *p_humidity=rh_true; //返回濕度結(jié)果
- }
- /*********************************************************/
- // 溫度校正
- /*********************************************************/
- unsigned char TempCorrect(int temp)
- {
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
|
-
0.png
(16.58 KB, 下載次數(shù): 46)
下載附件
2017-12-5 00:23 上傳
評分
-
查看全部評分
|