数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 8436|回复: 15

[综合] stm8s单片机模拟ID卡 实现ID卡号显示,多卡合一

[复制链接]
发表于 2021-8-24 16:00:08 | 显示全部楼层 |阅读模式
为什么要用单片机模拟ID卡,详见老站帖子 http://bbs.mydigit.cn/read.php?tid=2144071
最近公司淡季,比较闲,就又翻出之前没有弄好的小玩意加以优化。本次优化主要有以下几点:
1.小型迷你化,之前做的个傻大笨粗,外观丑到不忍直视
2.屏幕显示id卡号,或者显示如:home work 等等方面记忆的单词
3.多卡合一,实现多个门禁只需要带一张卡就可以开

成品图如下:




主要功能及特点:
1.主控使用smt8s003 VK1088B段码屏驱动芯片,8位段码屏,纽扣电池供电
2.单按键实现停机模式唤醒及开机模式下多卡之间切换
3.理论上可以内置N张ID卡,实现多卡合一

原理图:


PCB


打板归来,现在DIY真的方便,打板都不要钱包邮,之前用热转印 PCB,东西做得傻大 现在做PCB就可以做的很精巧,在次感谢嘉立创和捷配。


焊接好元件,最头痛的就是线圈问题,钥匙扣里面的线圈大小刚好,就是线圈线太细了,一不小心就弄断报废了。


调试程序如下:

  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm8s.h"
  3. #include "stm8s_clk.h"
  4. #include "intrinsics.h"
  5. #include "stm8s_wwdg.h"
  6. #include "stm8s_gpio.h"
  7. #include "STM8_DELAY.h"
  8. #include "key.h"
  9. #include "tim1.h"
  10. #include "id_drive.h"
  11. #include "vk1088b.h"

  12. bool fPowerOn_flag = FALSE;  //ID卡状态 默认进入停机模式 也必须要先进入停机模式,因为进入停机模式前会开启总中断,如先进入开机模式 总中断无法打开 TIM1无法进入中断
  13. bool cont = FALSE; //当进入开机模式后,会初始化时钟,ID线圈引脚,TIM1定时器,此状态标志是为了防止在whlie循环中一直初始化定时器而无法进入定时器中断,让在开机状态下初始化只运行一次


  14. //uint8_t COUNTERINIT=0x7f;
  15. //uint8_t WINDOW=0x47;

  16. extern uint8_t sendcont; //在定时器中发送一次卡号累加一次,目的是为了实现发送N次卡号后进入停机模式节能


  17. /************************************************
  18. 系统时钟初始化函数
  19. *************************************************/
  20. void Clk_Init(void)               
  21. {
  22.   CLK_DeInit();//复位时钟寄存器
  23.   CLK_HSICmd(ENABLE);//使能内部高速时钟
  24.   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//配置内部高速时钟(时钟分频器:1分频),系统时钟16MHz 系统时钟必须16M 慢了之后定时器中断还没处理完又进中断了
  25.   CLK_ClockSecuritySystemEnable();//开启时钟安全系统
  26. }


  27. /************************************************
  28. 窗口看门狗初始化函数
  29. *************************************************/

  30. //void MWWDG_Init(void)
  31. //{
  32. //  WWDG_Init(COUNTERINIT, WINDOW);//COUNTERINIT = 0x7f,WINDOW = 0x77
  33. //}



  34. /************************************************
  35. 喂狗函数
  36. *************************************************/
  37. //void Free_WWDG(void)
  38. //{
  39. //  uint8_t CounterValue;
  40. //  CounterValue = (uint8_t)(WWDG_GetCounter() & 0x7F);
  41. //  
  42. //  /*
  43. //   * 判断是否小于所设置的窗口上限值
  44. //   * 只有小于窗口上限值才能清零
  45. //   */
  46. //  if(CounterValue < WINDOW){
  47. //    WWDG_SetCounter(COUNTERINIT);
  48. //    }
  49. //
  50. //}




  51. void Halt_OffDevice(void)
  52. {
  53.    
  54.   //停机前关闭不需要的功能模块的时钟  
  55.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1,DISABLE);
  56.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC,DISABLE);
  57.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2,DISABLE);
  58.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU,DISABLE);
  59.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C,DISABLE);
  60.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1,DISABLE);
  61.   CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI,DISABLE);
  62.    
  63.   
  64.   //对于IO口的设置,对于外设是高电平工作的,那么设置成
  65.   //推挽输出低,对于是低电平工作的那么设置成推挽输出高
  66.   

  67.   
  68.    
  69.   
  70.   GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);//ID_DRIVE   
  71.   GPIO_Init(GPIOD,GPIO_PIN_2,GPIO_MODE_OUT_PP_LOW_SLOW); //LCD_VCC
  72.   GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW); //LCD_GND
  73.   
  74.   GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_SLOW); //IVK1088B_CS
  75.   GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_SLOW); //IVK1088B_WR  
  76.   GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_OUT_PP_LOW_SLOW); //IVK1088B_DAT
  77.   
  78.   
  79.   
  80.   InPut_Init();
  81.   __enable_interrupt();
  82. }


  83. void System_Init(void)
  84. {
  85.    
  86.     Clk_Init();
  87.    
  88.     ID_DRIVE_Init();//线圈输出引脚初始化  
  89.     Tim1_Init();//线圈载波频率初始化
  90.    
  91. }



  92. int main(void)
  93. {
  94.   
  95.   
  96.   
  97.   Clk_Init();//系统时钟初始化函数
  98.   
  99.   
  100.   while (1){  
  101.         
  102.     if(fPowerOn_flag == FALSE){
  103.       Halt_OffDevice();//停机前关闭不需要的外设
  104.       halt();//进入停机模式
  105.       
  106.     }
  107.    
  108.     if(fPowerOn_flag){
  109.    
  110.       if(cont == FALSE){        
  111.          System_Init();
  112.          cont = TRUE;
  113.         }
  114.        if(cont){
  115.          if(sendcont == 100){
  116.            cont=FALSE;
  117.            sendcont=0;
  118.            fPowerOn_flag = FALSE;
  119.          }               
  120.        }
  121.       

  122.     }

  123.   }
  124.   
  125. }
复制代码

复制代码


组装成品: PCB做成这个形状也主要是为装进这个壳子里



更新:stm8s单片机模拟ID卡(125khz) 15卡合一,蓝牙连接安卓管理端(附全部源码)
https://www.mydigit.cn/thread-494109-1-1.html



程序和PCB源文件如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 2家元 +102 收起 理由
家睦 + 100
人间渡 + 2 謝謝分享

查看全部打赏

发表于 2021-8-24 16:17:27 | 显示全部楼层
支持哪些频率的ID卡?
:doubt::doubt::doubt:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-24 16:32:08 | 显示全部楼层
long2012 发表于 2021-8-24 16:17
支持哪些频率的ID卡?

125KHZ频率
回复 支持 反对

使用道具 举报

发表于 2021-8-24 16:45:25 | 显示全部楼层
用定时器模拟的 nfc 吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-24 16:51:44 | 显示全部楼层
junyee 发表于 2021-8-24 16:45
用定时器模拟的 nfc 吗?

嗯对 用的定时器
回复 支持 反对

使用道具 举报

发表于 2021-8-24 20:56:21 | 显示全部楼层
楼主很是厉害,这个壳子也好漂亮噢! 壳子是用什么做的呢?
回复 支持 反对

使用道具 举报

发表于 2021-8-25 13:28:47 | 显示全部楼层
这个看起来不错。125k的吧
回复 支持 反对

使用道具 举报

发表于 2021-8-25 13:48:52 | 显示全部楼层
楼主壳子在哪里搞的?很漂亮啊
回复 支持 反对

使用道具 举报

发表于 2021-8-27 11:13:14 | 显示全部楼层
125K的很少,13M的多,能不能做这两种合起来的?
回复 支持 反对

使用道具 举报

发表于 2021-12-22 13:01:26 | 显示全部楼层
这个盒子漂亮,哪里可以买到?
回复 支持 反对

使用道具 举报

发表于 2022-3-26 17:27:05 | 显示全部楼层
我记得有个用 STC 单片机做的模拟多卡的,怎么找遍数码之家新旧站都找不到了呢?哪们知道的帮帮忙。
回复 支持 反对

使用道具 举报

发表于 2022-9-25 13:09:59 | 显示全部楼层
这是高手啊
回复 支持 反对

使用道具 举报

发表于 2023-1-31 14:23:23 | 显示全部楼层
这个可以做成品分享嘛
回复 支持 反对

使用道具 举报

发表于 2023-6-28 09:53:41 | 显示全部楼层
125K的,谐振幅度多少卡片会有回复呢
回复 支持 反对

使用道具 举报

发表于 2023-6-29 10:19:36 | 显示全部楼层
单片机玩溜了做什么都比较顺滑啊。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-20 01:19 , Processed in 0.343200 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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