精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SHT11驅(qū)動(dòng)

Harmony&嵌入式學(xué)習(xí) ? 來(lái)源:Harmony&嵌入式學(xué)習(xí) ? 作者:Harmony&嵌入式學(xué) ? 2023-07-17 09:28 ? 次閱讀

C文件

#include "reg52.H"
#include "stdio.h"
#include "intrins.h"
#include 

#define DB P0//液晶并行數(shù)據(jù)接口
sbit  RS = P2^0;//液晶指令數(shù)據(jù)信號(hào)
sbit  RW = P2^1;//液晶讀寫信號(hào)
sbit  E  = P2^2;//液晶使能信號(hào)


unsigned char  key_value;//獲取到按鍵的值

sbit Sck_P     = P1^1;			// SHT11傳感器時(shí)鐘管腳
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;				// 溫度下限報(bào)警值
signed char AlarmTH=30;				// 溫度上限報(bào)警值
signed char AlarmHL=40; 			    // 濕度下限報(bào)警值
signed char AlarmHH=80;				// 濕度上限報(bào)警值

unsigned char i;
unsigned char cnt_100ms;
unsigned char time_100ms_flag;
unsigned char open_del;//開(kāi)鎖成功延時(shí)計(jì)數(shù)
unsigned char open_flag;//鎖狀態(tài)標(biāo)志
sbit beep = P1^2;

sbit LedTL_P   = P1^3;			// 溫度過(guò)低報(bào)警指示燈
sbit LedTH_P   = P1^4;			// 溫度過(guò)高報(bào)警指示燈
sbit LedHL_P   = P1^5;			// 濕度過(guò)低報(bào)警指示燈
sbit LedHH_P   = P1^6;			// 濕度過(guò)高報(bào)警指示燈

/*******************************************************************************
* 函 數(shù) 名         : delay_ms
* 函數(shù)功能		   : 延時(shí)函數(shù),延時(shí)1ms
* 輸    入         : cnt
* 輸    出         : 無(wú)
* 說(shuō)    名         : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。
*******************************************************************************/
void delay_ms(unsigned int cnt)   //
{
	unsigned int x;
	for( ; cnt>0; cnt--)
	{
		for(x=110; x>0; x--);//軟件延時(shí)為1MS
	}
}
#if 0
void delay_us(unsigned int cnt)   //
{
	while(cnt--);
}
#endif
/******************************************************
** 函數(shù)名:time_init
** 描述  :定時(shí)器初始化
** 輸入  :無(wú)
** 輸出  :無(wú)
******************************************************/
void time_init(void)
{
	  TMOD |= 0x01;//time0 工作方式為1
	  TH0 = 0xf8;//裝載初值
	  TL0 = 0x2f;//裝載初值,為2ms(65535-63535)
      TR0 = 1;//開(kāi)啟定時(shí)器
	  ET0 = 1;//打開(kāi)中斷
	  EA=1;
}
/******************************************************
** 函數(shù)名:key_scan
** 描述  :按鍵掃描
** 輸入  :無(wú)
** 輸出  :無(wú)
******************************************************/
void key_scan(void)
{
	static unsigned char key_in_flag = 0;//按鍵按下標(biāo)志
	unsigned char key_l;//存儲(chǔ)掃描到行列值。
	key_value = 20;//按鍵值清除
	if((P3 & 0x0f) != 0x0f)//按鍵按下
	{
		delay_ms(1);//按鍵消抖動(dòng)
		if(((P3 & 0x0f) != 0x0f) && (key_in_flag == 1))
		{
			key_in_flag = 0;//松手檢測(cè)防止一直觸發(fā)
			P3 = 0x0f;
            //delay_ms(1);//按鍵消抖動(dòng)
			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;//(按鍵松開(kāi)標(biāo)志)
	}

}

/*******************************************************************************
* 函 數(shù) 名         : LcdWriteCom
* 函數(shù)功能		   : 向LCD寫入一個(gè)字節(jié)的命令
* 輸    入         : u8com
* 輸    出         : 無(wú)
*******************************************************************************/
void lcd_wri_com(unsigned char com)	  //寫入命令
{
	E = 0;	 //使能清零
	RS = 0;	 //選擇寫入命令
	RW = 0;	 //選擇寫入

	DB = com;
	delay_ms(1);

	E = 1;	 //寫入時(shí)序
	delay_ms(5);
	E = 0;
}

/*******************************************************************************
* 函 數(shù) 名         : LcdWriteData
* 函數(shù)功能		   : 向LCD寫入一個(gè)字節(jié)的數(shù)據(jù)
* 輸    入         : u8dat
* 輸    出         : 無(wú)
*******************************************************************************/

void lcd_wri_data(unsigned char dat)//寫入數(shù)據(jù)
{
	E = 0;	  //使能清零
	RS = 1;	  //選擇寫入數(shù)據(jù)
	RW = 0;	  //選擇寫入
	DB = dat;
	delay_ms(1);
	E = 1;	  //寫入時(shí)序
	delay_ms(5);
	E = 0;
}
/*******************************************************************************
* 函 數(shù) 名         : WriString
* 函數(shù)功能		   : 刷新屏幕顯示
* 輸    入         : hang,add,*p
* 輸    出         : 無(wú)
*******************************************************************************/
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ù)功能		   :
* 輸    入         :
* 輸    出         : 無(wú)
*******************************************************************************/
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)   //開(kāi)光標(biāo)
	{
		if(y==1)//如果選擇第一行
		lcd_wri_com(0x80+x);
	    else
		lcd_wri_com(0xc0+x);//將光標(biāo)移動(dòng)到秒個(gè)位
		lcd_wri_com(0x0f);//顯示光標(biāo)并且閃爍
	}
	else
	{
        if(y==1)//如果選擇第一行
		lcd_wri_com(0x80+x);
	    else
		lcd_wri_com(0xc0+x);//將光標(biāo)移動(dòng)到秒個(gè)位
		lcd_wri_com(0x0c);   //關(guān)光標(biāo)
	}
}

/*******************************************************************************
* 函 數(shù) 名       : LcdInit()
* 函數(shù)功能		 : 初始化LCD屏
* 輸    入       : 無(wú)
* 輸    出       : 無(wú)
*******************************************************************************/
void lcd_init(void)						  //LCD初始化子程序
{
	lcd_wri_com(0x38);//置功能8位雙行
	lcd_wri_com(0x0c);//顯示開(kāi)關(guān)光標(biāo)
	lcd_wri_com(0x06);//字符進(jìn)入模式屏幕不動(dòng)字符后移
	delay_ms(5);//延時(shí)5ms
	lcd_wri_com(0x01);  //清屏
	wri_string(1,0,"welcome user DHT");//初始化顯示
	wri_string(2,0,"H:   %RH T:   C ");//初始化顯示
}

/*********************************************************/
// 往SHT11寫入一個(gè)字節(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_();						// 延時(shí)3us
		_nop_();
		_nop_();
		Sck_P=0;
	}
	Data_P=1;    					// 釋放數(shù)據(jù)線
	Sck_P=1;
	error=Data_P;  				// 檢查應(yīng)答信號(hào),確認(rèn)通訊正常
	_nop_();
	_nop_();
	_nop_();
	Sck_P=0;
	Data_P=1;
	return error; 				// error=1 通訊錯(cuò)誤
}


/*********************************************************/
// 從SHT11讀出一個(gè)字節(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_();							// 延時(shí)3us
	_nop_();
	_nop_();
	Sck_P=0;
	_nop_();
	_nop_();
	_nop_();
	Data_P=1; 						// 釋放數(shù)據(jù)線
	return val;
}


/*********************************************************/
// SHT11啟動(dòng)傳輸
/*********************************************************/
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;i970)  temp=970;
	if(temp>235)  temp=temp+10;
	if(temp>555)  temp=temp+10;
	if(temp>875)  temp=temp+10;
	temp=(temp%1000)/10;
	return temp;
}
/*********************************************************/
// 濕度校正
/*********************************************************/
unsigned char HumiCorrect(unsigned int humi)
{
	if(humi>999)  humi=999;
	if((humi>490)&&(humiAlarmTH)				// 溫度是否過(guò)高
	{
		LedTH_P=0;
		LedTL_P=1;
	}
	else if(tempAlarmHH)	   		// 濕度是否過(guò)高
	{
		LedHH_P=0;
	  	LedHL_P=1;
	}
	else if(humi3)
                            {
                                curr_menu = 0;
                                lcd1602_guanbiao(2,7,0);
                                now_window = normal_mode;
                                wri_string(1,0,"welcome user DHT");//初始化顯示
	                            wri_string(2,0,"H:   %RH T:   C ");//初始化顯示
	                            lcd_write_char(2,2,humi);
                        		lcd_write_char(2,11,temp);
                        		lcd_wri_com(0xcd);
                        		lcd_wri_data(0xdf);
                            }
                    }
                    if (key_value == 2)
                    {
                            if(curr_menu==0)
                            {
                                 if(++AlarmTL>99)
                                 {
                                     AlarmTL = 0;
                                 }
                                 lcd_write_char(1,2,AlarmTL);
                                 lcd1602_guanbiao(1,3,1);
                            }
                            else if (curr_menu==1)
                            {
                                 if(++AlarmTH>99)
                                 {
                                     AlarmTH = 0;
                                 }
                                 lcd_write_char(1,6,AlarmTH);
                                 lcd1602_guanbiao(1,7,1);
                            }
                            else if(curr_menu==2)
                            {
                                if(++AlarmHL>99)
                                 {
                                     AlarmHL = 0;
                                 }
                                 lcd_write_char(2,2,AlarmHL);
                                 lcd1602_guanbiao(2,3,1);
                            }
                            else if(curr_menu==3)
                            {
                                 if(++AlarmHH>99)
                                 {
                                     AlarmHH = 0;
                                 }
                                 lcd_write_char(2,6,AlarmHH);
                                 lcd1602_guanbiao(2,7,1);
                            }
                    }
                    if (key_value == 3)
                    {
                            if(curr_menu==0)
                            {
                                 if(--AlarmTL50)
	   {
			cnt_100ms = 0;
			time_100ms_flag = 1;
	   }
	   TR0 = 1;
	   TH0 = 0xf8;
	   TL0 = 0x2f;//裝載初值2ms(65535-63535)
}


審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2548

    文章

    50740

    瀏覽量

    752137
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1827

    瀏覽量

    85186
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1721

    瀏覽量

    131377
  • C文件
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    2834
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    濕度檢測(cè)SHT11代碼

    哪位大師幫忙寫下sht11濕度檢測(cè)的代碼 只要濕度檢測(cè) 并驅(qū)動(dòng)4位74ls164 led數(shù)碼管 萬(wàn)分感謝 奉上全部金幣
    發(fā)表于 05-02 22:52

    如何使用SHT11測(cè)溫度濕度

    本人使用SHT11測(cè)溫度濕度,哪位大蝦幫幫我啊?急!!!可以加本人qq342271847,再細(xì)說(shuō)。
    發(fā)表于 05-03 19:20

    基于單片機(jī)的SHT11的溫濕度監(jiān)測(cè)

    我做的一個(gè)基于單片機(jī)的溫濕度控制 傳感器使用的是SHT11我自己找不出程序的錯(cuò)誤 可是仿真確無(wú)法成功,望大俠指點(diǎn)一二啊 用液晶顯示所測(cè)溫濕度 接的是單片機(jī)P1口,由于只需要向其寫數(shù)據(jù) 所以R/W接地
    發(fā)表于 05-13 19:55

    Sht11濕度測(cè)量仿真ver1.1

    Sht11濕度測(cè)量仿真ver1.1
    發(fā)表于 10-24 16:39

    SHT11溫濕度測(cè)量

    SHT11溫濕度測(cè)量
    發(fā)表于 11-24 10:16

    基于sht11設(shè)計(jì)溫濕度檢測(cè)

    基于sht11設(shè)計(jì)溫濕度檢測(cè)
    發(fā)表于 05-13 23:23

    多路sht11檢測(cè)電路請(qǐng)給點(diǎn)建議

    本人已經(jīng)做好了單路sht11檢測(cè)電路,現(xiàn)要擴(kuò)展四路的檢測(cè)電路。大伙給小弟點(diǎn)建議,先謝了
    發(fā)表于 05-14 10:26

    SHT21和SHT11有啥區(qū)別,各位大神誰(shuí)有SHT21的源代碼沒(méi)。。

    網(wǎng)上看到大部分是溫濕度傳感器SHT11的源程序,SHT21和HTU21D的源代碼很少見(jiàn)到。不知道11和21有什么區(qū)別,求大神幫忙。
    發(fā)表于 07-21 16:17

    請(qǐng)問(wèn)SHT11測(cè)到的溫濕度如何在數(shù)碼管上顯示?SHT11的程序用的官方的,如何增加數(shù)碼管顯示?

    請(qǐng)問(wèn)SHT11測(cè)到的溫濕度如何在數(shù)碼管上顯示?SHT11的程序用的官方的,如何增加數(shù)碼管顯示?采用四位數(shù)碼管顯示溫度,四位數(shù)碼管顯示濕度。
    發(fā)表于 05-22 22:44

    數(shù)字溫濕度傳感器SHT11與CC2430應(yīng)用接口電路

    數(shù)字溫濕度傳感器SHT11與CC2430應(yīng)用接口電路 設(shè)計(jì)中采用了數(shù)字溫濕度傳感器SHT11,該傳感器通過(guò)無(wú)線網(wǎng)絡(luò)對(duì)監(jiān)測(cè)區(qū)域內(nèi)溫度和濕度進(jìn)行
    發(fā)表于 02-16 12:02 ?1770次閱讀
    數(shù)字溫濕度傳感器<b class='flag-5'>SHT11</b>與CC2430應(yīng)用接口電路

    基于CXA1191和SHT11的無(wú)線溫濕度監(jiān)測(cè)系統(tǒng)

    為降低設(shè)計(jì)成本,利用CXA1191和SHT11實(shí)現(xiàn)了一個(gè)無(wú)線溫濕度監(jiān)測(cè)系統(tǒng)。在CXA1191原有的廣播接收功能的基礎(chǔ)上,巧妙結(jié)合編碼技術(shù),成功實(shí)現(xiàn)了數(shù)據(jù)無(wú)線傳輸功能,并選擇SHT11實(shí)現(xiàn)高性能的
    發(fā)表于 04-12 17:57 ?118次下載
    基于CXA1191和<b class='flag-5'>SHT11</b>的無(wú)線溫濕度監(jiān)測(cè)系統(tǒng)

    sht11采集與顯示有仿真圖

    SHT11進(jìn)行溫濕度采集與顯示 用SHT11進(jìn)行溫度與濕度的采集,結(jié)果讀到單片機(jī),經(jīng)過(guò)計(jì)算變?yōu)闇囟?-100和濕度0-99%,進(jìn)行LCD或數(shù)碼管顯示。
    發(fā)表于 07-12 15:29 ?43次下載

    SHT11仿真源程序protues仿真程序SHT11溫濕度傳感器

    SHT11仿真源程序protues仿真程序SHT11溫濕度傳感器程序仿真代碼
    發(fā)表于 01-14 22:32 ?222次下載

    sht11和dht11有什么區(qū)別_dht22可以替換dht11

    本文介紹了SHT11特點(diǎn)、SHT11引腳及功能說(shuō)明與DHT22封裝信息,其次介紹了SHT11的內(nèi)部結(jié)構(gòu)和工作原理及應(yīng)用領(lǐng)域的介紹,對(duì)dht11引腳與功能與封裝信息進(jìn)行了詳解,最后介紹了
    發(fā)表于 01-26 13:54 ?8.5w次閱讀
    <b class='flag-5'>sht11</b>和dht<b class='flag-5'>11</b>有什么區(qū)別_dht22可以替換dht<b class='flag-5'>11</b>嗎

    PIC16F887 單片機(jī) proteus SHT11

    PIC16F887 單片機(jī) proteus SHT11
    發(fā)表于 11-16 13:06 ?9次下載
    PIC16F887 單片機(jī) proteus <b class='flag-5'>SHT11</b>