這是去年我做的一個小設計,主要是用來測量體溫。今年由于疫情影響情況特殊,就想分享一下這個設計,但是某寶找材料才發現一個問題,都漲價了,有點難受。之前也在51黑下過資料,這次把資料發上來大家一起分享學習。實物圖:
沒有涉及PCB,用的洞洞板。第一次發帖。東西做出來有點丑,大家莫見怪。
主要功能:
通過按鍵控制測溫,按一次檢測一次。自動存儲三次數據,可t通過按鍵切換顯示。并可通過OLED顯示和語音播報溫度。
系統供電采用,USB供電,也可以通過干電池,或者鋰電池。
主要使用元器件。
主控用的是51單片機,溫度傳感器用的是GY906,顯示用的是0.96寸0LED,通訊方式采用IIC,語音播報用的現成的模塊。
語音播報采用串口通訊,比較簡單。直接
就可以直接播報你好。
主要原理圖:
主要來說說GY906和eeprom
直接上代碼吧。
先來測溫的
eeprom也比較簡單。
- #include "reg52.h"
- #include "eepom.h"
- /* ================ 打開 ISP,IAP 功能 ================= */
- void ISP_IAP_enable(void)
- {
- EA = 0; /* 關中斷 */
- ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */
- ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時 */
- ISP_CONTR = ISP_CONTR | 0x80; /* ISPEN=1 */
- }
- /* =============== 關閉 ISP,IAP 功能 ================== */
- void ISP_IAP_disable(void)
- {
- ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */
- ISP_TRIG = 0x00;
- EA = 1; /* 開中斷 */
- }
- /* ================ 公用的觸發代碼 ==================== */
- void ISPgoon(void)
- {
- ISP_IAP_enable(); /* 打開 ISP,IAP 功能 */
- ISP_TRIG = 0x46; /* 觸發ISP_IAP命令字節1 */
- ISP_TRIG = 0xb9; /* 觸發ISP_IAP命令字節2 */
- _nop_();
- }
- /* ==================== 字節讀 ======================== */
- unsigned char byte_read(unsigned int byte_addr)
- {
- EA = 0;
- ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址賦值 */
- ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
- ISP_CMD = ISP_CMD & 0xf8; /* 清除低3位 */
- ISP_CMD = ISP_CMD | RdCommand; /* 寫入讀命令 */
- ISPgoon(); /* 觸發執行 */
- ISP_IAP_disable(); /* 關閉ISP,IAP功能 */
- EA = 1;
- return (ISP_DATA); /* 返回讀到的數據 */
- }
- /* ================== 扇區擦除 ======================== */
- void SectorErase(unsigned int sector_addr)
- {
- unsigned int iSectorAddr;
- iSectorAddr = (sector_addr & 0xfe00); /* 取扇區地址 */
- ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
- ISP_ADDRL = 0x00;
- ISP_CMD = ISP_CMD & 0xf8; /* 清空低3位 */
- ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3 */
- ISPgoon(); /* 觸發執行 */
- ISP_IAP_disable(); /* 關閉ISP,IAP功能 */
- }
- /* ==================== 字節寫 ======================== */
- void byte_write(unsigned int byte_addr, unsigned char original_data)
- {
- EA = 0;
- // SectorErase(byte_addr);
- ISP_ADDRH = (unsigned char)(byte_addr >> 8); /* 取地址 */
- ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
- ISP_CMD = ISP_CMD & 0xf8; /* 清低3位 */
- ISP_CMD = ISP_CMD | PrgCommand; /* 寫命令2 */
- ISP_DATA = original_data; /* 寫入數據準備 */
- ISPgoon(); /* 觸發執行 */
- ISP_IAP_disable(); /* 關閉IAP功能 */
- EA =1;
- }
復制代碼
主函數主要是通過按鍵來執行相應的操作即可。
篇幅有限,文件在下面,自行下載吧。
111.png (25.13 KB, 下載次數: 109)
下載附件
2020-3-10 18:26 上傳
222.png (7.25 KB, 下載次數: 97)
下載附件
2020-3-10 18:26 上傳
1583834211838.jpeg (296.8 KB, 下載次數: 105)
下載附件
2020-3-10 17:59 上傳
代碼:
人體測溫度.zip
(89.23 KB, 下載次數: 341)
2020-3-10 18:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|