新闻中心

EEPW首页>嵌入式系统>设计应用> FFT算法在单片机中的使用&&LCD12864驱动

FFT算法在单片机中的使用&&LCD12864驱动

作者: 时间:2016-11-30 来源:网络 收藏

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); //显示开及光标设置

}



评论


技术专区

关闭