洪嵐峰 發表於 2023-4-11 05:28:11

PIC16F72和74HC30D進行溫度數據採集

您需要以下零件:

溫度傳感器(例如LM35)
電容(用於穩壓電源)
電阻(用於校準傳感器)
電位器(用於調整採樣頻率)
七段數碼管(用於顯示溫度數據)
電路板、杜邦線等

以下是一個簡單的PIC16F72程序,用於從LM35溫度傳感器採集溫度數據,並將其顯示在七段數碼管上。

此程序需要74HC30D作為數字開關來控制七段數碼管的顯示。


#include <16F72.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#define digit_a pin_c0
#define digit_b pin_c1
#define digit_c pin_c2
#define digit_d pin_c3
#define digit_e pin_c4
#define digit_f pin_c5
#define digit_g pin_c6
#define dp pin_c7

void main() {
   float temperature = 0;
   int digit = {0, 0, 0, 0}; // 數碼管的4個數字
   int digit_index = 0;
   int i = 0;
   
   setup_adc_ports(AN0); // 使用AN0口連接溫度傳感器
   setup_adc(ADC_CLOCK_INTERNAL); // 設置ADC時鐘
   set_adc_channel(0); // 設置ADC通道
   delay_ms(50); // 延時等待傳感器穩定
   
   while(TRUE) {
      temperature = (float)read_adc() * 5 / 1024 / 0.01; // 讀取溫度傳感器的值
      
      if(temperature >= 100) {
         temperature = 99.9; // 超過99.9度,顯示99.9度
      }
      
      digit = (int)temperature / 10; // 獲取十位數
      digit = (int)temperature % 10; // 獲取個位數
      digit = 0; // 小數點
      digit = 0; // 空位
      
      for(i = 0; i < 100; i++) { // 等待一段時間
         // 控制74HC30D數字開關
         output_bit(digit_a, bit_test(digit, 0));
         output_bit(digit_b, bit_test(digit, 1));
         output_bit(digit_c, bit_test(digit, 2));
         output_bit(digit_d, bit_test(digit, 3));
         output_bit(digit_e, bit_test(digit, 4));
         output_bit(digit_f, bit_test(digit, 5));
         output_bit(digit_g, bit_test(digit, 6));
         output_bit(dp, bit_test(digit, 7));
         delay_us(500); // 控制刷新速度
      }
      
      digit_index++;
      if(digit_index > 3) {
         digit_index = 0;
      }
   }
}
頁: [1]
查看完整版本: PIC16F72和74HC30D進行溫度數據採集