找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3648|回复: 1
收起左侧

LCD1602+AS608+DS1302指纹模块+继电器+水位检测模块+DHT11程序原理图PCB

[复制链接]
ID:495323 发表于 2021-2-25 12:54 | 显示全部楼层 |阅读模式
              1,在指纹模块和DS1302时间模块基础上添加了DHT11温湿度检测功能,水位检测模块,继电器控制的加湿功能。

               2,供电是通过DC5V供电给单片机

              3,指纹模块通过AMS1117降压模块供电5V-3.3V,通过串口和单片机通信。

              4,DS1302也是需要通过3.3V供电,时间功能可以通过单片机自带的计时器编写代码完成

              5,DHT11的3引脚可以滞空,并且数据传输引脚可以不用加上拉电阻。
            
             资料内涵视频+代码+原理图


             实物图

             IMG_1989.jpg



            Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)

             TO9(4Q_33O9BY]])MML~]`H.png

51hei.png

             资料内涵原理图+代码+运行视频
  最后欢迎加入技术交流群:938456660可以与我交流
单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include "buzz.h"
  4. #include "key.h"
  5. #include "uart.h"
  6. #include "delay.h"
  7. #include "FPM10A.h"
  8. #include "lcd_1602.h"
  9. #include "ds1302.h"

  10. sbit Data=P1^3;
  11. sbit beep=P2^7;
  12. sbit LED=P3^7;
  13. sbit jiashi=P1^4;
  14. sbit JDQ=P3^6;
  15. sbit SHUI=P3^4;

  16. typedef unsigned int u16;          //对数据类型进行声明定义
  17. typedef unsigned char u8;
  18. char DisplayData[16]="   -     :  :   ";
  19. char DisplayData1[16]="Humi:  %Temp:  C";
  20. int wendu=0,shidu=0,cishu=0;


  21. void DHT11_delay_us(uchar n);
  22. void DHT11_delay_ms(uint z);
  23. void DHT11_start(void);
  24. u8 DHT11_rec_byte(void);
  25. void DHT11_receive(void);

  26. void datapros()         
  27. {
  28.   Ds1302ReadTime();      //反馈时间TIME

  29.   DisplayData[1] = TIME[4]/16+0x30;
  30.   DisplayData[2] = (int)(TIME[4]&0x0f)+0x30;                        //月

  31.   DisplayData[4] = TIME[3]/16+0x30;
  32.   DisplayData[5] = (int)(TIME[3]&0x0f)+0x30;     //日
  33.         
  34.         DisplayData[7] = TIME[2]/16+0x30;                                                        //时
  35.         DisplayData[8] = (int)(TIME[2]&0x0f)+0x30;        
  36.         

  37.         DisplayData[10] = TIME[1]/16+0x30;                                                //分
  38.         DisplayData[11] = (int)(TIME[1]&0x0f)+0x30;        

  39.         
  40.         DisplayData[13] = TIME[0]/16+0x30;                                                //秒
  41.         DisplayData[14] = (int)(TIME[0]&0x0f)+0x30;
  42. }

  43. void main()
  44. {                                                        
  45.         u8   i;
  46.         LCD1602_Init();                        //初始化液晶
  47.   Uart_Init();                        //初始化串口
  48.         Key_Init();                                //初始化按键
  49.         LED=0;
  50.   while(1)
  51.         {               
  52.         if(KEY_ENTER==0)                  //检测按键K1是否按下
  53.         {        
  54.                 Delay_Ms(10);    //消除抖动 一般大约10ms
  55.                 if(KEY_ENTER==0)         //再次判断按键是否按下
  56.                 {
  57.                         cishu++;
  58.                         while(!KEY_ENTER);         //检测按键是否松开
  59.                 }               
  60.         }        
  61.         
  62. //----------------------------时间功能模块------------------------------------
  63.                 if(cishu==1)
  64.         {
  65.         LCD1602_Display(0x80,"Fingerprint Test",0,16);         //液晶开机显示界面
  66.         datapros();                                                 //数据处理函数        
  67.         LCD1602_WriteCMD(0x80+0x40);
  68.         for(i=0;i<16;i++)
  69.         {
  70.                 LCD1602_WriteDAT(DisplayData[i]);        
  71.         }
  72.         }               
  73.                                                                                        
  74. //---------------------------指纹模块功能------------------------------------        
  75.         if(cishu==2)
  76.         {
  77.                 Delay_Ms(200);          //延时500MS,等待指纹模块复位
  78.                 Device_Check();                           //校对指纹模块是否接入正确,液晶做出相应的提示
  79.                 Delay_Ms(1000);                        //对接成功界面停留一定时间
  80.                 while(1)
  81.                 {
  82.                                 if(KEY_ENTER==0)                  //检测按键K1是否按下
  83.         {        
  84.                 Delay_Ms(10);    //消除抖动 一般大约10ms
  85.                 if(KEY_ENTER==0)         //再次判断按键是否按下
  86.                 {
  87.                         cishu++;
  88.                         while(!KEY_ENTER);         //检测按键是否松开
  89.                 }               
  90.         }        
  91. //--------------------------温湿度功能模块------------------------------------        
  92.         if(cishu==3)
  93.         {
  94.         while(1)
  95.         {
  96.                 DHT11_receive();
  97.                 LCD1602_WriteCMD(0x01);
  98.                 LCD1602_WriteCMD(0x80);
  99.                 for(i=0;i<16;i++)
  100.                 {
  101.                 LCD1602_WriteDAT(DisplayData1[i]);        
  102.                 }
  103.                 LCD1602_Display(0xc0,"H:70L:20H:30L:30",0,16);
  104.                 Delay_Ms(100);
  105.                 if(wendu<30)
  106.                 {
  107.                         LED=0;
  108.                         beep=~beep;                                                                        //蜂鸣器声音很小
  109.                         Delay_Ms(200);
  110.                         LED=1;
  111.                 }
  112.                 else
  113.                 {
  114.                         LED=0;
  115.                         beep=0;
  116.                 }
  117.                 if(shidu<20)
  118.                 {
  119.                         if(SHUI==1){JDQ=1;}        
  120.                 }
  121.                 else
  122.                 {
  123.                         JDQ=0;
  124.                 }
  125.         }        
  126.         }
  127.         
  128. //--------------------进入主功能界面------------------------------------
  129.                 LCD1602_Display(0x80,"  search finger ",0,16);         //第一排显示搜索指纹
  130.                 LCD1602_Display(0xc0,"  Add     delete",0,16);         //添加和删除指纹
  131.                 if(local_date==0)
  132.                 {
  133.                         LCD1602_Display(0x80,  " *",0,2);
  134.                         LCD1602_Display(0xc0,  "  ",0,2);
  135.                         LCD1602_Display(0xc0+8,"  ",0,2);        
  136.                 }
  137.                 else if(local_date==1)
  138.                 {
  139.                         LCD1602_Display(0x80,  "  ",0,2);
  140.                         LCD1602_Display(0xc0,  " *",0,2);
  141.                         LCD1602_Display(0xc0+8,"  ",0,2);        
  142.                 }
  143.                 else if(local_date==2)
  144.                 {
  145.                         LCD1602_Display(0x80,  "  ",0,2);
  146.                         LCD1602_Display(0xc0,  "  ",0,2);
  147.                         LCD1602_Display(0xc0+8," *",0,2);        
  148.                 }                        
  149.                 //确认键
  150.                 if(KEY_OK == 0)
  151.                 {         
  152.                          while(KEY_OK == 0);//等待松开按键                                                               
  153.                         switch(local_date)
  154.                         {
  155.                                         case 0:  //搜索指纹                                                
  156.                                         FPM10A_Find_Fingerprint();                                                                                                                                                                                                
  157.                                         break;        
  158.                                        
  159.                                         case 1:         //添加指纹
  160.                                         FPM10A_Add_Fingerprint();
  161.                                         break;                                         
  162.                                        
  163.                                         case 2:        //清空指纹
  164.                                         FPM10A_Delete_All_Fingerprint();
  165.                                           break;
  166.                                 }
  167.                         }
  168.                     //切换键
  169.                         if(KEY_DOWN == 0)
  170.                         {
  171.                                  while(KEY_DOWN == 0); //等待松开按键                                
  172.                                    if(local_date<=2)
  173.                                 {
  174.                                         local_date++;
  175.                                         if(local_date==3)
  176.                                                 local_date=0;                                                
  177.                                 }               
  178.                         }                                                
  179.                         Delay_Ms(100); //延时判断100MS检测一次
  180.                 }
  181.         }
  182.                 }
  183. }

  184. void DHT11_delay_us(uchar n)//延迟函数
  185. {
  186.     while(--n);
  187. }

  188. void DHT11_delay_ms(uint z)//延迟函数
  189. {
  190.    uint i,j;
  191.    for(i=z;i>0;i--)
  192.       for(j=110;j>0;j--);
  193. }

  194. void DHT11_start()//开始
  195. {
  196.    Data=1;
  197.    DHT11_delay_us(2);
  198.    Data=0;
  199.    DHT11_delay_ms(20);   
  200.    Data=1;
  201.    DHT11_delay_us(30);
  202. }

  203. u8 DHT11_rec_byte()   
  204. {
  205.    uchar i,dat=0;
  206.   for(i=0;i<8;i++)   
  207.    {         
  208.       while(!Data);   
  209.       DHT11_delay_us(8);   
  210.       dat<<=1;         
  211.       if(Data==1)   
  212.          dat+=1;
  213.       while(Data);      
  214.     }  
  215.     return dat;
  216. }

  217. void DHT11_receive()   
  218. {
  219.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  220.     DHT11_start();
  221.     if(Data==0)
  222.     {
  223.         while(Data==0);   //等待数据   
  224.         DHT11_delay_us(40);  //延时80us
  225.         R_H=DHT11_rec_byte();    //湿度高位  
  226.         R_L=DHT11_rec_byte();    //湿度低位  
  227.         T_H=DHT11_rec_byte();    //温度高位
  228.         T_L=DHT11_rec_byte();    //温度低位
  229.         revise=DHT11_rec_byte(); //获取数据

  230.         DHT11_delay_us(25);    //延时

  231.         if((R_H+R_L+T_H+T_L)==revise)      //校验
  232.         {
  233.             RH=R_H;
  234.             RL=R_L;
  235.             TH=T_H;
  236.             TL=T_L;
  237.         }
  238.                                 shidu=RH;
  239.                                 wendu=TH;
  240.                                 DisplayData1[5]=shidu/10+0x30;
  241.                                 DisplayData1[6]=shidu%10+0x30;
  242.                                 DisplayData1[13]=wendu/10+0x30;
  243.                                 DisplayData1[14]=wendu%10+0x30;
  244.     }
  245. }

复制代码

代码+PCB+原理图: 原理图+代码+视频.rar (7.27 MB, 下载次数: 136)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:495323 发表于 2021-6-5 20:51 来自手机 | 显示全部楼层
欢迎加入技术交流群:938456660与我交流
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表