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