考勤系统是用于标记办公室和学校存在的常用系统。从在考勤登记册中手动标记考勤到使用高科技应用程序和生物识别系统,这些系统都得到了显着改进。在我们以前的项目中,我们已经涵盖了使用RFID和AVR微控制器,8051和树莓派的其他电子考勤系统项目。在这个项目中,我们使用指纹模块和Arduino来获取和保存考勤数据和记录。通过使用指纹传感器,系统对用户来说将变得更加安全。以下部分介绍了使用 Arduino 制作基于指纹的生物识别考勤系统的技术细节。
必需组件
- 阿杜伊诺 -1
- 指纹模块 -1
- 按钮 - 4
- 指示灯 -1
- 1K 电阻器 -2
- 2.2K 电阻 -1
- 权力
- 连接线
- 箱
- 蜂鸣器 -1
- 16x2 液晶显示器 -1
- 面包板 -1
- RTC 模块 -1
项目描述:
在这个指纹考勤系统电路中,我们使用指纹传感器模块通过在系统中输入手指来验证真实的人或员工。在这里,我们使用4个按钮来注册,删除,向上/向下。注册和 DEL 密钥具有三重功能。ENROLL 密钥用于将新人员注册到系统中。因此,当用户想要注册新手指时,他/她需要按注册键,然后LCD要求输入ID,用户想要在其中存储指纹图像。现在,如果此时用户不想继续,那么他/她可以再次按REGISTER键返回。这次 ENROLL 键表现为后退键,即 ENROLL 键同时具有注册和返回功能。此外,注册密钥还用于通过串行监视器下载考勤数据。同样,DEL/OK 键也具有相同的双重功能,就像用户注册新手指时一样,然后他/她需要使用另外两个键(即 UP 和 DOWN)来选择手指 ID。现在用户需要按 DEL/OK 键(这次此键的行为类似于确定)以继续使用选定的 ID。Del键用于重置或删除Arduino的EEPROM中的数据。
指纹模块:
指纹传感器模块捕获手指的打印图像,然后将其转换为等效模板,并根据Arduino选择的ID将它们保存到其内存中。所有过程都由Arduino命令,例如拍摄指纹的图像,将其转换为模板并存储为ID等。
在这里,我们添加了一个黄色LED,表示指纹模块已准备好拍摄手指的图像。蜂鸣器也用于各种指示。Arduino是该系统的主要组件,它负责控制整个系统。
基于指纹的考勤系统工作原理
这个指纹考勤系统项目的工作相当简单。首先,用户需要在按钮的帮助下注册用户的指纹。为此,用户需要按REGISTER键,然后LCD要求输入指纹的ID,以按ID名称将其保存在内存中。所以现在用户需要使用向上/向下键输入ID。选择ID后,用户需要按确定键(DEL键)。现在LCD将要求将手指放在指纹模块上。现在用户需要将手指放在指纹模块上,然后模块获取手指图像。现在LCD会说从指纹模块中取出手指,然后再次要求再次放置手指。现在用户需要再次放置手指,模块获取图像并将其转换为模板,并通过选定的ID将其存储到指纹模块的内存中。现在,用户将被注册,他/她可以通过将手指放在指纹模块上来提供出勤。通过相同的方法,所有用户都将注册到系统中。
现在,如果用户想要删除或删除任何存储的ID或指纹,那么他/她需要按DEL键。按下删除键后,液晶屏将要求选择需要删除的ID。现在用户需要选择ID并按确定键(相同的DEL键)。现在LCD会让您知道指纹已成功删除。
考勤如何在此指纹考勤系统项目中工作:
每当用户将手指放在指纹模块上时,指纹模块就会捕获手指图像,并搜索系统中是否有任何ID与此指纹相关联。如果检测到指纹ID,则LCD将显示已注册出勤,同时蜂鸣器将发出一次哔哔声,LED将熄灭,直到系统准备好再次输入。
除了指纹模块,我们还使用了时间和日期的RTC模块。时间和日期在系统中连续运行。因此,每当真正的用户将手指放在指纹上并将它们保存在EEPROM中分配的内存插槽时,Arduino都会花费时间和日期。
在这里,我们在此系统中创建了5个用户空间,为期30天。通过按下Arduino中的RESET按钮,然后立即注册键将负责从Arduino EEPROM存储器通过串行监视器下载考勤数据。
内存管理:
我们在 Arduino UNO 中有 1023 字节的内存,其中我们有 1018 字节来存储数据,我们已经在 30 天内获取了 5 个用户出勤数据。每次出席都会记录时间和日期,因此这将成为 7 字节的数据。
所以所需的总内存是
5307=1050,所以这里我们需要更多的32字节
但是如果我们要使用 4 个用户,那么我们需要
4307=840
在这里,我们通过占用 5 个用户内存完成了这个项目演示。这样,我们将无法存储 32 字节或 5 个出席记录的 5^千^用户。
您可以通过更改代码中的某些行来尝试 4 个用户。我已经在需要更改的代码中做了注释。
指纹考勤系统项目电路图及说明
这个基于指纹的考勤系统项目的电路,如上图所示,非常简单。它具有用于控制项目所有过程的Arduino,用于注册,删除,选择ID和考勤的按钮,用于警报的蜂鸣器,用于指示的LED和用于指示用户并显示结果消息的LCD。
如电路图所示,一个按钮直接连接到Arduino的引脚A0(ENREGISTRATION),A1(DEL),A2(UP),A3(DOWN)相对于地面,黄色LED通过1k电阻连接到Arduino的数字引脚D7相对于接地。指纹模块的 Rx 和 Tx 直接连接到 Arduino 的串行引脚 D2 和 D3(软件串行)。5v 电源用于为取自 Arduino 板的指纹模块供电。蜂鸣器也连接在引脚 A5 上。16x2 LCD 配置为 4 位模式,其 RS、EN、D4、D5、D6 和 D7 直接连接到 Arduino 的数字引脚 D13、D12、D11、D10、D9 和 D8。
代码说明:
arduino的指纹考勤系统代码将在后续部分中给出。尽管代码通过注释很好地解释了,但我们在这里讨论的是代码的几个重要部分。我们使用指纹库将 指纹模块与Arduino板连接 。
首先,我们包含头文件并定义输入和输出引脚,并定义宏和声明的变量。之后,在设置功能中,我们指示定义的引脚并启动LCD和指纹模块
之后,我们必须编写用于下载考勤数据的代码。
void setup() {delay(1000);lcd.begin(16,2);Serial.begin(9600);pinMode(enroll, INPUT_PULLUP);pinMode(up, INPUT_PULLUP);pinMode(down, INPUT_PULLUP);pinMode(del, INPUT_PULLUP);pinMode(match, INPUT_PULLUP);pinMode(buzzer, OUTPUT);pinMode(indFinger, OUTPUT);digitalWrite(buzzer, LOW);if(digitalRead(enroll) == 0) { digitalWrite(buzzer, HIGH); delay(500); digitalWrite(buzzer, LOW); lcd.clear(); lcd.print("Please wait"); lcd.setCursor(0,1); lcd.print("Downloding Data");
之后,我们必须编写代码来清除EEPROM中的出勤数据。
if(digitalRead(del) == 0) { lcd.clear(); lcd.print("Please Wait"); lcd.setCursor(0,1); lcd.print("Reseting....."); for(int i=1000;i<1005;i++) EEPROM.write(i,0); for(int i=0;i<841;i++) EEPROM.write(i, 0xff); lcd.clear(); lcd.print("System Reset"); delay(1000); }
之后,我们启动指纹模块,通过LCD显示欢迎消息,并启动RTC模块。
之后,在循环功能中,我们读取了RTC时间并将其显示在LCD上
void loop() { now = rtc.now(); lcd.setCursor(0,0); lcd.print("Time->"); lcd.print(now.hour(), DEC); lcd.print(’:’); lcd.print(now.minute(), DEC); lcd.print(’:’); lcd.print(now.second(), DEC); lcd.print(" "); lcd.setCursor(0,1); lcd.print("Date->"); lcd.print(now.day(), DEC); lcd.print(’/’); lcd.print(now.month(), DEC); lcd.print(’/’); lcd.print(now.year(), DEC);
之后,等待指纹接受输入并将捕获的图像 ID 与存储的 ID 进行比较。如果发生匹配,则继续下一步。并检查注册德尔键
int result=getFingerprintIDez();if(result>0) { digitalWrite(indFinger, LOW); digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); lcd.clear(); lcd.print("ID:"); lcd.print(result); lcd.setCursor(0,1); lcd.print("Please Wait...."); delay(1000); attendance(result); lcd.clear(); lcd.print("Attendance "); lcd.setCursor(0,1); lcd.print("Registed"); delay(1000); digitalWrite(indFinger, HIGH);return; }
给定 void checkKeys() 函数用于检查是否按下注册或 DEL 键以及按下时该怎么做。如果按下 ENROL 键,则调用 Enroll( ) 函数并按下 DEL 键,则调用 delete() 函数。
void delet( ) 函数用于输入要删除的 ID 并调用uint8_t *deleteFingerprint(uint8_t id) *函数,该函数将从记录中删除手指。
给定功能用于获取指纹图像并将其转换为模板,并通过选定的ID保存到指纹模块存储器中。
uint8_t getFingerprintEnroll() { int p = -1; lcd.clear(); lcd.print("finger ID:"); lcd.print(id); lcd.setCursor(0,1); lcd.print("Place Finger"); delay(2000); while (p != FINGERPRINT_OK) { p = finger.getImage(); ..... ..... ....... ....
给定功能用于在EEPROM的分配插槽中存储考勤时间和日期
void attendance(int id) { int user=0,eepLoc=0; if(id == 1) { eepLoc=0; user=user1++; } else if(id == 2) { eepLoc=210; user=user2++; } else if(id == 3) .... .... .....
给定功能用于从EEPROM获取数据并发送到串行监视器
void download(int eepIndex) { if(EEPROM.read(eepIndex) != 0xff) { Serial.print("T->"); if(EEPROM.read(eepIndex)<10) Serial.print(’0’); Serial.print(EEPROM.read(eepIndex++)); Serial.print(’:’); if(EEPROM.read(eepIndex)<10) Serial.print(’0’); Serial.print(EEPROM.read(eepIndex++));
#include#include#include "Adafruit_Fingerprint.h"uint8_t id;Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerPrint);#define enroll 14#define del 15#define up 16#define down 17#define match 5#define indFinger 7#define buzzer 5#define records 4 // 5 for 5 userint user1,user2,user3,user4,user5;DateTime now;void setup(){delay(1000);lcd.begin(16,2);Serial.begin(9600);pinMode(enroll, INPUT_PULLUP);pinMode(up, INPUT_PULLUP);pinMode(down, INPUT_PULLUP);pinMode(del, INPUT_PULLUP);pinMode(match, INPUT_PULLUP);pinMode(buzzer, OUTPUT);pinMode(indFinger, OUTPUT);digitalWrite(buzzer, LOW);if(digitalRead(enroll) == 0){ digitalWrite(buzzer, HIGH); delay(500); digitalWrite(buzzer, LOW); lcd.clear(); lcd.print("Please wait"); lcd.setCursor(0,1); lcd.print("Downloding Data");Serial.println("Please wait"); Serial.println("Downloding Data.."); Serial.println();Serial.print("S.No. "); for(int i=0;ilcd.clear();lcd.print(" Attendance ");lcd.setCursor(0,1);lcd.print(" System ");delay(2000);lcd.clear();lcd.print("Circuit Digest");lcd.setCursor(0,1);lcd.print("Saddam Khan");delay(2000); digitalWrite(buzzer, HIGH); delay(500); digitalWrite(buzzer, LOW); for(int i=1000;i<1000+records;i++) {if(EEPROM.read(i) == 0xff)EEPROM.write(i,0); }finger.begin(57600);Serial.begin(9600);lcd.clear();lcd.print("Finding Module");lcd.setCursor(0,1);delay(1000);if (finger.verifyPassword()){ Serial.println("Found fingerprint sensor!"); lcd.clear(); lcd.print("Found Module "); delay(1000);}else{Serial.println("Did not find fingerprint sensor :(");lcd.clear();lcd.print("module not Found");lcd.setCursor(0,1);lcd.print("Check Connections");while (1);}if (! rtc.begin()) Serial.println("Couldn’t find RTC");// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));if (! rtc.isrunning()){Serial.println("RTC is NOT running!");// following line sets the RTC to the date & time this sketch was compiled rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));// This line sets the RTC with an explicit date & time, for example to set// January 21, 2014 at 3am you would call:// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));}lcd.setCursor(0,0); lcd.print("Press Match to "); lcd.setCursor(0,1); lcd.print("Start System"); delay(2000);user1=EEPROM.read(1000); user2=EEPROM.read(1001); user3=EEPROM.read(1002); user4=EEPROM.read(1003);user5=EEPROM.read(1004);lcd.clear();digitalWrite(indFinger, HIGH);}void loop(){now = rtc.now();lcd.setCursor(0,0);lcd.print("Time->");lcd.print(now.hour(), DEC);lcd.print(’:’);lcd.print(now.minute(), DEC);lcd.print(’:’);lcd.print(now.second(), DEC);lcd.print(" ");lcd.setCursor(0,1);lcd.print("Date->");lcd.print(now.day(), DEC);lcd.print(’/’);lcd.print(now.month(), DEC);lcd.print(’/’);lcd.print(now.year(), DEC);lcd.print(" ");delay(500);int result=getFingerprintIDez();if(result>0){ digitalWrite(indFinger, LOW); digitalWrite(buzzer, HIGH); delay(100); digitalWrite(buzzer, LOW); lcd.clear(); lcd.print("ID:"); lcd.print(result); lcd.setCursor(0,1); lcd.print("Please Wait...."); delay(1000); attendance(result); lcd.clear(); lcd.print("Attendance "); lcd.setCursor(0,1); lcd.print("Registed"); delay(1000);digitalWrite(indFinger, HIGH);return; } checkKeys(); delay(300);}// dmyyhms - 7 bytesvoid attendance(int id){ int user=0,eepLoc=0; if(id == 1) {eepLoc=0;user=user1++; } else if(id == 2) {eepLoc=210;user=user2++; } else if(id == 3) {eepLoc=420;user=user3++; } else if(id == 4) {eepLoc=630;user=user4++; } /*else if(id == 5) // fifth user {eepLoc=840;user=user5++; }*/ else return;int eepIndex=(user*7)+eepLoc;EEPROM.write(eepIndex++, now.hour());EEPROM.write(eepIndex++, now.minute());EEPROM.write(eepIndex++, now.second());EEPROM.write(eepIndex++, now.day());EEPROM.write(eepIndex++, now.month());EEPROM.write(eepIndex++, now.year()>>8 );EEPROM.write(eepIndex++, now.year());EEPROM.write(1000,user1);EEPROM.write(1001,user2);EEPROM.write(1002,user3);EEPROM.write(1003,user4); // EEPROM.write(4,user5); // figth user}void checkKeys(){ if(digitalRead(enroll) == 0) {lcd.clear();lcd.print("Please Wait");delay(1000);while(digitalRead(enroll) == 0);Enroll(); }else if(digitalRead(del) == 0) {lcd.clear();lcd.print("Please Wait");delay(1000);delet(); }}void Enroll(){ int count=1; lcd.clear(); lcd.print("Enter Finger ID:");while(1) {lcd.setCursor(0,1); lcd.print(count); if(digitalRead(up) == 0) { count++; if(count>records) count=1; delay(500); }else if(digitalRead(down) == 0) { count--; if(count<1) count=records; delay(500); } else if(digitalRead(del) == 0) { id=count; getFingerprintEnroll(); for(int i=0;ielse if(digitalRead(enroll) == 0) { return; } }}void delet(){ int count=1; lcd.clear(); lcd.print("Enter Finger ID");while(1) {lcd.setCursor(0,1); lcd.print(count); if(digitalRead(up) == 0) { count++; if(count>records) count=1; delay(500); }else if(digitalRead(down) == 0) { count--; if(count<1) count=records; delay(500); } else if(digitalRead(del) == 0) { id=count; deleteFingerprint(id); for(int i=0;ielse if(digitalRead(enroll) == 0) { return; } }}uint8_t getFingerprintEnroll(){ int p = -1; lcd.clear(); lcd.print("finger ID:"); lcd.print(id); lcd.setCursor(0,1); lcd.print("Place Finger"); delay(2000); while (p != FINGERPRINT_OK) {p = finger.getImage();switch (p){case FINGERPRINT_OK: Serial.println("Image taken"); lcd.clear(); lcd.print("Image taken"); break;case FINGERPRINT_NOFINGER: Serial.println("No Finger"); lcd.clear(); lcd.print("No Finger"); break;case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); lcd.clear(); lcd.print("Comm Error"); break;case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); lcd.clear(); lcd.print("Imaging Error"); break;default: Serial.println("Unknown error"); lcd.clear(); lcd.print("Unknown Error"); break;} }// OK success!p = finger.image2Tz(1); switch (p) {case FINGERPRINT_OK: Serial.println("Image converted"); lcd.clear(); lcd.print("Image converted"); break;case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); lcd.clear(); lcd.print("Image too messy"); return p;case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error");lcd.clear(); lcd.print("Comm Error"); return p;case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features");lcd.clear(); lcd.print("Feature Not Found"); return p;case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); lcd.clear(); lcd.print("Feature Not Found"); return p;default: Serial.println("Unknown error"); lcd.clear(); lcd.print("Unknown Error"); return p; }Serial.println("Remove finger"); lcd.clear(); lcd.print("Remove Finger"); delay(2000); p = 0; while (p != FINGERPRINT_NOFINGER) {p = finger.getImage(); } Serial.print("ID "); Serial.println(id); p = -1; Serial.println("Place same finger again"); lcd.clear(); lcd.print("Place Finger"); lcd.setCursor(0,1); lcd.print(" Again"); while (p != FINGERPRINT_OK) {p = finger.getImage();switch (p) {case FINGERPRINT_OK: Serial.println("Image taken"); break;case FINGERPRINT_NOFINGER: Serial.print("."); break;case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); break;case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); break;default: Serial.println("Unknown error"); return;} }// OK success!p = finger.image2Tz(2); switch (p) {case FINGERPRINT_OK: Serial.println("Image converted"); break;case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p;case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p;case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p;case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p;default: Serial.println("Unknown error"); return p; }// OK converted! Serial.print("Creating model for #"); Serial.println(id);p = finger.createModel(); if (p == FINGERPRINT_OK) {Serial.println("Prints matched!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p; } else if (p == FINGERPRINT_ENROLLMISMATCH) {Serial.println("Fingerprints did not match");return p; } else {Serial.println("Unknown error");return p; }Serial.print("ID "); Serial.println(id); p = finger.storeModel(id); if (p == FINGERPRINT_OK) {Serial.println("Stored!");lcd.clear();lcd.print("Stored!");delay(2000); } else if (p == FINGERPRINT_PACKETRECIEVEERR) {Serial.println("Communication error");return p; } else if (p == FINGERPRINT_BADLOCATION) {Serial.println("Could not store in that location");return p; } else if (p == FINGERPRINT_FLASHERR) {Serial.println("Error writing to flash");return p; } else {Serial.println("Unknown error");return p; }}int getFingerprintIDez(){ uint8_t p = finger.getImage();if (p != FINGERPRINT_OK) return -1;p = finger.image2Tz(); if (p != FINGERPRINT_OK) return -1;p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) { lcd.clear(); lcd.print("Finger Not Found"); lcd.setCursor(0,1); lcd.print("Try Later"); delay(2000); return -1; } // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); return finger.fingerID;}uint8_t deleteFingerprint(uint8_t id){ uint8_t p = -1; lcd.clear(); lcd.print("Please wait"); p = finger.deleteModel(id); if (p == FINGERPRINT_OK) {Serial.println("Deleted!");lcd.clear();lcd.print("Figer Deleted");lcd.setCursor(0,1);lcd.print("Successfully");delay(1000); }else {Serial.print("Something Wrong");lcd.clear();lcd.print("Something Wrong");lcd.setCursor(0,1);lcd.print("Try Again Later");delay(2000);return p; }}void download(int eepIndex){if(EEPROM.read(eepIndex) != 0xff){ Serial.print("T->"); if(EEPROM.read(eepIndex)<10) Serial.print(’0’); Serial.print(EEPROM.read(eepIndex++)); Serial.print(’:’); if(EEPROM.read(eepIndex)<10) Serial.print(’0’); Serial.print(EEPROM.read(eepIndex++)); Serial.print(’:’); if(EEPROM.read(eepIndex)<10) Serial.print(’0’); Serial.print(EEPROM.read(eepIndex++)); Serial.print(" D->"); if(EEPROM.read(eepIndex)<10) Serial.print(’0’); Serial.print(EEPROM.read(eepIndex++)); Serial.print(’/’); if(EEPROM.read(eepIndex)<10) Serial.print(’0’); Serial.print(EEPROM.read(eepIndex++)); Serial.print(’/’); Serial.print(EEPROM.read(eepIndex++)<<8 | EEPROM.read(eepIndex++));}else{ Serial.print("---------------------------");}Serial.print(" ");}
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- 电子电路分析与设计:半导体器件及其基本应用(第三版)
来源:下载中心
- 《模拟集成电路的分析与设计(第四版)》中文版 高等教育出版社
来源:下载中心
- 电工技术与电子技术
来源:大学堂
- 示波器的使用方法教学
来源:大学堂
- PCB板基础知识讲解
来源:电路图
- 叠加原理:概念及其求解过程
来源:电路图
推荐帖子 最新更新时间:2024-11-13 09:08
- 2011年DSP与嵌入式系统技术研讨会即将召开
- 有兴趣的朋友可以关注下: 随着电子信息技术和产业的发展,基于DSP 和多核CPU的嵌入式系统开发与应用,变得越来越复杂。为了使嵌入式系统开发者能尽快将其产品上市,芯片、软件、工具等专业公司纷纷推出针对DSP和多核CPU专业化的技术和服务,帮助简化复杂的嵌入式系统的设计,使
- soso嵌入式系统
- 出售原装全新福禄克 Fluke 561接触式和红外测温仪
- 具备K型热电偶功能的红外测温仪 为您的工具箱增加新的亮点。Fluke 561红外线与接触式测温仪集合了工业、电力、暖通空调多种行业技术人员需要的温度测量功能,兼具红外线和接触式两种测温方式,一件可顶多件使用。它快捷、***、容易使用,可为您节省宝贵的时间和精力。同时,您还可以
- 瑞思福淘e淘
- 求个输入1~1.5V,输出3V,100mA的升压方案
- 想自己做一个蓝牙装置,干电池供电,2块7号有点占地方,纽扣电池容量又小了点,想用一节七号电池供电。 求输入1~1.5V,输出3V,最大输出电流100mA的升压方案,效率高一点的方案。 求个输入1~1.5V,输出3V,100mA的升压方案 参考一下,还可以先仿真看看 http://
- jetlin1992模拟与混合信号
- 1.MSP430FR2633-CAPTIVATE-BSWP这个例子程序里,读取cap引脚电容数据的函数在哪?
- 最近调试项目一个串口通讯功能,在project正常(PieCtrlRegs.PIEIER9.bit.INTx3 = 0; 时一切正常) 情况下,使能SCIB接收中断(PieCtrlRegs.PIEIER9.bit.INTx3 = 1;) 会导致非法中断。接收中断中基本什么都没有干
- huafeng微控制器 MCU
- 大家讨论一下,设计一个开发板,电源部分需要考虑什么
- 设计一个开发板,电源部分需要考虑的几个问题是什么呢,畅所欲言,欢迎大家发言! 大家讨论一下,设计一个开发板,电源部分需要考虑什么 稳压很重要,还有就是电源能承受的电流,个人感觉是越大越好,电源散热也要做得周到,如果板子不单单自己使用的话,最好能有多个常用的电压输出,象3.3v,5
- qwqwqw2088模拟与混合信号
- TI公司新出了Piccolo系列的C2000 DSC,大家觉得怎么样啊?
- 高效率32位CPU(TMS320C28xTM核) 具有40MHz/60MHz主频; 单周期执行一次32×32或两次16×16乘加(MAC); 改进型哈佛总线结构; 原子操作; 快速中断响应与处理; 统一的存储器设计模式; 高效率C/C++代码; 仅需少
- DSP16Microchip MCU
- 【新版CH554评测DIY】音频校音器之8
- ZigBee初学者
- 全国大学生电子设计竞赛模块设计系列(二)
- 请问是否只需一根JTAG下载线就能向430烧程序?
- 蓝牙模块的工作原理
- 用于宿舍的无线监控系统
- 【获奖名单】NI白皮书下载《如何克服复杂待测设备的生产测试挑战》
- [大牛请进]关于video 4 linux的怪问题
- UPS电源和EPS电源的区别
- 大家的液晶驱动与MCU是用什么接口阿?
- 高手来啊啊!!!!! 关于MD6420中的A/D转化模件的初始化编程
- 施耐德plc连接旋转编码器通信问题
- 网关_串口控制LED
- EDA技术与VHDL设计
- 请高手快来指点啊 ~~~~
- 高手帮忙看下,1602怎么不显示呢?
- 有奖直播:想了解人形机器人背后的硬科技吗?来英飞凌直播为您揭晓! 开始啦!
- 基于运算放大器和模拟集成电路的电路设计中3.2的德玻积分器传递函数怎样推导
- 【一起玩esp8266】+ 接着玩坏风扇
- 噪声系数测量两大方法详解,你get了吗?
- 使用 Analog Devices 的 LT3091HFE 的参考设计
- ADCLK846/PCBZ,ADCLK954 时钟扇出缓冲器评估板
- LTC3405AES6-1.5 同步降压型稳压器的典型应用电路
- LT3091HT7 线性稳压器的典型应用,使用较低值的 RSET 以实现较高的输出电压
- LTC3400,单节电池至 3.3V 同步升压转换器
- LTC3633AIFE 同步降压型稳压器的典型应用电路
- 自制pcb尺
- 用于自动测试设备的 2.7 至 6V 模拟放大
- XRP7714EVB-DEMO-3,基于XRP7714的四通道数字PWM演示板
- 使用 Infineon Technologies AG 的 OMR7815SR 的参考设计