DSP课程设计

更新时间:2024-06-01 09:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课题:

DSP课程设计

数码显示和定时器设计

院系:计算机与通信工程学院

专业: 信息工程11-01 姓名: 0000 学号: 000000 日期: 2014-06-17

指导老师: 00000

郑州轻工业学院

课 程 设 计 任 务 书

班级 信息工程11-01 学号 00000 姓名 000

题目 基于DSP的数码管显示和定时器设计 1. 主要内容 (1)主要内容 (2)设计目的 (3)基本要求

(4)设计摘要,DSP简介。 (5)设计原理,思路。 (6)课程总结 2、设计目的

(1)巩固DSP系统分析、设计方法。

(2)巩固并进一步加强DSP系统的理解与应用。 (3)综合运用C编程知识(基础知识及高级应用)。

(4)掌握程序的编写,调试,和运行,熟悉CCS环境的运用 3、基本要求

(1) 编写程序,能实现数码管显示相应的按键号 (2) 能在在LCD上显示定时功能

(3) 定时器拥有开始,暂停,复位等功能。

4、 设计摘要,DSP简介

摘要:DSP是20世纪60年代,随着信息学科和计算机学科的高速发展而

迅速发展起来的一门新兴学科。它的重要性日益在各个领域的应用中表现出来。 其主要标志是两项重大进展,即快速傅里叶变换(FFT)算法的提出和数字滤波器设计方法的完善。数字信号处理是把信号用数字或符号表示成序列,通过计算机或通用(专用)信号处理设备,用数值计算方法进行各种处理,达到提取有用信息便于应用的目的。例如:滤波、检测、变换、增强、估计、识别、参数提取、频谱分析等。

数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。数字信号处理在理论上的发展推动了数字信号处理应用的发展。反过来,数字信号处理的应用又促进了数字信号处理理论的提高。而数字信号处理的实现则是理论和应用之间的桥梁。数字信号处理是以众多的学科为理论基础的,它所涉及的范围及其广泛。例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。一些新兴的学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。

数字信号处理(DSP)芯片是一种特别适合于进行数字信号处理运算的微处理器可实时快速地实现各种数字信号处理算法。自20世纪80年代初诞生以来已广泛应用于通信、电子、航空航天、军事及家电产品成为一种十分重要的电子产品的核心部件。DSP芯片得到了飞速的发展。DSP芯片的高速发展,一方面得益于集成电路技术的发展,另一方面也得益于巨大的市场。在近20年时间里,DSP芯片已经在信号处理、通信、雷达等许多领域得到广泛的应用。目前,DSP芯片的价格越来越低,性能价格比日益提高,具有巨大的应用潜力。DSP芯片的应用主要有:

(1) 信号处理 (2) 通信

(4) 图形/图像 (5) 军事 (6) 仪器仪表

(7) 自动控制 (8) 医疗 (9) 家用电器

随着DSP芯片性能价格比的不断提高,可以预见DSP芯片将会在更多的领域内得到更为广泛的应用。

5,计数器的设计 思路:

程序编码:

******************************************************************/ #include

#include #include #include #include

#define led8 (*((unsigned int *)0x200001)) #define Digital8 (*((unsigned int *)0x200002)) #define LCD_REG (*((unsigned int *)0x200003)) #define buzzer (*((unsigned int *)0x200004)) #define USER_SW (*((unsigned int *)0x200005)) #define LCD_DATA (*((unsigned int *)0x200006)) #define USE_SW (*((unsigned int *)0x200005)) #define UART_BASE_ADDR

0x200008

#define RBR #define THR #define IER #define IIR #define FCR #define LCR #define MCR #define LSR #define MSR #define SCR #define DLL #define DLM

*((int *)(UART_BASE_ADDR+0)) *((int *)(UART_BASE_ADDR+0))

*((int *)(UART_BASE_ADDR+1)) *((int *)(UART_BASE_ADDR+2))

*((int *)(UART_BASE_ADDR+2)) *((int *)(UART_BASE_ADDR+3)) *((int *)(UART_BASE_ADDR+4)) *((int *)(UART_BASE_ADDR+5)) *((int *)(UART_BASE_ADDR+6)) *((int *)(UART_BASE_ADDR+7)) *((int *)(UART_BASE_ADDR+0)) *((int *)(UART_BASE_ADDR+1))

#define DIG_DATA (*((unsigned int *)0x200002))

#define comm 0 #define dat 16 #define dat2 1 /*要显示的字符*/

int second1=0, second2=0,minute1=0,minute2=0,hour1=0,hour2=0; unsigned char str1[]={\ %unsigned char str2[]={\ \void Delay(unsigned int nDelay);

void wr_lcd(unsigned char dat_comm, unsigned int content); void delaynum(unsigned int d_time); /*锁相环的设置*/

PLL_Config myConfig = {

0, //IAI: the PLL locks using the same process that was underway //before the idle mode was entered 1, //IOB: If the PLL indicates a break in the phase lock,

//it switches to its bypass mode and restarts the PLL phase-locking

//sequence

12, //PLL multiply value; multiply 12 times

2 //Divide by 2 PLL divide value; it can be either PLL divide value //(when PLL is enabled), or Bypass-mode divide value //(PLL in bypass mode, if PLL multiply value is set to 1) };

/*SDRAM的EMIF设置*/ EMIF_Config emiffig = {

0x221, //EGCR : the MEMFREQ = 00,the clock for the memory is equal to cpu frequence

EMIF

// the MEMCEN = 1,the memory clock is reflected on the //

the WPE = 0 ,forbiden the writing posting when we debug the

CLKMEM pin

EMIF

0xFFFF, //EMI_RST: any write to this register resets the EMIF state machine 0x1fff,

//CE3_1: CE0 space control register 1

// the NOHOLD = 1,HOLD requests are not recognized by the

0x00ff, //CE3_2: CE0 space control register 2 0x00ff, //CE3_3: CE0 space control register 3 0x1fff,

//CE1_1: CE0 space control register 1

// Asynchronous, 16Bit 0x00ff, //CE1_2: CE0 space control register 2 0x00ff, //CE1_3: CE0 space control register 3

0x1FFF, //CE2_1: CE0 space control register 1 // Asynchronous, 16Bit 0xFFFF, //CE2_2: CE0 space control register 2

0x00FF, //CE2_3: CE0 space control register 3 0x1fff,

//CE3_1: CE0 space control register 1

0x00ff, //CE3_2: CE0 space control register 2 0x00ff, //CE3_3: CE0 space control register 3

0x2911, //SDC1: SDRAM control register 1

//

TRC = 8

// SDSIZE = 0;SDWID = 0 // RFEN = 1 // TRCD = 2 // TRP = 2

0x0410, //SDPER : SDRAM period register

//

7ns *4096

0x07FF, //SDINIT: SDRAM initialization register

// any write to this register to init the all CE spaces, // do it after hardware reset or power up the C55x device

0x0131 //SDC2: SDRAM control register 2 };

/*************以下内容为LCD的读写等函数**************/ /* 参考:LCD说明书

TMS320VC5509 DSP External Memory Interface (EMIF) Reference Guide

*/

// SDACC = 0; // TMRD = 01; // TRAS = 0101; // TACTV2ACTV = 0001;

//*addr为CPLD寄存器操作专用指针

Uint16 Code[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f};

void delay(unsigned int d_time) { } main() {

int temp,k,start=0,stop=0,rw=0,c,key;

/*初始化CSL库*/ while(d_time--);

CSL_init();

/*EMIF为全EMIF接口*/ CHIP_RSET(XBSR,0x0a01);

/*设置系统的运行速度为144MHz*/ PLL_config(&myConfig);

/*初始化DSP的EMIF*/ EMIF_config(&emiffig);

wr_lcd(comm,0x01); //清屏指令

wr_lcd(comm,0x38); //设定LCD为16*2,5*7矩阵,8位数据接口 wr_lcd(comm,0x0c); //显示ON 光标ON,闪烁ON wr_lcd(comm,0x06); //文字不动,光标

{ temp=USE_SW&0xff; while(1)

if(temp!=0x00) { Delay(20); if(temp!=0x00)

{

k=temp; while(temp!=0x00) {

temp=USE_SW&0xff; } c=0;

while(k!=0) { k=k>>1; c++;

}

//转换为键码,1~81,2,4,8,16,32,64,128

DIG_DATA=Code[c-1];

}

} key=c;

if(key==1)start=1;

if(key==2)stop=1;

if(key==3)rw=1; if(rw==1)

{

second2=0,minute1=0,minute2=0,hour1=0,hour2=0,start=0,stop=0,rw=0;}

if(second1==9)

{

分别对应

second1=0,

if((start==1)&(stop==0)) second1=0;

else

second1=9,stop=0; if((second2==5)&(start==1)) {second2=0; if(minute1==9) {minute1=0; if(minute2==5) {minute2=0;

if(hour1==3){hour1=0;if(hour2==2)hour2=0;else hour2++; }

else hour1++; }

else minute2++; } else minute1++;

}

else

{if(stop==1)second2=second2+0;else second2++;} }

else

{ if((start==1)&(stop==0))

second1++;

else stop=0; }

delay(200);

str1[7]='0'+second1;

str1[6]='0'+second2; str1[5]='0'+10; str1[4]='0'+minute1; str1[3]='0'+minute2; str1[2]='0'+10; str1[1]='0'+hour1; str1[0]='0'+hour2;

//str2[k]=48+second;

wr_lcd(comm,0x80); //第一行字符地址

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

{

wr_lcd(dat2,str1[k]); delay(200); }

// wr_lcd(comm,0xc0); //第二行数据指针的地址 // for(k=0;k<16;k++)

// {

// wr_lcd(dat2,str2[k]); // delay(200); // }

delay(1000);

//LCD输出设置 }

}

void delaynum(unsigned int d_time) { }

// BIT 0 LCD1602 RS // BIT 1 LCD1602 EN

void wr_lcd(unsigned char dat_comm, unsigned int content) {

//EN 高变低电平,液晶开始操作

//RS 高电平为数据寄存器 低电平为指令寄存器

Delay(40); if(dat_comm) {

LCD_REG=0x01;

LCD_DATA=content; //数据端口 LCD_REG=0x03; //en=0 delaynum(80);

LCD_REG=0x00; //en=0 while(d_time--);

}

else {

LCD_REG=0x00; LCD_DATA=content;

LCD_REG=0x02; //rs==1 en==0 写指令端口 delaynum(80);

LCD_REG=0x00; //en=0

}

Delay(100); }

void Delay(unsigned int nDelay) {

int ii,jj,kk=0;

for ( ii=0;ii

for ( jj=0;jj<64;jj++) {

}

/*******************************************************************\\ * End of lcd.c

\\**********************************************************/

实验截图如下:

}

kk++; }

6,设计总结

通过本次课程设计。首先让我认识到了DSP与我们生活的密切相关性。日常生活中我们常常接触的一些电子产品功能原来很多都可以通过DSP来实现,也清楚了DSP的工作机制以及相关函数的应用。在不断地修改,调试过程中,有痛苦,但也总是苦尽甘来,最后成功的喜悦是无法比拟的。设计中对于C语言的要求是我的弱项,对此我不得不重新温习一遍

C语言的知识点,

经过本次设计,我不仅清楚了关于DSP系统的分析和设计以及基于CCS的开发方法,C语言的应用及相关知识点的掌握。更重要的是加强了我对DSP的兴趣感情,通过自己的实际操作,不仅完成了老师的课程要求,更是增加了我对嵌入式的一个更加清楚的认识,我想这才本次课程设计的目的。

7、主要参考文献

程佩青 :《数字信号处理教程》(第二版) 清华大学出版社 2001年

戴明帧 周建江:《TMS320C54X DSP结构、原理及应用》(第二版) 北京航空航天大学出版社 2007

雷勇:《DSP系统设计与实践》 电子工业出版社 2005

完 成 时 间: 2014-06-17

指导教师签名:

课程负责人签名:

3 点击结账后显示如下:

4点显示详单(图左),然后若点返回出现下图(图右)

5 点确认则出现选择项(图左),然后再点确认则退出且显示结束界面(图右)

本文来源:https://www.bwwdw.com/article/cvk6.html

Top