使用ADC來讀取光敏電阻的數值,以測量光線強度。
#include <avr/io.h>
void ADC_init() {
// 配置ADC,選擇參考電壓和通道
ADMUX = (1 << REFS0); // 使用AVcc作為參考電壓,並選擇通道0
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // 啟用ADC,設定ADC分頻為64
}
uint16_t ADC_read(uint8_t channel) {
// 選擇要讀取的通道
ADMUX = (ADMUX & 0xF0) | (channel & 0x0F);
// 啟動ADC轉換
ADCSRA |= (1 << ADSC);
// 等待轉換完成
while (ADCSRA & (1 << ADSC));
// 回傳ADC數值
return ADC;
}
int main() {
ADC_init();
uint16_t light_intensity;
while (1) {
// 讀取光敏電阻的數值
light_intensity = ADC_read(0);
// 使用light_intensity的數值做其他運算
}
return 0;
}
#include <avr/io.h>
#include <util/delay.h>
void DAC_init() {
// 配置DAC,選擇參考電壓
// 假設使用內部參考電壓,輸出範圍為0~5V
// 在MCU的具體規格中查找相關設定
}
void DAC_output(uint16_t value) {
// 寫入DAC數值
// 在MCU的具體規格中查找相關設定
}
int main() {
DAC_init();
while (1) {
// 生成模擬輸出信號
for (uint16_t i = 0; i <= 1023; i++) {
DAC_output(i);
_delay_ms(10); // 延遲以控制輸出速度
}
}
return 0;
}