FFT算法在单片机中的使用&&LCD12864驱动
void initw(); //初始化旋转因子
void bitReverse(); //比特反转
void FFT();
complex x[N];
uchar vis[N];
void delayms(uint ms)
{
uint i,j;
for(i=0;i for(j=0;j<3;j++); } } //此处定义字符串 //写数据 void WriteDataLCM(unsigned char WDLCM) //写数据函数 { // ReadStatusLCM(); //检测忙 delayms(1); PORTA|=RS; //RS=1 delayms(1); PORTA&=~RW; //RW=0 delayms(1); PORTA|=EN; //EN=1 delayms(1); PORTB=WDLCM; //输出数据 delayms(1); PORTA&=~EN; //EN=0 delayms(1); } //写指令 void WriteCommandLCM(unsigned char WCLCM) //写命令函数 { // ReadStatusLCM(); //根据需要检测忙 delayms(1); PORTA&=~RS; //RS=0 delayms(1); PORTA&=~RW; //RW=0 delayms(1); PORTA|=EN; //EN=1 delayms(1); PORTB=WCLCM; //输出指令 delayms(1); PORTA&=~EN; //EN=0 delayms(1); } //读状态:检测忙 void ReadStatusLCM() //读状态函数 { uchar temp; uchar flag = 1; while(flag==1) { PORTB=0xff; delayms(1); DDRB=0x00; //端口B改为输入 delayms(1); PORTA&=~RS; //RS=0 delayms(1); PORTA|=RW; //RW=1 delayms(1); PORTA|=EN; //EN=1 delayms(10); temp = PINB; //读端口B delayms(10); DDRB=0xff; //端口B改为 delayms(10); PORTA&=~EN; //EN=0 delayms(1); if(temp>>7==0) flag = 0; } } uchar read_data() //读数据函数 { uchar lcd_data; PORTB=0xff; DDRB=0x00; PORTA|=RW; PORTA|=RS; delayms(10); PORTA|=EN; delayms(10); lcd_data=PINB; delayms(10); PORTA&=~EN; DDRB=0xff; return(lcd_data) ; } void point(uchar x,uchar y) //打点函数,最重要的函数,GUI的基础 { uchar x_Dyte,x_byte; uchar y_Dyte,y_byte; uchar GDRAM_hbit,GDRAM_lbit; WriteCommandLCM(0x36); x_Dyte=x/16; x_byte=x&0x0f; y_Dyte=y/32; y_byte=y&0x1f; WriteCommandLCM(0x80+y_byte); WriteCommandLCM(0x80+x_Dyte+8*y_Dyte); read_data(); GDRAM_hbit=read_data(); GDRAM_lbit=read_data(); delayms(10); WriteCommandLCM(0x80+y_byte); WriteCommandLCM(0x80+x_Dyte+8*y_Dyte); delayms(10); if(x_byte<8) { WriteDataLCM(GDRAM_hbit|(0x01<<(7-x_byte))); WriteDataLCM(GDRAM_lbit); } else { WriteDataLCM(GDRAM_hbit); WriteDataLCM(GDRAM_lbit|(0x01<<(15-x_byte))); } WriteCommandLCM(0x30); } //LCM初始化 void LCMInit(void) { WriteCommandLCM(0x30); //三次显示模式设置,不检测忙信号 delayms(10); WriteCommandLCM(0x30); delayms(10); WriteCommandLCM(0x30); delayms(10); WriteCommandLCM(0x30); //显示模式设置,开始要求每次检测忙信号 WriteCommandLCM(0x08); //关闭显示 WriteCommandLCM(0x01); //显示清屏 WriteCommandLCM(0x06); //显示光标移动设置 WriteCommandLCM(0x0C); //显示开及光标设置 }
评论