历史上的今天
返回首页

历史上的今天

今天是: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;

推荐阅读

史海拾趣

FDK AMERICA公司的发展小趣事

随着全球电子市场的不断发展,FDK AMERICA公司意识到单靠国内市场已无法满足其发展需求。于是,公司积极寻求国际合作机会,与全球知名电子企业建立战略合作伙伴关系。通过合作,公司成功将产品打入国际市场,进一步扩大了市场份额。

CANOPUS公司的发展小趣事

随着业务的不断拓展,CANOPUS开始专注于鼓的制造研究。在1984年,公司推出了其标志性产品——整木掏空榉木军鼓。这款鼓的独特之处在于其鼓腔是由整个树干挖空处理而成,导角也做了特有的设计。这一创新使得CANOPUS的鼓在音质和外观上都与众不同,迅速在市场上获得了认可。

Hanghsing Enterprise Co Ltd公司的发展小趣事

随着电子技术的飞速发展,CANOPUS开始探索将传统鼓制作技艺与现代电子技术相结合。公司不断投入研发,推出了一系列具有创新性的电子鼓产品。这些产品不仅保留了传统鼓的音质和手感,还加入了现代电子元素,使得演奏更加多样化和便捷。

南京国博公司的发展小趣事

2022年7月22日,国博电子在上海证券交易所科创板成功上市,标志着公司进入了一个新的发展阶段。上市不仅为公司带来了更多的资金支持和市场关注,也为其未来的发展提供了更广阔的空间。作为中国电子科技集团有限公司(简称“中国电科”)的首家科创板上市公司,国博电子承载着推动中国电子信息产业高质量发展的重任。上市以来,公司继续加大研发投入,拓展产品线,致力于成为全球射频电子领域的行业领导者。

Emulation Technology Inc公司的发展小趣事

面对电子行业的快速发展和市场的不断变化,Emulation始终保持着对技术的持续创新。公司不断投入研发资源,推出了一系列具有领先性能的模拟和仿真产品,满足了客户对于高精度、高效率仿真工具的需求。这些产品不仅提高了工程师们的设计效率,还促进了整个电子行业的发展。

AVX公司的发展小趣事

XXXX年,AVX公司迎来了一个重要的转折点,它与日本Kyocera公司达成了战略合作。这次合作使AVX在技术上获得了强大的支持,并在市场上获得了更广阔的发展空间。通过整合双方的优势资源,AVX在贴片陶瓷电容、连接器等领域取得了显著的成绩,进一步巩固了其在电子元件市场的地位。

问答坊 | AI 解惑

美国海归经历:国内和国外生活的真实比较 回国发展

美国海归经历:国内和国外生活的真实比较 回国发展 在这个版面上看的时间挺长的,发现各位都是在美国呆久了,完全按照美国的思考方式来套中国,那自然是国内年薪和美国比太低了。   我在美国时也和各位想法差不多,那时候在美国一年下来税前也 ...…

查看全部问答>

看图说话STM32-俺相信您肯定会收藏:)

看图说话STM32-俺相信您肯定会收藏:)【图片】STM32F10X.jpg…

查看全部问答>

发现有人做运放专题,配合学习,大家把坛子里运放的资料的顶起吧

赶快,人多力量大,学习要趁热打铁。 我们把运放的资料都顶起,作为运放专题来学习一下。 我觉得这样效果会很不错的!…

查看全部问答>

形象的说明模拟地和数字地

为什么模拟地与数字地应有各自独立的回路?大家都是地,为什么还分彼此? Link水平很低,常常会问一些低级问题。 幸蒙Perter指点,明白了少许,现在和大家分享一下。 其实本质是对的,就是数字地,模拟地都是地,并不是他们俩头上长角,十分的怪 ...…

查看全部问答>

Protel绘图经验谈

 笔者使用protel多年,积累了一些用其绘制电路图的使用经验和技巧,现将这些经验和技巧成文,希望对大家用protel绘制电路图有所帮助。 经验一:   因为protel是专业电路设计软件,可供电子类各专业设计人员和广大电子爱好者使用,所提供的 ...…

查看全部问答>

Wince 5.0 真機調試問題

    我在用真是還進調試的時候,程序中打了斷點,可是斷點不其作用。後來用其他同事的電腦調試卻可以。應該是我vs還進的問題吧,請高人指點,如何解決這個問題。…

查看全部问答>

u盘枚举成功后,名字显示为Removable disk,该如何才能显示为自己想要的名字?

不是按右键的“重命名”,是插上U盘,自动显示自己想要的名字!…

查看全部问答>

外设与电脑的连接问题

新手请教: 假如我手上有一个按扭,我用USB线的一端接在我的那个按扭上,另一端连在电脑的USB接口上。那么怎样实现当我按下按扭时,电脑上会作出与之相应的行为反应呢???我的那个按扭上需要怎样处理,才会实现这样简单的一个过程呢??? 如果 ...…

查看全部问答>

fade in / fade out

  这个月一直有个问题让我困扰着我.   在CE中是否可以真正意义上的实现相对于屏幕弹出的窗口或是图片淡入淡出(弹出时)?就是说.在mobile屏幕上(而不是你自己写的窗口或是其它你程序中的背景图片上),一个窗口淡入淡出.或是一个 ...…

查看全部问答>

驱动程序编译的问题!急!!!

我用的是2003DDK +XP,写好程序后,用build命令编译时,没有生成.sys文件 出现了下面的编译信息: BUILD: Adding /Y to COPYCMD so xcopy ops won\'t hang. 高手看看问题出在了哪里? 急啊,解决就揭帖! …

查看全部问答>