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

📄 co0511.c

📁 用m128调试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 + -