📄 co0511.c
字号:
/********Co051112864图形液晶*************
CS 接PA0
RES 接PA1
A0 接PA2
SCLk 接PC6
SI 接PC7
C86 接PA5
P/S 接PA4
*******************************/
/********16位ad函数*************
sclk 接PB3
DOUT 接PB2
CONV 接PB4
EOC 接PB1
cs 接PB0
pa5输出
*******************************/
#define uint unsigned int
#define uchar unsigned char
#include<avr/io.h>
#include<avr/pgmspace.h>
#include"ffft.h"
//uchar turn[128]={0};
//uchar n=0;
union _my_complex_t {
complex_t bfly_buff[FFT_N];
uchar lcd_buff[FFT_N * 4];
} my_complex_t ;
uint capture[FFT_N]; /* Wave captureing buffer */
//complex_t bfly_buff[FFT_N]; /* FFT buffer */
uint spektrum[FFT_N/2]; /* Spectrum output buffer*/
//void fft_input (const complex_t *, complex_t *);
/*uchar const tab5[]={
/*-- 调入了一幅图像 --
/*-- 宽度x高度=128x64 --*
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x01,0x01,0x01,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x02,0x02,0x03,0x02,0x03,0x02,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0xFF,0x00,0x80,0xAB,0xAA,
0xAA,0xAA,0xAA,0xAB,0x80,0x00,0x00,0x00,0x01,0x00,0xFD,0x54,0x54,0x56,0x55,0x54,
0xFC,0x02,0x01,0x00,0x00,0x02,0x02,0x02,0xFA,0x92,0x92,0x92,0x92,0x92,0x90,0x9F,
0x80,0x00,0x00,0x20,0x20,0xBF,0x00,0x7F,0x54,0x54,0xFF,0x54,0x55,0x7F,0x00,0x00,
0x00,0x10,0x20,0xFF,0x00,0x80,0xAB,0xAA,0xAA,0xAA,0xAA,0xAB,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,0x80,
0x80,0x88,0x88,0xC8,0x08,0x0F,0x08,0x48,0x88,0x18,0x88,0x40,0x40,0x40,0x4A,0x4A,
0xCF,0x12,0x92,0x00,0x1E,0x12,0x12,0x12,0x1E,0x00,0x00,0x00,0x80,0x43,0x92,0x0E,
0x02,0x12,0x0E,0x42,0x86,0x1A,0x82,0x43,0x40,0x40,0x40,0x4F,0x49,0x4E,0x40,0x06,
0x05,0x15,0x0D,0xC5,0x04,0x06,0xC0,0x80,0x80,0x80,0x80,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x0C,0x04,0x00,0x00,0x30,0xC0,
0xFE,0x80,0x40,0x82,0x92,0x92,0xFE,0x92,0x92,0x82,0x00,0x00,0x80,0x10,0x10,0x90,
0x90,0x92,0xBE,0xD0,0x90,0x10,0x90,0x10,0x00,0x00,0x00,0xFE,0x10,0x92,0x62,0x44,
0x78,0x40,0x7C,0x42,0x42,0x4E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x18,0x90,0x74,0x14,0x94,0x75,0x16,0x34,0xD0,0x14,0x18,0x00,0x00,0x04,0x08,
0x71,0x11,0x11,0x11,0xFF,0x11,0x11,0x31,0x10,0x00,0x00,0x00,0x08,0x49,0x4A,0x7F,
0x8A,0x09,0x24,0x12,0x00,0xFF,0x01,0x01,0x00,0x00,0x08,0x08,0xFF,0x09,0x06,0x10,
0xFF,0x10,0x10,0x1F,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0x80,0x80,0x90,0xF0,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x10,0x10,
0x10,0x10,0x10,0x10,0xF0,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x80,0x00,0x00,0xF0,
0x00,0x80,0x80,0x80,0x80,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x10,0x20,0x40,
0x80,0x20,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/**********位操作函数*********/
void set_sclk_195(uchar i)//clk 接PB3
{
if(i)
PORTB|=0x08;
else
PORTB&=0xf7;
}
void set_conv(uchar i)
{
if(i)
PORTB|=0x10;
else
PORTB&=0xef;
}
void set_cs_195(uchar i)
{
if(i)
PORTB|=0x01;
else
PORTB&=0xfe;
}
void set_cs(uchar i)
{ if(i)
PORTA|=0x01;
else
PORTA&=0xfe;
}
void set_res(uchar i)
{
if(i)
PORTA|=0x02;
else
PORTA&=0xfd;
}
void set_a0(uchar i)
{
if(i)
PORTA|=0x04;
else
PORTA&=0xfb;
}
void set_sclk(uchar i)
{
if(i)
PORTC|=0x40;
else
PORTC&=0xbf;
}
void set_si(uchar i)
{
if(i)
PORTC|=0x80;
else
PORTC&=0x7f;
}
void set_c86(uchar i)
{
if(i)
PORTA|=0x20;
else
PORTA&=0xcf;
}
void set_ps(uchar i)
{
if(i)
PORTA|=0x10;
else
PORTA&=0xef;
}
void data_send(unsigned char dat)
{
unsigned char s,temp;
int i;
set_sclk(0);
s=dat;
for(i=8;i>0;i--)
{set_sclk(0);
NOP();
NOP();
temp=s & 0x80;
if(temp)
{set_si(1);}
else {set_si(0);}
set_sclk(1);
s=s<<1;
}
}
/*************************************************/
//写命令,串行模式
/*************************************************/
void w_com(unsigned char com)
{
set_a0(0);
set_cs(0);
data_send(com);
}
/*************************************************/
//写数据,串行模式
/*************************************************/
void w_data(unsigned char dat)
{
set_a0(1);
set_cs(0);
data_send(dat);
}
/*************************************************/
//清DDRAM
/************************************************/
void clrram (void)
{ uchar i,j,page;
page=0xb0;
for(i=0;i<8;i++)
{
w_com(page); /*设置页*/
w_com(0x10); /*设置列号*/
w_com(0x00);
for(j=0;j<128;j++)
{
w_data(0x00);
}
page++;
}
}
/************************************************/
//液晶初始化
/************************************************/
void init_lcd (void)
{
set_res(0);
delay_nms(100);
set_res(1);
delay_nms(100); /*复位液晶*/
w_com(0xae); /*Display ON/OFF 0xae:OFF 0xaf:ON*/
w_com(0xa2); /*LCD bias set 0xa2:1/9 0xa3:1/7*/
w_com(0xa0); /*ADC select 0xa0:0-127 0xa1:127-0*/
w_com(0xc8); /*COM output 0xc0:0-63 0xc8:63-0*/
w_com(0xa6); /*Display 0xa6:normal 0xa7:reverse*/
w_com(0x2a); /* V0 Voltage Regulator Internal Resistor Ration Set*/
w_com(0x81); /*Electronic Volume*/
w_com(0x2a);
w_com(0x2f); /*power control*/
delay_nms(100);
}
/**********************************************/
//图形显示
/*********************************************/
void img_disp(const uchar *point)
{ uchar i,j,page;
page=0xb7;
w_com(0xaf);
for(i=0;i<8;i++)
{
w_com(page); /*设置页*/
w_com(0x10); /*设置列号*/
w_com(0x10);
for(j=0;j<128;j++)
{
w_data(*(point++));
}
page--;
}
w_com(0xaf); /*Display ON*/
}
/*****************************************/
/****************************************/
void text_disp()
{
uchar i,j,page;
page=0xb0;
w_com(0xaf);
w_com(page); /*设置页*/
//w_com(0x10); /*设置列号*/
//w_com(0x01);
w_data(0xff);
//page--;
w_com(0xaf); /*Display ON*/
}
/****************************************/
//16的初始化
/****************************************/
void init_m16()
{ DDRA=0Xff;
DDRB|=0Xf9;
DDRB&=0Xf9;//定义pb1 pb2 为输入,其他引脚为输出
DDRC=0Xff;
DDRD=0Xff;
PORTA=0xff;
//PORTB|=0X06;//定义pb1 pb2为带上拉输入
PORTC=0xff;
PORTD=0xff;
}
/***********************************************/
/********max195初始化********/
void max195_inital(void)
{
set_cs_195(1);
set_sclk_195(0);
}
/**********************
max195转换开始
**********************/
void max195_start(void)
{
set_conv(0);//,启动转换
delay_nus(10);
set_conv(1);
}
/***********************/
void max195_read(uchar count)
{ uint num2=0;
uchar num1=0,k;
do {
while((PINB&0x02)==0x02);
set_cs_195(0);
for(k=0;k<16;k++)
{
set_sclk_195(1);
delay_1us();
if((PINB&0x04)==0x04)//判断pb2是否为1
{
num1=1;
//PORTA|=0x20;
}
else
{
num1=0;
//PORTA&=0xdf;
}
num2=num2*2+num1;
set_sclk_195(0);//下降沿锁存下一位
delay_nus(3);
}
capture[count]=(uchar)(num2/1024);
} while(--count);
//return num2;
}
/***************************************/
display()
{uchar i,point,page,num;
clrram ();
w_com(0xaf);
w_com (0xc0);
for(i=0;i<128;i++)
{
point=capture[i];
page=point/8;
num=point%8;
w_com(0xb0+page);
// num=0x01<<(num);
// wr_dat(num);
if(num==0)
w_data(0x02);
else
num=0x03<<(num);
w_data(num);
}
}
/***********************************************/
/***************主函数**************************/
void main()
{
uchar i,k,n;
uint m;
init_m16();
set_c86(1);
set_ps(0);
w_com(0xaf);
clrram ();
init_lcd ();
while (1)
{
max195_inital();
max195_start();
max195_read(FFT_N);
//capture_wave(capture, FFT_N);
fft_input (capture, my_complex_t.bfly_buff);
fft_execute (my_complex_t.bfly_buff);
fft_output (my_complex_t.bfly_buff, spektrum);
k = 0,n=0;
for (i = 0;i < 128;i++)
{
m = (uint) ((spektrum[i] + 0.5) / 64 );
capture[i++]=m;
if (m > k) k = m ;
}
//w_data( my_complex_t.lcd_buff[64 * i + j] );
//text_disp();
/*img_disp(tab6);
w_com(0xc0);
delay_nms(3000);
for(i=64;i>0;i--)
{
w_com(0x40+i);
img_disp(tab5);
w_com(0xc0);
delay_nms(100);
}*/
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -