⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 specana.c

📁 AVR单片机MEGA128驱动ks0108控制的LCD
💻 C
字号:

#include <inttypes.h>
#include <avr/io.h>

#include "ks0108.h"
#include "fftAvr.h"

// Die H鰄e der Balken im Spektrum
uint8_t spectrumBuffer[FFT_MIXED_LEN];

// Die Y-Koordinaten, der Peaks
uint8_t peakBuffer[FFT_MIXED_LEN];

int main(void) {
	uint8_t data, h;
	
	// TWI initialisieren
	TWBR = 10;
	
	// Display Initialisieren
	for(volatile uint16_t i=0; i<50000; i++);
	ks0108Init(0);
	
	while(1) {
		// Spektrum lesen
		fftAvrReadSpectrum(FFT_MIXED, spectrumBuffer);
		while(!fftAvrTransComp);
		fftAvrReadSpectrum(FFT_MIXED_PEAK, peakBuffer);
		while(!fftAvrTransComp);
		
		// Graph zeichnen
		// Die Bild-Daten werden direkt generiert - das zeichnen der einzelnen
		// Linien ist zu langsam.
		for(int8_t j=56; j>=0; j-=8) {
			ks0108GotoXY(0, j);
			
			// In dieser Schleife werden die 8bit hohe Zeilen (beginnend bei
			// der untersten) ins Display geschrieben.
			for(uint8_t i=0; i<FFT_MIXED_LEN; i++) {
				h = spectrumBuffer[i];
				data = 0xFF;
				
				if(!h) {
					data = 0x00;
				} else if(h<8) {
					data <<= 8-h;
					spectrumBuffer[i] = 0;
				} else {
					spectrumBuffer[i] -= 8;
				}
				
				h = 64-peakBuffer[i];
				if(j <= h && h-j < 8) {
					data |= 1<<(h-j);
				}
				
				ks0108WriteData(data);
			}
		}
	}
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -