本 科 毕 业 设 计
第 31 页 共 35 页
RSTSRC = 0x02; //设置VDD监视器为复位源,代码中所有的对rstsrc的写操作均用直接赋值 方式完成(如rstsrc = 0x02)
//------------------------------------------ sleep(10);
printf(\ UART1printf(\ printf(\
UART1printf(\ printf(\中断UART0 \\r\\n\ UART1printf(\中断UART1 \\r\\n\
while(1) //重复循环显示 {
if(UartCnt != UartCntOld) {
if(UartCnt==0) {
printf(\ }
else {
printf(\ }
UartCntOld = UartCnt; }
if(Time0Cnt > 5000) {
Time0Cnt = 0;
LED1 = ~LED1;
UART1printf(\这是UART%d,波特率是9600\\n\ printf(\这是UART%d,波特率是4800\\n\ }
} }
/***************************************************************** *功能:串行接收 uart1中断服务函数
*****************************************************************/ void UART1_Interrupt(void) interrupt 16 {
while (SCON1&0x01) //接收到数据标志 RI1=1 {
EIE2 &= 0xfD; //禁止UART1中断
本 科 毕 业 设 计
第 32 页 共 35 页
Uart0Str[UartCnt] = SBUF1;
SCON1 = 0x30; //复位RI1、TI1=0 if(++UartCnt > 19) {
UartCnt = 0; } else {
Uart0Str[UartCnt] = '\\0'; } }
EIE2|= 0x02; //允许UART1中断 }
void dectostr(char *s, unsigned long datain) //将10进制数数字转换为10进制字符串 {
int i; char c;
unsigned long tmp = datain; if (tmp == 0) {
i=1; } else {
for (i=0;tmp>0;i++) {
tmp = tmp/10; } }
s[i--] = '\\0'; while(1) {
c= datain; s[i--] = c +'0';
if (datain < 10) break; datain = datain/10; } }
void UART1putchar (char c) {
SBUF1 = c;
while(!(SCON1&0x02));
SCON1 &= 0xFD; //复位TI1=0 }
本 科 毕 业 设 计
//UART1发送函数
int UART1printf(const char *fmt, ...) {
const char *s; int d;
char buf1[16]; va_list ap;
va_start(ap, fmt); while (*fmt) {
if ((*fmt != '%') && (*fmt != '\\0')) {
UART1putchar(*fmt++); continue; }
switch (*(++fmt)) {
case 's':
s = va_arg(ap, const char *); for ( ; *s; s++) {
UART1putchar(*s); }
break; case 'd':
d = va_arg(ap, int); dectostr(buf1,d);
for (s = buf1; *s; s++) {
UART1putchar(*s); }
break; default:
UART1putchar(*fmt); break; }
fmt++; }
va_end(ap);
return 1;
第 33 页 共 35 页
本 科 毕 业 设 计
第 34 页 共 35 页
MATLAB程序代码:
%*************************************************************************% % FFT实践及频谱分析 % %*************************************************************************% %***************1.正弦波****************% fs=100;%设定采样频率 N=128; n=0:N-1; t=n/fs;
f0=10;%设定正弦信号频率
x=sin(2*pi*f0*t); %生成正弦信号 figure(1); subplot(231);
plot(t,x);%作正弦信号的时域波形 xlabel('t'); ylabel('y');
title('正弦信号y=2*pi*10t时域波形'); grid;
%进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值
f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(1); subplot(232);
plot(f,mag);%做频谱图 axis([0,100,0,80]); xlabel('频率(Hz)'); ylabel('幅值');
title('正弦信号y=2*pi*10t幅频谱图N=128'); grid;
%求均方根谱 sq=abs(y); figure(1); subplot(233); plot(f,sq);
xlabel('频率(Hz)'); ylabel('均方根谱');
title('正弦信号y=2*pi*10t均方根谱'); grid;
%求功率谱 power=sq.^2; figure(1); subplot(234); plot(f,power);
本 科 毕 业 设 计
xlabel('频率(Hz)'); ylabel('功率谱');
title('正弦信号y=2*pi*10t功率谱'); grid;
%求对数谱 ln=log(sq); figure(1); subplot(235); plot(f,ln);
xlabel('频率(Hz)'); ylabel('对数谱');
title('正弦信号y=2*pi*10t对数谱'); grid;
%用IFFT恢复原始信号 xifft=ifft(y);
magx=real(xifft);
ti=[0:length(xifft)-1]/fs; figure(1); subplot(236); plot(ti,magx); xlabel('t'); ylabel('y');
title('通过IFFT转换的正弦信号波形'); grid;
第 35 页 共 35 页