1,在指紋模塊和DS1302時間模塊基礎上添加了DHT11溫濕度檢測功能,水位檢測模塊,繼電器控制的加濕功能。
2,供電是通過DC5V供電給單片機
3,指紋模塊通過AMS1117降壓模塊供電5V-3.3V,通過串口和單片機通信。
4,DS1302也是需要通過3.3V供電,時間功能可以通過單片機自帶的計時器編寫代碼完成
5,DHT11的3引腳可以滯空,并且數據傳輸引腳可以不用加上拉電阻。
資料內涵視頻+代碼+原理圖
實物圖
IMG_1989.jpg (2.64 MB, 下載次數: 67)
下載附件
2021-2-25 12:14 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
TO9(4Q_33O9BY]])MML~]`H.png (155.26 KB, 下載次數: 61)
下載附件
2021-2-25 12:14 上傳
51hei.png (24.06 KB, 下載次數: 62)
下載附件
2021-2-25 14:58 上傳
資料內涵原理圖+代碼+運行視頻
最后歡迎加入技術交流群:938456660可以與我交流
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include "buzz.h"
- #include "key.h"
- #include "uart.h"
- #include "delay.h"
- #include "FPM10A.h"
- #include "lcd_1602.h"
- #include "ds1302.h"
- sbit Data=P1^3;
- sbit beep=P2^7;
- sbit LED=P3^7;
- sbit jiashi=P1^4;
- sbit JDQ=P3^6;
- sbit SHUI=P3^4;
- typedef unsigned int u16; //對數據類型進行聲明定義
- typedef unsigned char u8;
- char DisplayData[16]=" - : : ";
- char DisplayData1[16]="Humi: %Temp: C";
- int wendu=0,shidu=0,cishu=0;
- void DHT11_delay_us(uchar n);
- void DHT11_delay_ms(uint z);
- void DHT11_start(void);
- u8 DHT11_rec_byte(void);
- void DHT11_receive(void);
- void datapros()
- {
- Ds1302ReadTime(); //反饋時間TIME
- DisplayData[1] = TIME[4]/16+0x30;
- DisplayData[2] = (int)(TIME[4]&0x0f)+0x30; //月
- DisplayData[4] = TIME[3]/16+0x30;
- DisplayData[5] = (int)(TIME[3]&0x0f)+0x30; //日
-
- DisplayData[7] = TIME[2]/16+0x30; //時
- DisplayData[8] = (int)(TIME[2]&0x0f)+0x30;
-
- DisplayData[10] = TIME[1]/16+0x30; //分
- DisplayData[11] = (int)(TIME[1]&0x0f)+0x30;
-
- DisplayData[13] = TIME[0]/16+0x30; //秒
- DisplayData[14] = (int)(TIME[0]&0x0f)+0x30;
- }
- void main()
- {
- u8 i;
- LCD1602_Init(); //初始化液晶
- Uart_Init(); //初始化串口
- Key_Init(); //初始化按鍵
- LED=0;
- while(1)
- {
- if(KEY_ENTER==0) //檢測按鍵K1是否按下
- {
- Delay_Ms(10); //消除抖動 一般大約10ms
- if(KEY_ENTER==0) //再次判斷按鍵是否按下
- {
- cishu++;
- while(!KEY_ENTER); //檢測按鍵是否松開
- }
- }
-
- //----------------------------時間功能模塊------------------------------------
- if(cishu==1)
- {
- LCD1602_Display(0x80,"Fingerprint Test",0,16); //液晶開機顯示界面
- datapros(); //數據處理函數
- LCD1602_WriteCMD(0x80+0x40);
- for(i=0;i<16;i++)
- {
- LCD1602_WriteDAT(DisplayData[i]);
- }
- }
-
- //---------------------------指紋模塊功能------------------------------------
- if(cishu==2)
- {
- Delay_Ms(200); //延時500MS,等待指紋模塊復位
- Device_Check(); //校對指紋模塊是否接入正確,液晶做出相應的提示
- Delay_Ms(1000); //對接成功界面停留一定時間
- while(1)
- {
- if(KEY_ENTER==0) //檢測按鍵K1是否按下
- {
- Delay_Ms(10); //消除抖動 一般大約10ms
- if(KEY_ENTER==0) //再次判斷按鍵是否按下
- {
- cishu++;
- while(!KEY_ENTER); //檢測按鍵是否松開
- }
- }
- //--------------------------溫濕度功能模塊------------------------------------
- if(cishu==3)
- {
- while(1)
- {
- DHT11_receive();
- LCD1602_WriteCMD(0x01);
- LCD1602_WriteCMD(0x80);
- for(i=0;i<16;i++)
- {
- LCD1602_WriteDAT(DisplayData1[i]);
- }
- LCD1602_Display(0xc0,"H:70L:20H:30L:30",0,16);
- Delay_Ms(100);
- if(wendu<30)
- {
- LED=0;
- beep=~beep; //蜂鳴器聲音很小
- Delay_Ms(200);
- LED=1;
- }
- else
- {
- LED=0;
- beep=0;
- }
- if(shidu<20)
- {
- if(SHUI==1){JDQ=1;}
- }
- else
- {
- JDQ=0;
- }
- }
- }
-
- //--------------------進入主功能界面------------------------------------
- LCD1602_Display(0x80," search finger ",0,16); //第一排顯示搜索指紋
- LCD1602_Display(0xc0," Add delete",0,16); //添加和刪除指紋
- if(local_date==0)
- {
- LCD1602_Display(0x80, " *",0,2);
- LCD1602_Display(0xc0, " ",0,2);
- LCD1602_Display(0xc0+8," ",0,2);
- }
- else if(local_date==1)
- {
- LCD1602_Display(0x80, " ",0,2);
- LCD1602_Display(0xc0, " *",0,2);
- LCD1602_Display(0xc0+8," ",0,2);
- }
- else if(local_date==2)
- {
- LCD1602_Display(0x80, " ",0,2);
- LCD1602_Display(0xc0, " ",0,2);
- LCD1602_Display(0xc0+8," *",0,2);
- }
- //確認鍵
- if(KEY_OK == 0)
- {
- while(KEY_OK == 0);//等待松開按鍵
- switch(local_date)
- {
- case 0: //搜索指紋
- FPM10A_Find_Fingerprint();
- break;
-
- case 1: //添加指紋
- FPM10A_Add_Fingerprint();
- break;
-
- case 2: //清空指紋
- FPM10A_Delete_All_Fingerprint();
- break;
- }
- }
- //切換鍵
- if(KEY_DOWN == 0)
- {
- while(KEY_DOWN == 0); //等待松開按鍵
- if(local_date<=2)
- {
- local_date++;
- if(local_date==3)
- local_date=0;
- }
- }
- Delay_Ms(100); //延時判斷100MS檢測一次
- }
- }
- }
- }
- void DHT11_delay_us(uchar n)//延遲函數
- {
- while(--n);
- }
- void DHT11_delay_ms(uint z)//延遲函數
- {
- uint i,j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- void DHT11_start()//開始
- {
- Data=1;
- DHT11_delay_us(2);
- Data=0;
- DHT11_delay_ms(20);
- Data=1;
- DHT11_delay_us(30);
- }
- u8 DHT11_rec_byte()
- {
- uchar i,dat=0;
- for(i=0;i<8;i++)
- {
- while(!Data);
- DHT11_delay_us(8);
- dat<<=1;
- if(Data==1)
- dat+=1;
- while(Data);
- }
- return dat;
- }
- void DHT11_receive()
- {
- uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
- DHT11_start();
- if(Data==0)
- {
- while(Data==0); //等待數據
- DHT11_delay_us(40); //延時80us
- R_H=DHT11_rec_byte(); //濕度高位
- R_L=DHT11_rec_byte(); //濕度低位
- T_H=DHT11_rec_byte(); //溫度高位
- T_L=DHT11_rec_byte(); //溫度低位
- revise=DHT11_rec_byte(); //獲取數據
- DHT11_delay_us(25); //延時
- if((R_H+R_L+T_H+T_L)==revise) //校驗
- {
- RH=R_H;
- RL=R_L;
- TH=T_H;
- TL=T_L;
- }
- shidu=RH;
- wendu=TH;
- DisplayData1[5]=shidu/10+0x30;
- DisplayData1[6]=shidu%10+0x30;
- DisplayData1[13]=wendu/10+0x30;
- DisplayData1[14]=wendu%10+0x30;
- }
- }
復制代碼
代碼+PCB+原理圖:
原理圖+代碼+視頻.rar
(7.27 MB, 下載次數: 145)
2021-2-25 12:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|