DSP技术课程设计.docx

上传人:b****5 文档编号:5170809 上传时间:2022-12-13 格式:DOCX 页数:19 大小:19.37KB
下载 相关 举报
DSP技术课程设计.docx_第1页
第1页 / 共19页
DSP技术课程设计.docx_第2页
第2页 / 共19页
DSP技术课程设计.docx_第3页
第3页 / 共19页
DSP技术课程设计.docx_第4页
第4页 / 共19页
DSP技术课程设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

DSP技术课程设计.docx

《DSP技术课程设计.docx》由会员分享,可在线阅读,更多相关《DSP技术课程设计.docx(19页珍藏版)》请在冰豆网上搜索。

DSP技术课程设计.docx

DSP技术课程设计

DSP技术课程设计

计算机与信息工程学院2012级通信31班xxx2xx3

指导教师xxx教师

摘要本文提供了DSP应用技术设计思路,主要应用CCS软件实现各个模块之间的相互连接,使用C语言和汇编语言编程在CCS中实现软件仿真,在CCS中进行硬件仿真并通过试验箱实现

关键词CCS编译环境;C语言;硬件仿真;

 

1.设计任务和要求

 

使用DSP试验箱的流水灯模块、键盘模块以及显示模块相连接并在CCS集成开发环境中使用图形显示工具显示输入和输出波形。

2.工作原理

 

由键盘模块控制流水灯模块,在按键的同时调用显示模块。

键盘模块:

在运行键盘模块的程序中,程序首先判断是否有按键,若没有将进入等待按键的状态,如有便通过扫描函数来确定被按下键的具体地址,然后将其地址值返回。

流水灯模块:

有8个流水灯,使用的是二进制数的代码,通过二进制数的代码控制流水灯的状态。

显示模块:

用PCtoLCD2002软件,勾画出想出现的文字、字体以及形状,然后将其导入显示模块的程序。

3设计步骤和方法

先定义一个变量将键盘的返回值存起来,通过这个值来控制流水灯的循环,流水灯的设计采用八条赋值语句和八条延时语句来实现,由于延时语句是汇编语言而键盘模块以及显示模块用的都为C语言,所以要注意汇编与C语言之间的转换。

用五种不同的八条赋值语句和八条相同的延时语句设计出5中不同的花型。

将显示模块与键盘模块连接起来,在按键模块确定具体被按下键的地址的部分调用显示的语句,即之前设计好的字体和形状,在显示的语句中同时也要定义一个变量i实现每次执行显示语句的时候是字体或形状在显示屏上可以动起来。

 

4,程序代码

#include

/*-------------------------------------*/

voidWr_c_l(charcom);

voidWr_c_r(charcom);

voidWr_d_l(chardata);

voidWr_d_r(chardata);

voidInit_Lcd();

voidCls_Lcd();

voidlcd_dsp(charlorr,charpage_cnt,charline,charnumx[]);

chartemp,clr_page_cnt,clr_byte_cnt,page_cnt,colm_cnt;

/*DSP的IO空间,扩展发光二极管、键盘、液晶等外围设备*/

ioportunsignedport0800;//lcddataio

ioportunsignedport1000;//lcdreset

ioportunsignedport0c00;//lcddi

ioportunsignedport1400;//lcdcs1

ioportunsignedport1800;//lcdcs2

//对端口的定义

ioportunsignedport2C00;//faguang

charpast=254;

charkeyvalue1;

inti=0;/*ToDecideTheAICSampleFrequency*/

/*-------------------------------------*/

/*DSP的IO空间,扩展发光二极管、数码管、键盘、液晶等外围设备*/

ioportunsignedport1C00;//键盘行列线

/*-------------------------------------*/

charnum26[]={0,0x7F,0x49,0x49,0x49,0x49,0x00,0x00};//"E"=26H

charnum2d[]={0,0x7F,0x40,0x40,0x40,0x40,0x00,0x00};//"L"=2DH

charnum30[]={0,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00};//"O"=30H

charnum37[]={0,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00};//"V"=37H

charnum10[]={0,0x32,0x49,0x79,0x41,0x3E,0x00,0x00};//"@"=10H

charnum0[]={0,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00};//"0"=00H

charnum1[]={0,0x00,0x42,0x7F,0x40,0x00,0x00,0x00};//"1"=01H

charnum2[]={0,0x42,0x61,0x51,0x49,0x46,0x00,0x00};//"2"=02H

charnum3[]={0,0x21,0x41,0x45,0x4B,0x31,0x00,0x00};//"3"=03H

charnum4[]={0,0x18,0x14,0x12,0x7F,0x10,0x00,0x00};//"4"=04H

charnum5[]={0,0x27,0x45,0x45,0x45,0x39,0x00,0x00};//"5"=05H

charnum6[]={0,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00};//"6"=06H

charnuml1[]={0x44,0x44,0xFC,0x44,0x44,0x10,0xD0,0xFF};

charnuml2[]={0x90,0x00,0xD0,0xFF,0xD0,0x10,0x10,0x00};

charnuml3[]={0x08,0x08,0x07,0x14,0x08,0x06,0x01,0xFF};

charnuml4[]={0x04,0x03,0x00,0xFF,0x01,0x0E,0x08,0x00};

charnumj1[]={0x00,0x08,0x08,0x08,0x88,0x48,0x38,0xFF};

charnumj2[]={0x18,0x28,0x48,0x88,0x88,0x08,0x00,0x00};

charnumj3[]={0x40,0x32,0x02,0x01,0x10,0x60,0x00,0x07};

charnumj4[]={0x10,0x60,0x00,0x00,0x11,0x63,0x01,0x00};

//所需要的汉字、数字和字符的显示代码

charrdkey();

charscan_key();

voidmmm();

voidmain()

{

charkeyvalue=255;

c54_init();

for(;;){

keyvalue=scan_key();

if(keyvalue!

=255)

past=keyvalue;

if(past==0)

{

port2C00=0xfd;

loop0();

port2C00=0xfb;

loop0();

port2C00=0xf7;

loop0();

port2C00=0xef;

loop0();

port2C00=0xdf;

loop0();

port2C00=0xbf;

loop0();

port2C00=0x7f;

loop0();

i=i+1;

mmm();

i=0;

}

elseif(past==1)

{

port2C00=0x7f;

loop0();

port2C00=0xbf;

loop0();

port2C00=0xdf;

loop0();

port2C00=0xef;

loop0();

port2C00=0xf7;

loop0();

port2C00=0xfb;

loop0();

port2C00=0xfd;

loop0();

port2C00=0xfe;

loop0();

i=i+1;

mmm();

i=0;

}

elseif(past==2)

{

port2C00=0xe7;

loop0();

port2C00=0xdb;

loop0();

port2C00=0xbd;

loop0();

port2C00=0x7e;

loop0();

port2C00=0xbd;

loop0();

port2C00=0xdb;

loop0();

port2C00=0xe7;

loop0();

port2C00=0xff;

loop0();

}

elseif(past==3)

{

port2C00=0x7e;

loop0();

port2C00=0x3c;

loop0();

port2C00=0x18;

loop0();

port2C00=0x00;

loop0();

port2C00=0x18;

loop0();

port2C00=0x3c;

loop0();

port2C00=0x7e;

loop0();

port2C00=0xff;

loop0();

}

elseif(past==4)

{

port2C00=0xaa;

loop0();

port2C00=0x55;

loop0();

}

}

}

//循环和流水灯花样的控制

charrdkey(){

charkeyin;

port1C00=0x0;

keyin=port1C00;

keyin=keyin&0xF;

if(keyin==0xF)

return0;

else

return1;

}

charscan_key(){

charkeyornot;

intkeyin;

intkeyvalue;

keyornot=rdkey();

if(!

keyornot){

return255;

}

delay3();

keyornot=rdkey();

if(keyornot){//某个键按下!

port1C00=0xe;

keyin=port1C00&0xF;

if(keyin!

=0xF){

keyvalue=0;

keyin=keyin;

keyvalue=keyin+keyvalue-7;

while(keyornot=rdkey())//等键松下

delay3();

}

port1C00=0xd;

keyin=port1C00&0xF;

if(keyin!

=0xF){

keyvalue=1;

keyvalue=keyin+keyvalue;

while(keyornot=rdkey())

delay3();

}

port1C00=0xb;

keyin=port1C00&0xF;

if(keyin!

=0xF){

keyvalue=9;

keyvalue=keyin+keyvalue;

while(keyornot=rdkey())

delay3();

}

port1C00=0x7;

keyin=port1C00&0xF;

keyin=port1C00&0xF;

if(keyin!

=0xF){

keyvalue=17;

keyvalue=keyin+keyvalue;

while(keyornot=rdkey())

delay3();

}

if(keyvalue==0x7){

keyvalue=0;

lcd_dsp(0,8,1,num1);

gotoproecess;

}

if(keyvalue==0x6){

keyvalue=1;

lcd_dsp(0,8,1,num2);//调用显示语句,显示数字

gotoproecess;

}

if(keyvalue==0x4){

keyvalue=2;

lcd_dsp(0,8,1,num3);//调用显示语句,显示数字

gotoproecess;

}

if(keyvalue==0x0){

keyvalue=3;

lcd_dsp(0,8,1,num4);//调用显示语句,显示数字

gotoproecess;

}

if(keyvalue==0xf){

keyvalue=4;

lcd_dsp(0,8,1,num5);//调用显示语句,显示数字

gotoproecess;

}

if(keyvalue==0xe){

keyvalue=5;

lcd_dsp(0,8,1,num6);//调用显示语句,显示数字

gotoproecess;

}

if(keyvalue==0xc){

keyvalue=6;

gotoproecess;

}

if(keyvalue==0x8){

keyvalue=7;

gotoproecess;

}

if(keyvalue==0x17){

keyvalue=8;

gotoproecess;

}

if(keyvalue==0x16){

keyvalue=9;

gotoproecess;

}

if(keyvalue==0x14){

keyvalue=10;

gotoproecess;

}

if(keyvalue==0x10){

keyvalue=11;

gotoproecess;

}

if(keyvalue==0x1f){

keyvalue=12;

gotoproecess;

}

if(keyvalue==0x1e){

keyvalue=13;

gotoproecess;

}

if(keyvalue==0x1c){

keyvalue=14;

gotoproecess;

}

if(keyvalue==0x18){

keyvalue=15;

gotoproecess;

}

proecess:

returnkeyvalue;

}

return255;

}

voidmmm()

{

temp=port1000;///RES=0,resetlcd

delay2();

port1000=temp;///RES=1,enablelcd

Init_Lcd();//initializelcd

Cls_Lcd();//清屏

lcd_dsp(0,1,1,numl1);//显示文字的初始位置

lcd_dsp(0,1,2,numl2);

lcd_dsp(0,2,1,numl3);

lcd_dsp(0,2,2,numl4);

lcd_dsp(0,7,1,numj1);

lcd_dsp(0,7,2,numj2);

lcd_dsp(0,8,1,numj3);

lcd_dsp(0,8,2,numj4);

delay2();//延时

Cls_Lcd();//清屏

lcd_dsp(0,1,1+i,numl1);//使每次显示的文字的位置发生变化达到动起来的效果lcd_dsp(0,1,2+i,numl2);

lcd_dsp(0,2,1+i,numl3);

lcd_dsp(0,2,2+i,numl4);

lcd_dsp(0,7,i+1,numj1);

lcd_dsp(0,7,i+2,numj2);

lcd_dsp(0,8,i+1,numj3);

lcd_dsp(0,8,i+2,numj4);

delay2();//延时

Cls_Lcd();//清屏

lcd_dsp(1,1,1,numl1);//(哪半屏,第几页,第几个字,字符数据)

lcd_dsp(1,1,2,numl2);

lcd_dsp(1,2,1,numl3);

lcd_dsp(1,2,2,numl4);

lcd_dsp(1,7,1,numj1);

lcd_dsp(1,7,2,numj2);

lcd_dsp(1,8,1,numj3);

lcd_dsp(1,8,2,numj4);

delay2();//延时

Cls_Lcd();//清屏

lcd_dsp(1,1,1+i,numl1);//在右半屏的初始位置

lcd_dsp(1,1,2+i,numl2);

lcd_dsp(1,2,1+i,numl3);

lcd_dsp(1,2,2+i,numl4);

lcd_dsp(1,7,i+1,numj1);

lcd_dsp(1,7,i+2,numj2);

lcd_dsp(1,8,i+1,numj3);

lcd_dsp(1,8,i+2,numj4);

delay2();

Cls_Lcd();//清屏

lcd_dsp(1,1,2+i,numl1);//(哪半屏,第几页,第几个字,字符数据)

lcd_dsp(1,1,3+i,numl2);

lcd_dsp(1,2,2+i,numl3);

lcd_dsp(1,2,3+i,numl4);

lcd_dsp(1,7,i+2,numj1);

lcd_dsp(1,7,i+3,numj2);

lcd_dsp(1,8,i+2,numj3);

lcd_dsp(1,8,i+3,numj4);

delay2();

Cls_Lcd();//清屏

lcd_dsp(0,4,1,num2d);//L

lcd_dsp(0,4,2,num30);//O

lcd_dsp(0,4,3,num37);//V

lcd_dsp(0,4,4,num26);//E

lcd_dsp(1,4,1,num2d);//?

lcd_dsp(1,4,2,num30);

lcd_dsp(1,4,3,num37);

lcd_dsp(1,4,4,num26);

lcd_dsp(0,1,1,numl1);//最终定位不在清屏

lcd_dsp(0,1,2,numl2);

lcd_dsp(0,2,1,numl3);

lcd_dsp(0,2,2,numl4);

lcd_dsp(1,7,1,numj1);

lcd_dsp(1,7,2,numj2);

lcd_dsp(1,8,1,numj3);

lcd_dsp(1,8,2,numj4);

}

voidlcd_dsp(charlorr,charpage_cnt,charline,charnumx[]){//写入一个8*8的字符

charclr_byte_cnt;

page_cnt=(page_cnt-1)|0xb8;//设置页号

line=(line-1)*8+0x40;//改字符的起始列

if(lorr==0){//写-l块(左半屏)

Wr_c_l(page_cnt);

Wr_c_l(line);

for(clr_byte_cnt=1;clr_byte_cnt<=8;clr_byte_cnt++){//将numx[]写入

Wr_d_l(numx[clr_byte_cnt-1]);//在对应列写入一字节数据

}

}

else{//写-r块(右半屏)

Wr_c_r(page_cnt);

Wr_c_r(line);

for(clr_byte_cnt=1;clr_byte_cnt<=8;clr_byte_cnt++){

Wr_d_r(numx[clr_byte_cnt-1]);

}

}

}

voidWr_c_r(charcom){//向块1写指令(右半屏)

chartemp;

temp=port1400;//cs1=0

delay1();

port1800=temp;//cs2=1,选中块1

delay1();

temp=port0c00;//di=0

delay1();

temp=port0800&0x80;//E=1,读状态字,判忙

delay1();

while(temp==0x80){

temp=port0800&0x80;

delay1();

}

port0800=com;//E=1,将com作为指令写入

delay1();

}

voidWr_c_l(charcom){//向块2写指令(左半屏)

//chartemp;

port1400=temp;//cs1=1

delay1();

temp=port1800;//cs2=0,选中块2

delay1();

temp=port0c00;//di=0

delay1();

temp=port0800&0x80;//读状态字,判忙

delay1();

while(temp==0x80){

temp=port0800&0x80;

delay1();

}

port0800=com;

del

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1