找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3156|回复: 4
打印 上一主题 下一主题
收起左侧

单片机+DS1302时钟+AS608指纹+LCD1602液晶显示程序

[复制链接]
跳转到指定楼层
楼主
STC89C52最小系统
此模块是为了控制相关门禁,或是一些特定情况下要用到比较高级的锁。DS1302时钟显示不用手动写时钟代码就很方便,这一次用的是stc89c52,就很熟悉。
总结一下:LCD1602是GND和5V接一起。

               DS1302时钟模块确保3.3V就可以

               AS608指纹模块调试他的波特率,单片机最小系统的晶振要是11.05926mH

要原理图,截屏的图片不知道咋样拉进来。就先这样吧

制作出来的实物图如下:


代码和文件都可以下载
  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. typedef unsigned int u16;          //对数据类型进行声明定义
  11. typedef unsigned char u8;
  12. u8 DisplayData[16]="   -     :  :   ";

  13. void datapros()         
  14. {
  15.   Ds1302ReadTime();      //反馈时间TIME

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

  18.   DisplayData[4] = TIME[3]/16+0x30;
  19.   DisplayData[5] = (int)(TIME[3]&0x0f)+0x30;     //日
  20.         
  21.         DisplayData[7] = TIME[2]/16+0x30;                                                        //时
  22.         DisplayData[8] = (int)(TIME[2]&0x0f)+0x30;        
  23.         
  24. //        DisplayData[10] = ":";
  25.         DisplayData[10] = TIME[1]/16+0x30;                                                //分
  26.         DisplayData[11] = (int)(TIME[1]&0x0f)+0x30;        
  27. //        DisplayData[13] = ":";
  28. //        DisplayData[5] = ;
  29.         DisplayData[13] = TIME[0]/16+0x30;                                                //秒
  30.         DisplayData[14] = (int)(TIME[0]&0x0f)+0x30;
  31. }



  32. void main()
  33. {                                                        
  34.         u8   i;
  35.         LCD1602_Init();                        //初始化液晶
  36.         LCD1602_Display(0x80,"Fingerprint Test",0,16);         //液晶开机显示界面
  37.   Uart_Init();                        //初始化串口
  38.         Key_Init();                                //初始化按键

  39.   while(1)
  40.         {
  41.                 datapros();                                                 //数据处理函数               
  42.                 LCD1602_WriteCMD(0x80+0x40);
  43.                 for(i=0;i<16;i++)
  44.                 {
  45.                 LCD1602_WriteDAT(DisplayData[i]);        
  46.                 }

  47.         if(KEY_ENTER==0)                  //检测按键K1是否按下
  48.         {        
  49.                 Delay_Ms(10);    //消除抖动 一般大约10ms
  50.                 if(KEY_ENTER==0)         //再次判断按键是否按下
  51.                 {        
  52.                 Delay_Ms(200);          //延时500MS,等待指纹模块复位
  53.                 Device_Check();                           //校对指纹模块是否接入正确,液晶做出相应的提示
  54.                 Delay_Ms(1000);                        //对接成功界面停留一定时间
  55.                         while(1)
  56.                         {
  57.                                             /**************进入主功能界面****************/
  58.                 LCD1602_Display(0x80,"  search finger ",0,16);         //第一排显示搜索指纹
  59.                 LCD1602_Display(0xc0,"  Add     delete",0,16);         //添加和删除指纹
  60.                 if(local_date==0)
  61.                 {
  62.                         LCD1602_Display(0x80,  " *",0,2);
  63.                         LCD1602_Display(0xc0,  "  ",0,2);
  64.                         LCD1602_Display(0xc0+8,"  ",0,2);        
  65.                 }
  66.                 else if(local_date==1)
  67.                 {
  68.                         LCD1602_Display(0x80,  "  ",0,2);
  69.                         LCD1602_Display(0xc0,  " *",0,2);
  70.                         LCD1602_Display(0xc0+8,"  ",0,2);        
  71.                 }
  72.                 else if(local_date==2)
  73.                 {
  74.                         LCD1602_Display(0x80,  "  ",0,2);
  75.                         LCD1602_Display(0xc0,  "  ",0,2);
  76.                         LCD1602_Display(0xc0+8," *",0,2);        
  77.                 }                        
  78.                 //确认键
  79.                 if(KEY_OK == 0)
  80.                 {         
  81.                          while(KEY_OK == 0);//等待松开按键                                                               
  82.                         switch(local_date)
  83.                         {
  84.                                         case 0:  //搜索指纹                                                
  85.                                         FPM10A_Find_Fingerprint();                                                                                                                                                                                                
  86.                                         break;        
  87.                                        
  88.                                         case 1:         //添加指纹
  89.                                         FPM10A_Add_Fingerprint();
  90.                                         break;                                         
  91.                                        
  92.                                         case 2:        //清空指纹
  93.                                         FPM10A_Delete_All_Fingerprint();
  94.                                           break;
  95.                                 }
  96.                         }
  97.                     //切换键
  98.                         if(KEY_DOWN == 0)
  99.                         {
  100.                                  while(KEY_DOWN == 0); //等待松开按键                                
  101.                                    if(local_date<=2)
  102.                                 {
  103.                                         local_date++;
  104.                                         if(local_date==3)
  105.                                                 local_date=0;                                                
  106.                                 }               
  107.                         }                                                
  108.                         Delay_Ms(100); //延时判断100MS检测一次        
  109.                         }
  110.                 }
  111.                 while(!KEY_ENTER);         //检测按键是否松开
  112.         }               
  113.         }
  114. }
复制代码

全部程序: 开发板:LCD1602 AS608 DS1302.rar (131.93 KB, 下载次数: 89)

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:495323 发表于 2021-1-31 17:26 来自手机 | 显示全部楼层
无穷小量 发表于 2021-1-29 14:12
楼主请问我从1302获取的时间数据部分是问号,怎回事呢

下载文件、里面不是有我的联系方式嘛
回复

使用道具 举报

板凳
ID:495323 发表于 2021-2-18 14:48 来自手机 | 显示全部楼层
欢迎加入技术交流群:938456660
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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