資料介紹
描述
介紹
在本文的第一部分,我們展示了如何創建所有流程來實現這個項目。您可以訪問鏈接中的第一部分(訪問文章的第一部分)
現在,通過第二部分,我們將介紹創建功能以編程時鐘和日期以及編程設備激活時間的所有過程。
因此,通過這些功能,我們將了解實時時鐘 (RTC) DS1307的幾個應用原理和使用方法。
項目的擬議職能
根據第一部分的解釋,該項目的目標是在用戶設定的時間內激活和停用設備。
因此,根據問題,需要使用CHIP Real-Time Clock 。CHIP 用于計算 7 個變量:秒、分、小時、凌晨、月日、月和年。因此,為此,需要實施一個小時制,以便用戶調整小時、日期、激活和停用時間。
為此,將根據第一部分所示的圖表實現幾個功能來解決這個問題。因此,我們將開發配置實時時鐘的實際時間和日期以及小時以激活設備的功能連接在繼電器中。
下文將介紹圖 2 中的電路原理圖和為項目第二部分開發的代碼。
項目開發
首先,我們將通過變量創建和設備初始化來介紹配置過程。
因此,在進入 void setup() 之前,包含所有庫、變量和函數原型。因此,請參見實現了三個功能:ReadKeypad、AdjustHour 和 ActivationHour。
此后每個函數指定如下:
- ReadKeyPad() :執行鍵盤按鈕的讀取,并通過此鍵盤使用數字及其字母。“A”字母用于調整小時,“C”用于清除小時信息,“D”作為完成參數配置的按鍵。
- AdjustTime() :負責調整DS1307的內部日期和時間;
- ActivationHour() :用于調整小時以激活連接在繼電器中的設備。
#include <DS1307.h>
#include <Wire.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
#define MEMORY 100
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
char tempo[9] = "";
char data[9] = "";
int DataTime[7];
byte SegAnt = 0, SegAtual = 0;
byte ReadKeyPad(void);
void AdjustTime(void);
void ActivationHour(void);
void setup()
{
Serial.begin(9600);
DS1307.begin();
//Config pins to control columns of the matrix keyboard
for(int key = 8; key < 12; key++)
{
pinMode(key, OUTPUT);
}
//Config pins to read lines of the matrix keyboard
for(int key = 12; key < 16; key++)
{
pinMode(key, INPUT);
}
for(int key = 8; key < 12; key++)
{
digitalWrite(key, LOW);
}
lcd.begin(16,2);
}
在原型聲明之后,初始化設備RTC DS1307和LCD 16x2并配置Arduino的所有引腳。
現在,我們將通過函數 void loop() 了解該系統的邏輯編程是如何工作的。
項目主要邏輯
首先,當系統在循環函數開始時執行初始化過程的驗證。該驗證由如下所示的第一個條件表示。
if(EEPROM.read(MEMORY) != 73)
這樣,系統就驗證了用戶是第一次進入系統。如果 EEPROM(位置 100)的讀取數與 73 不同,則需要配置系統的時間和日期。
因此,在配置好時間和日期后,系統將 73 值寫入 EEPROM。
EEPROM.write(MEMORIA, 73);
此數字用于向用戶發出信號,表明時間和日期已配置。
void loop()
{
if(EEPROM.read(MEMORIA) != 73)
{
AjustarHora();
EEPROM.write(MEMORIA, 73);
lcd.clear();
ActivationHour();
}
DS1307.getDate(DataTime);
SegAtual = DataTime[6];
if(LerTeclado() == 10)
{
AjustarHora();
lcd.clear();
ActivationHour();
lcd.clear();
}
if(abs(SegAtual - SegAnt) >= 1)
{
sprintf(tempo, "%02d:%02d:%02d", DataTime[4], DataTime[5], DataTime[6]);
sprintf(data, "%02d/%02d/%02d", DataTime[2], DataTime[1], DataTime[0]);
lcd.setCursor(4,1);
lcd.print(tempo);
lcd.setCursor(4,0);
lcd.print(data);
SegAnt = SegAtual;
}
}
此后,日期和時間的所有 7 個參數都被獲取并存儲在 DataTime 向量中。
獲取后,秒的值存儲在變量 SegAtual 中。此變量用于存儲秒的值。命令如下所示。
DS1307.getDate(DataTime);
SegAtual = DataTime[6];
現在,將執行條件以了解用戶是否按下“A”鍵來調整時鐘時間和設備的激活時間。
按鍵“A”用10表示,是按下“A”時函數的返回值,如下所示。
if(LerTeclado() == 10)
{
AjustarHora();
lcd.clear();
ActivationHour();
lcd.clear();
}
最后,小時和數據顯示在LCD 顯示屏上。為了顯示小時和日期,執行以下條件。
if(abs(SegAtual - SegAnt) >= 1)
{
sprintf(tempo, "%02d:%02d:%02d", DataTime[4], DataTime[5], DataTime[6]);
sprintf(data, "%02d/%02d/%02d", DataTime[2], DataTime[1], DataTime[0]);
lcd.setCursor(4,1);
lcd.print(tempo);
lcd.setCursor(4,0);
lcd.print(data);
SegAnt = SegAtual;
}
因此,通過這個條件,日期和小時將每隔一秒出現在LCD上,如圖 3 所示。
現在,將解釋調整時間和調整小時以激活連接在繼電器上的設備的功能。
調整設備時鐘和激活時間的功能
首先,功能非常相似,現在,您將看到每個功能的工作原理。這樣,我們將分析 AdjustTime() 函數。
調整時間功能
現在,使用我們的函數,我們將看到該函數的某些部分在整個函數中重復出現,您將看到該函數分為兩部分:
- 插入時鐘的小時和分鐘,
- 插入月、月、年數據;
首先,我們創建函數中使用的所有變量。
void AdjustTime()
{
int times[6];
int DadosTempo[7];
bool controle = 0;
bool EstadoSobe = 0, EstadoDesce = 0;
byte cont = 0;
byte number = 0;
int digitos[6];
byte PosCursor = 0;
byte t = 0;
bool Validate = 0;
char tempo[7] = "";
char data[15] = "";
DS1307.getDate(DadosTempo);
sprintf(tempo, "%02d:%02dh", DadosTempo[4], DadosTempo[5]);
sprintf(data, "%02d/%02d/%02d", DadosTempo[2], DadosTempo[1], DadosTempo[0]);
times[4] = DadosTempo[4];
times[5] = DadosTempo[5];
times[3] = DadosTempo[3];
times[2] = DadosTempo[2];
times[1] = DadosTempo[1];
times[0] = DadosTempo[0];
times[6] = DadosTempo[6];
digitos[0] = times[4]/10; //Armazena a Dezena das Horas
digitos[1] = times[4]%10; //Armazena a Unidade das Horas
digitos[2] = times[5]/10; //Armazena a Dezena dos Minutos
digitos[3] = times[5]%10; //Armazena a Unidade dos Minutos
do
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("Adjust hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print(tempo);
PosCursor = 5;
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
cont = 0;
for(int i = 4; i < 6; i++)
{
times[i] = 0;
}
}
}while(number != 13);
times[4] = (digitos[0]*10) + digitos[1];
times[5] = (digitos[2]*10) + digitos[3];
if((times[4] < 0 || times[4] > 23) || (times[5] < 0 || times[5] > 59))
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Invalid");
lcd.setCursor(6,1);
lcd.print("Hour");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(1,0);
lcd.print("Adjust Hours:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
sprintf(tempo, "%02d:%02dh", 0, 0);
PosCursor = 5;
cont = 0;
for(int i = 0; i < 4; i++)
{
times[i] = 0;
}
}
}while(Validate == 1);
do
{
number = ReadKeyPad();
delay(200);
}while(number != 16);
/*--------------------------------Date Configuration--------------------------------*/
PosCursor = 4;
do
{
//Transformacao dos digitos da data para dezenas e unidades
digitos[0] = times[2]/10; //Armazena a Dezena da Data
digitos[1] = times[2]%10; //Armazena a Unidade da Data
digitos[2] = times[1]/10; //Armazena a Dezena do Mes
digitos[3] = times[1]%10; //Armazena a Unidade do Mes
digitos[4] = times[0]/10; //Armazena a Dezena do Ano
digitos[5] = times[0]%10; //Armazena a Unidade do Ano
sprintf(data, "%02d/%02d/%02d", times[2], times[1], times[0]);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("Adjust Date:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(4,1);
lcd.print(data);
PosCursor = 4;
cont = 0;
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 6) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 6; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(4,1);
lcd.print("00/00/00");
PosCursor = 4;
cont = 0;
}
}while(number != 13);
times[2] = (digitos[0]*10) + digitos[1]; //Transformando os numeros lidos para data do mes em dois dígitos
times[1] = (digitos[2]*10) + digitos[3]; //Transformando os numeros lidos para mes em dois dígitos
times[0] = (digitos[4]*10) + digitos[5]; //Transformando os numeros lidos para ano em dois dígitos
if((times[2] <= 0 || times[2] > 31) || (times[1] <= 0 || times[1] > 12) || times[0] <= 0)
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Invalid");
lcd.setCursor(6,1);
lcd.print("Date");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("Adjuste Date:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print("00/00/00");
PosCursor = 5;
cont = 0;
for(byte i = 0; i < 3; i++)
{
times[i] = 0;
}
}
}while(Validate == 1);
do
{
number = ReadKeyPad();
delay(200);
}while(number != 16);
lcd.clear();
DS1307.setDate(times[0],times[1],times[2],times[3],times[4],times[5],00);//year,month,date of month, day of week,hour,minutes,second
}
此后,DS1307的功能是獲取數據并存儲在DadosTempo 中,然后將值拆分并打印在字符串“tempo”和“data”中。這兩個字符串用于在LCD后面打印其信息。
DS1307.getDate(DadosTempo);
sprintf(tempo, "%02d:%02dh", DadosTempo[4], DadosTempo[5]);
sprintf(data, "%02d/%02d/%02d", DadosTempo[2], DadosTempo[1], DadosTempo[0]);
矢量“DadosTempo”的數據被分離并存儲在矢量時間中。向量“times”將用于接收副本并操作“DadosTempo”向量的數據。
緊接著,times[4] 和 times[5] 將被分成十位和個位,在時間設置中進行操作。
times[4] = DadosTempo[4];
times[5] = DadosTempo[5];
times[3] = DadosTempo[3];
times[2] = DadosTempo[2];
times[1] = DadosTempo[1];
times[0] = DadosTempo[0];
times[6] = DadosTempo[6];
digitos[0] = times[4]/10; //Store ten of hours
digitos[1] = times[4]%10; //Store unit of hours
digitos[2] = times[5]/10; //Store ten of minutes
digitos[3] = times[5]%10; //Store unit of minutes
之后,系統會根據下面的代碼顯示消息“Adjust Hour:”并在第二行顯示“tempo”字符串的內容。
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("Adjust hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print(tempo);
PosCursor = 5;
圖 4 顯示了LCD 顯示屏中顯示的消息。
一旦消息在LCD中打印,系統就會開始讀取過程以驗證用戶按下的鍵是什么。這個過程由下面的代碼表示。
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
cont = 0;
for(int i = 4; i < 6; i++)
{
times[i] = 0;
}
}
}while(number != 13);
首先,系統讀取鍵盤并將值存儲在變量號中,然后驗證如下所示的條件。
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
根據條件,它驗證了三個重要點:
- 驗證一個數字是否在 0 到 9之間;
- 驗證變量“controle”是否等于 0。該變量用于允許條件僅一次為真,并且僅讀取一次該數字。
- 驗證變量“cont”是否小于 4。此變量用于允許用戶僅輸入 4位數字:兩位數表示小時,兩位數表示分鐘。
這樣,當條件為真時,數字存儲在數字向量中并打印在LCD中。在此之后,變量“PosCursor”被遞增到指向單位位置。
如果 cont 變量等于 2 或 cont 等于 4,則光標位置再次增加,因為“:”信號。這樣,光標將指向分鐘的小數位。
現在,如果上述條件不成立,則將驗證以下條件。如果用戶按下任何鍵,函數“LerTeclado()”返回數字 16 表示沒有按下任何鍵。
if(number == 16 && controle == 1)
{
controle = 0;
}
因此,如果此條件為真,系統將在變量“controle”處歸零。此變量用于控制在接收用戶按下的 0 到 9 之間的數字的條件下的訪問。
最后,我們要檢查最后一個條件。如果按下“C”鍵,則返回值為 13。
因此,通過此鍵,系統將清除小時的值,以允許用戶再次輸入新的值。這可以在圖 5 中看到。
當用戶插入錯誤值并需要輸入新值時,這很有用,如圖 6 所示。
現在,查看“do while”循環的條件。系統在do-while中運行,直到用戶按下“D”鍵(Done),它由值13表示。
該鍵用于在系統中通知用戶已插入值。
}while(number != 13);
此后,用戶輸入的數字將以小時和十位為單位,如下面的代碼所示。
times[4] = (digitos[0]*10) + digitos[1];
times[5] = (digitos[2]*10) + digitos[3];
if((times[4] < 0 || times[4] > 23) || (times[5] < 0 || times[5] > 59))
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Invalid");
lcd.setCursor(6,1);
lcd.print("Hour");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(1,0);
lcd.print("Adjust Hours:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
sprintf(tempo, "%02d:%02dh", 0, 0);
PosCursor = 5;
cont = 0;
for(byte i = 0; i < 4; i++)
{
times[i] = 0;
}
}
}while(Validate == 1);
最后,我們有最后一個條件。最后一個條件用于驗證用戶輸入的小時和分鐘。
如果用戶輸入的值錯誤,布爾變量 Validate 將收到 1。該值將向系統發出信號,表明某些值錯誤并顯示“無效時間”消息,如圖 7 所示。
因此,系統將需要接收新的正確值。但是,如果值是正確的,系統不會進入該條件并通過函數的第二部分:接收日期的數據。
設置日期的過程
以同樣的形式,當我們配置時鐘數據時,我們將設置日期。過程類似。它具有接收號碼的過程,數字錯誤時的擦除功能以及用戶輸入的號碼的驗證過程。
最后,配置完所有參數后,就有了實時時鐘芯片的參數發送功能,如下圖所示。
DS1307.setDate(times[0],times[1],times[2],times[3],times[4],times[5],00);//year,month,date of month, day of week,hour,minutes,second
通過這個函數,RTC 配置了小時和日期的參數。此后,系統返回 void 循環函數。
在您返回 void 循環函數后,LCD 屏幕將被擦除并調用 ActiveHour 函數。
void ActivationHour(void)
{
int times[6];
int DadosTempo[7];
bool controle = 0;
bool EstadoSobe = 0, EstadoDesce = 0;
byte cont = 0;
byte number = 0;
int digitos[6];
byte PosCursor = 0;
bool Validate = 0;
lcd.clear();
for(byte i = 0; i < 6; i++)
{
digitos[i] = 0;
}
do
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Activation Hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
cont = 0;
for(int i = 4; i < 6; i++)
{
times[i] = 0;
}
}
}while(number != 13);
times[4] = (digitos[0]*10) + digitos[1];
times[5] = (digitos[2]*10) + digitos[3];
if((times[4] < 0 || times[4] > 23) || (times[5] < 0 || times[5] > 59))
{
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Invalid");
lcd.setCursor(4,1);
lcd.print("Hour");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(1,0);
lcd.print("Activation Hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
sprintf(tempo, "%02d:%02dh", 0, 0);
PosCursor = 5;
cont = 0;
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
}
}while(Validate == 1);
EEPROM.write(1, times[4]);
EEPROM.write(2, times[5]);
do
{
number = ReadKeyPad();
delay(200);
}while(number != 16);
}
HourActivate 函數與設置 RTC 時鐘的函數類似。唯一的區別是小時和分鐘的值存儲在 EEPROM 存儲器中,如下所示。
EEPROM.write(1, times[4]);
EEPROM.write(2, times[5]);
這些值存儲在 EEPROM 存儲器中,以便在初始化系統開始時讀取。因此,通過這些值,將有可能與時鐘進行比較,并在編程時間啟動設備。
函數 HourActivation 完全執行后,系統返回 void 循環函數,并顯示文章開頭所示的日期和小時。
現在,將在下一篇文章 - 第三部分中解釋新功能。
下一個要實現的功能
通過到目前為止已實現的功能,在第三部分中,我們將實現新功能以提高我們的工作質量。下文將介紹新功能:
- 實現 DeactivationHour() 函數;
- 實現一個邏輯系統來比較時鐘以激活和停用連接在繼電器中的設備;
- 實現信號化以指示按下的鍵。
?
- 用于激活設備的可編程定時器-第三部分
- 生成任意量級的偏置電流網絡(第二部分)
- 救世主Ga N來啦!第二部分:測量
- 設計一臺物聯網模塊燈——第二部分
- 如何實現更高的系統效率——第二部分:高速柵極驅動器
- 超聲波感應器會被用于何處?—— 第二部分
- 《嵌入式-STM32開發指南》第二部分 基礎篇 - 第4章 定時器(HAL庫)
- 有時你需要一點收獲第二部分
- AN-389: 使用Σ-Δ轉換器—第二部分[中文版] 0次下載
- 2012年PSoC數模混合設計培訓_第二部分 26次下載
- 中國NB-IOT產業聯盟-第二部分問題清單-20160824 7次下載
- 微型模塊電源產品第二部分 0次下載
- 常用單片機實例與仿真_第二部分 13次下載
- AT91SAM9260使用手冊第二部分
- 實現免調整VCO1的IC (第二部分)
- PLC定時器的工作原理和應用 1128次閱讀
- 可編程邏輯控制器的基本功能 451次閱讀
- 現場可編程門陣列的原理和應用 457次閱讀
- 雙極踏腳車(第二部分):微步和衰減模式 461次閱讀
- 如何制作一個簡單的2步Arduino可編程定時器電路 1980次閱讀
- 如何制作一個簡單的2步Arduino可編程定時器電路 4219次閱讀
- STM32系列芯片定時器的主要功能及應用解析 1.1w次閱讀
- 可編程邏輯控制器是什么_可編程邏輯控制器原理 1w次閱讀
- 單片機定時器和計數器的類型及工作原理解析 2.9w次閱讀
- 電壓檢測器、監控器和高級監控各種功能介紹:第1部分 4859次閱讀
- 詳細介紹定時器和定時器中斷 1.7w次閱讀
- stm32通用定時器 2737次閱讀
- 混合信號系統接地揭秘之第二部分 1663次閱讀
- 寬范圍可編程定時器電路圖 1933次閱讀
- 可編程定時控制器電路 3196次閱讀
下載排行
本周
- 1Keysight B1500A 半導體器件分析儀用戶手冊、說明書 (中文)
- 19.00 MB | 4次下載 | 免費
- 2使用TL431設計電源
- 0.67 MB | 2次下載 | 免費
- 3BT134雙向可控硅手冊
- 1.74 MB | 2次下載 | 1 積分
- 4一種新型高效率的服務器電源系統
- 0.85 MB | 1次下載 | 1 積分
- 5LabVIEW環形控件
- 0.01 MB | 1次下載 | 1 積分
- 6PR735,使用UCC28060的600W交錯式PFC轉換器
- 540.03KB | 1次下載 | 免費
- 751單片機核心板原理圖
- 0.12 MB | 1次下載 | 5 積分
- 8BP2879DB支持調光調滅的非隔離低 PF LED 驅動器
- 1.44 MB | 1次下載 | 免費
本月
- 1開關電源設計原理手冊
- 1.83 MB | 54次下載 | 免費
- 2FS5080E 5V升壓充電兩串鋰電池充電管理IC中文手冊
- 8.45 MB | 23次下載 | 免費
- 3DMT0660數字萬用表產品說明書
- 0.70 MB | 13次下載 | 免費
- 4UC3842/3/4/5電源管理芯片中文手冊
- 1.75 MB | 12次下載 | 免費
- 5ST7789V2單芯片控制器/驅動器英文手冊
- 3.07 MB | 11次下載 | 1 積分
- 6TPS54202H降壓轉換器評估模塊用戶指南
- 1.02MB | 8次下載 | 免費
- 7STM32F101x8/STM32F101xB手冊
- 1.69 MB | 8次下載 | 1 積分
- 8基于MSP430FR6043的超聲波氣體流量計快速入門指南
- 2.26MB | 7次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935119次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73807次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65987次下載 | 10 積分
評論
查看更多