FFT在单片机上的实现(7)

2019-05-24 11:56

河南科技大学毕业设计(论文)

附 录

一、主程序代码

#include #include #include

#define NOP5 _nop_();_nop_();_nop_();_nop_();_nop_()

#define FOSC 32782266L #define NMS 4

#define T1MS (65536-NMS*FOSC/12/1000)

sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚

unsigned char code User[8][8]=

{{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F}, {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F}, {0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F}, {0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F}, {0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F}, {0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, {0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, {0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}};

unsigned char code nxd[32]=

{0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30, 1,17,9,25,5,21,13,29,3,19,11,27,7,23,15,31};

unsigned char data1[32];

struct complex{float re,im;}; struct complex data2[32];

27

河南科技大学毕业设计(论文)

unsigned char frq1[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; unsigned char frq2[16]=

{16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16}; unsigned char p=0;unsigned char l; unsigned char lcd_flag=0; unsigned char count=10; bit AD_flag=0;

unsigned char point=0; unsigned char temp;

/*********************函数功能:延时1ms*********************/ void delay1ms()

{ unsigned char i,j; for(i=0;i<12;i++) for(j=0;j<30;j++); }

/*******************函数功能:延时若干毫秒********************/ void delay(unsigned int n) { unsigned int i; for(i=0;i

/*****************函数功能:判断液晶模块的忙碌状态**************/ bit BusyTest(void) {

bit result;

RS=0; // RS为低电平,RW为高电平时,可以读状态 RW=1;

E=1; //E=1,才允许读写 }

NOP5; //空操作 NOP5; NOP5;

NOP5; //空操作四个机器周期,给硬件反应时间 result=BF; //将忙碌标志电平赋给result E=0;

return result;

28

河南科技大学毕业设计(论文)

/****************函数功能:将控制字写入液晶模块****************/ void Write_com (unsigned char dictate) {

while(BusyTest()==1); //如果忙就等待

RS=0; // RS和R/W同时为低电平时,可以写入指令 RW=0;

E=0; //写指令时,让E从0到1发生正跳变 NOP5;

NOP5; //空操作两个机器周期,给硬件反应时间 P0=dictate; //将数据送入P0口,即写入指令或地址 NOP5;

NOP5; NOP5; NOP5; E=1; NOP5; NOP5; NOP5; NOP5; E=0;

//空操作四个机器周期,给硬件反应时间 //E置高电平

//空操作四个机器周期,给硬件反应时间

//当E由高电平跳变低电平时,液晶开始执行命令

}

/****************函数功能:指定字符显示的实际地址***************/ void WriteAddress(unsigned char x) {

Write_com(x|0x80); //显示位置的确定方法规定为\地址码x\ }

/*********函数功能:将数据(字符的标准ASCII码)写入液晶模块********/ void WriteData(unsigned char y) {

while(BusyTest()==1);

RS=1; RW=0; E=0; P0=y; NOP5; NOP5; NOP5; NOP5;

//RS为高电平,RW为低电平时,可以写入数据 //写指令时,让E从0到1发生正跳变

//将数据送入P0口,即将数据写入液晶模块

//空操作四个机器周期,给硬件反应时间

29

河南科技大学毕业设计(论文)

E=1; //E置高电平

NOP5; NOP5; NOP5;

NOP5; //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变低电平时,液晶开始执行命令 }

/***********函数功能:对LCD的显示模式进行初始化设置*************/ void LcdInt(void) { delay(15); //延时15ms,给LCD一段较长的反应时间 Write_com(0x38); delay(5); Write_com(0x38); delay(5);

Write_com(0x38); delay(5);

Write_com(0x0C); delay(5);

Write_com(0x06);

//显示模式:16×2、5×7点阵,8位数据接口 //延时5ms

//3次写 设置模式

//显示模式设置:显示开,有光标,光标闪烁 //显示模式设置:光标右移,字符不移

delay(5);

Write_com(0x01); //清屏幕指令,将以前的显示内容清除 delay(5); }

/****************函数功能:将User的字模写入CGRAM*************/ void CgInt(void)

{unsigned char i,j,org; delay(50);

for(i=0;i<8;i++) {

org=0x40|(i*8);

Write_com(org); //设定CGRAM地址 delay(5);

for(j=0;j<8;j++)

{WriteData(User[i][j]); //写入自定义图形 delay(5); } } }

30

河南科技大学毕业设计(论文)

/********函数功能:频谱回落一格(操作全局变量frq1,frq2)**********/ void frqfall(void) {

unsigned char i; if(count==0)

{for(i=0;i<16;i++) if(frq2[i]!=0) frq2[i]--; count=10;} count--;

for(i=0;i<16;i++)

if(frq1[i]>16) frq2[i]=16;

else if(frq1[i]>frq2[i]) frq2[i]=frq1[i]; }

/**************函数功能:在第p位显示高为l的柱子****************/ void disp(void) interrupt 1 {

AD_flag=1; //把AD状态转为打断

switch(lcd_flag) //0~3,上地址 上数据 下地址 下数据 {case 0:

{frqfall(); if(p==16) p=0;

l=frq2[p]; //从frq2中取l,更新p

WriteAddress(0x00+p); lcd_flag++; break;

} case 1:

{if(l>8)

WriteData(l-9); else

WriteData(0x20); lcd_flag++; break;

31


FFT在单片机上的实现(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:伊滨区掘丁路改建工程BT项目一期工程施工组织设计 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: