历史上的今天
今天是:2024年10月17日(星期四)
2019年10月17日 | 基于数字相关的时栅信号处理设计LPC2138源程序及proteus仿真
2019-10-17 来源:51hei
设计要求如下:
1.时栅传感器模拟器:通过输入两路时间和空间的信号。
(1) 设计一路正弦载波信号模拟信号输出 sina * cos(wt)
(2) 设计一路余弦信号模拟信号输出 cosa *sin(wt)
(3) 设计两路信号的合成模拟信号输出 sin(wt+a)
2. 设计数据采集模块。(要求整周期采样)
3. ARM硬件接口电路设计:显示路和键盘电路
4. 软件设计:数字相关算法求解角度、显示、按键、A/D.
5. proteus仿真和实做。希望对大家有用!
仿真原理图如下

LPC2138单片机源程序如下:
#include "config.h"
//#include "LPC21xx.h"
#include "math.h"
//#define Fpclk 12000000
//typedef unsigned char uint8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
//typedef signed char int8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
//typedef unsigned short uint16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
//typedef signed short int16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
//typedef unsigned int uint32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
//typedef signed int int32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
//typedef float fp32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
//typedef double fp64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
#define IO_RS 0x1000000
#define IO_RW 0x2000000
#define IO_EN 0x4000000
#define LED 0X01
#define KEY1 (IO0PIN&(1<<20))
#define KEY2 (IO0PIN&(1<<21))
int32 k=0,ADC_Data,tt1,tt2;
uint32 A=1,FG1=1,FG2=2;
uint32 a,i,h,j,p,q,m,n,u,v;
double c,s,data_1=0,data_2=0,data_3=0,data_4=0;
double x,y,PI=3.141592653589793238462643383279502;
int32 Buffer[256];
double SINCE[19]={
0.0000,0.0872,0.1736,0.2588,0.3420,0.4226,
0.5000,0.5736,0.6428,0.7071,0.7660,0.8192,
0.8660,0.9063,0.9397,0.9659,0.9848,0.9962,
1.0000,
};
double COSCE[19]={
1.0000,0.9962,0.9848,0.9659,0.9397,0.9063,
0.8660,0.8192,0.7660,0.7071,0.6428,0.5736,
0.5000,0.4226,0.3420,0.2588,0.1736,0.0872,
0.0000,
};
const int16 sindata[]={
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,
0x98,0x9b,0x9e,0xa1,0xa4,0xa7,0xaa,0xad,
…………
…………限于本文篇幅 余下代码请从51黑下载附件…………
0xfc,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,
};
#define RS_1 IO1SET=(IO_RS&0xFFFFFFFF)
#define RS_0 IO1CLR=(IO_RS&0xFFFFFFFF)
#define RW_1 IO1SET=(IO_RW&0xFFFFFFFF)
#define RW_0 IO1CLR=(IO_RW&0xFFFFFFFF)
#define EN_1 IO1SET=(IO_EN&0xFFFFFFFF)
#define EN_0 IO1CLR=(IO_EN&0xFFFFFFFF)
void delayms(unsigned int t)
{
unsigned char u,v;
for(u=0;u<100;u++)
for(v=0;v<81;v++);
}
void LCD_write_com(unsigned char com) //LCD写入命令函数
{
RS_0;
RW_0;
EN_1;
IO1SET=com<<16;
delayms(5);
EN_0;
IO1CLR=0xFF0000;
}
void LCD_write_data(unsigned char data) //写入数据函数
{
RS_1;
RW_0;
EN_1;
IO1SET=data<<16;
delayms(5);
EN_0;
IO1CLR=0xFF0000;
}
void LCD_clear() //LCD清屏函数
{
LCD_write_com(0x01);
delayms(5);
}
void LCD_write_char(unsigned char x,unsigned char y,unsigned char s) //写入字符函数
{
if (y == 0)
{
LCD_write_com(0x80+x);
}
else
{
LCD_write_com(0xC0+x);
}
LCD_write_data(s);
}
void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s) //写入字符串函数
{
if (y == 0)
{
LCD_write_com(0x80 + x); //表示第一行
}
else
{
LCD_write_com(0xC0 + x); //表示第二行
}
while (*s)
{
LCD_write_data( *s);
s++;
}
}
void LCD_init() //LCD初始化
{
LCD_write_com(0x38); //显示模式设置
delayms(5);
LCD_write_com(0x38);
delayms(5);
LCD_write_com(0x38);
delayms(5);
LCD_write_com(0x38);
LCD_write_com(0x08); //显示关闭
LCD_write_com(0x01); //清屏
LCD_write_com(0x06); //显示光标移动设置
delayms(5);
LCD_write_com(0x0C); //显示开及光标设置
}
/*
void UART0Init(uint32 bps)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05;
U0LCR = 0x83;
Fdiv = (Fpclk / 16) / bps;
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
*/
void __irq IRQ_Timer0 (void)
{
// for(i=0;i<256;i++)
// {
// y=COSCE[a];
// x=SINCE[a];
// s=(y*sindata[i]);
// c=(x*cosdata[i]);
//
// sindata[i]=sin(2.0*acos(-1.0)/256*i);
// cosdata[i]=cos(2.0*acos(-1.0)/256*i);
//
// h=(s*0x1ff+0x1ff);
// h=s+c;
// DACR=((sindata[i]<<6))|(1<<16);
// for(j=0;j<0x20;j++);
if((IO0PIN&KEY1)==0)
{
if(FG1!=(A-5))
{
FG1=A;A+=5;i=0;
if(A>360) A=0;
上一篇:S3C2410看门狗watchdog寄存器介绍与使用
下一篇:gcc基本常用选项
史海拾趣
|
美国海归经历:国内和国外生活的真实比较 回国发展 在这个版面上看的时间挺长的,发现各位都是在美国呆久了,完全按照美国的思考方式来套中国,那自然是国内年薪和美国比太低了。 我在美国时也和各位想法差不多,那时候在美国一年下来税前也 ...… 查看全部问答> |
|
为什么模拟地与数字地应有各自独立的回路?大家都是地,为什么还分彼此? Link水平很低,常常会问一些低级问题。 幸蒙Perter指点,明白了少许,现在和大家分享一下。 其实本质是对的,就是数字地,模拟地都是地,并不是他们俩头上长角,十分的怪 ...… 查看全部问答> |
|
笔者使用protel多年,积累了一些用其绘制电路图的使用经验和技巧,现将这些经验和技巧成文,希望对大家用protel绘制电路图有所帮助。 经验一: 因为protel是专业电路设计软件,可供电子类各专业设计人员和广大电子爱好者使用,所提供的 ...… 查看全部问答> |
|
我在用真是還進調試的時候,程序中打了斷點,可是斷點不其作用。後來用其他同事的電腦調試卻可以。應該是我vs還進的問題吧,請高人指點,如何解決這個問題。… 查看全部问答> |
|
新手请教: 假如我手上有一个按扭,我用USB线的一端接在我的那个按扭上,另一端连在电脑的USB接口上。那么怎样实现当我按下按扭时,电脑上会作出与之相应的行为反应呢???我的那个按扭上需要怎样处理,才会实现这样简单的一个过程呢??? 如果 ...… 查看全部问答> |
|
这个月一直有个问题让我困扰着我. 在CE中是否可以真正意义上的实现相对于屏幕弹出的窗口或是图片淡入淡出(弹出时)?就是说.在mobile屏幕上(而不是你自己写的窗口或是其它你程序中的背景图片上),一个窗口淡入淡出.或是一个 ...… 查看全部问答> |
|
我用的是2003DDK +XP,写好程序后,用build命令编译时,没有生成.sys文件 出现了下面的编译信息: BUILD: Adding /Y to COPYCMD so xcopy ops won\'t hang. 高手看看问题出在了哪里? 急啊,解决就揭帖! … 查看全部问答> |




