DSP综合实验4

发布时间 : 星期五 文章DSP综合实验4更新完毕开始阅读

for(i=0;i<2;i++)

mydelay(); } void sp() { int i,j;

lcd_clr(1); /* clear LCD display */

mydelay();

i=lcd_printf(1,0,\正在测试扬声器\ /* wait for send end ! */ mydelay();

i=lcd_printf(2,0,\请稍候. . . \ /* wait for send end ! */

for(j=0;j<5;j++) {

speak(800,1); for(i=0;i<4;i++) mydelay(); }

i=lcd_printf(4,2,\测试完毕!\ /* wait for send end ! */ for(i=0;i<5;i++) mydelay(); }

void main() { int i,key;

pllx10(); /* run at 10MHz */

init_start();

for(i=0;i<10;i++) mydelay();

test_again:

lcd_clr(1); /* clear LCD display */ lcd_clr(1);

for(i=0;i<2;i++); mydelay();

lcd_printf(1,0,\全部连续自检\

mydelay();

lcd_printf(2,0,\分步单个自检\ mydelay();

lcd_printf(3,0,\计算器\ mydelay();

lcd_printf(4,0,\请选择(1-3):\ mydelay(); do {

do{

key=get_key(1); }while(key==0);

switch(key_choose(key & 0xff)) {

case 1: goto test_start;

case 2: goto test_one_by_one;

case 3: goto test_calculate; default:

lcd_printf(4,6,\ \ break;

}

}while(1); //!IsQuitKey);

test_start:

lcd_clr(1); /* clear LCD display */ mydelay(); for(i=0;i<5;i++) {

led_printf(\ mydelay(); mydelay();

led_printf(\ mydelay(); mydelay(); }

led_printf(\

mydelay(); /* give MCU time to end clearing LED */

/* i=lcd_printf(1,0,\1\

mydelay();

strcpy(buf,\ lcd_printf(2,0,buf,1); */

i=lcd_printf(1,0,\你好,银杏科技 !\ /* wait for send end ! */ mydelay();

i=lcd_printf(2,0,\下面测试键盘:\ mydelay();

i=lcd_printf(3,0,\请依次按下所有键\ /* wait for send end ! */ mydelay();

i=lcd_printf(4,0,\ ESC退出\ mydelay();

IsQuitKey=0;NowLine=1;NowCol=0; for(i=0;i<32;i++) { do{

key=get_key(1); }while(key==0);

// mydelay1(); /* wait for MCU ... */

if(i==0)

{

lcd_clr(1); /* clear LCD display */ mydelay();

}

key_shown(key & 0xff);

if(IsQuitKey ==1 ) break; } ram();

dc_motor();

step_motor();

led();

speak(12000,1); for(i=0;i<5;i++) mydelay(); goto test_again;

test_calculate:

lcd_clr(1); /* clear LCD display */ mydelay();

NowLine=2; NowCol=0; IsQuitKey=0; First_input=1; i=lcd_printf(1,0,\退出 RUN继续\ mydelay();

do { do{

key=get_key(1); }while(key==0);

IsQuitKey=key_cal(key & 0xff);

}while(IsQuitKey <=0);

if(IsQuitKey == 1)

goto test_again; else

goto test_calculate;

test_one_by_one:

IsQuitKey=0;

lcd_clr(1); /* clear LCD display */ for(i=0;i<2;i++);

mydelay();

lcd_printf(1,0,\存储器 2.步进\ mydelay();

lcd_printf(2,0,\电机 3.直流电机\

mydelay();

lcd_printf(3,0,\交通灯 5.喇叭\ mydelay();

lcd_printf(4,0,\请选择(1-5):\

mydelay(); do {

do{

key=get_key(1); }while(key==0);

switch(key_choose(key & 0xff)) {

case 1: ram();//测试RAM goto test_one_by_one; case 2: step_motor();

goto test_one_by_one; case 3: dc_motor(); goto test_one_by_one; case 4: traffic_led();

goto test_one_by_one; case 5: sp();//测试蜂鸣器

goto test_one_by_one; }

}while(IsQuitKey != 1);

goto test_again; }

五、实验结果:

1、所有子程序的函数都在init.c文件中测试程序的每一部分都做成了函数,只要调用子函数就能执行相应的程序,子程序包括:I/O口、步进电机、直流电机、蜂鸣器等。 2、chkmem.asm文件为存储器测试程序的汇编文件,包括扩展的RAM和ROM,地址分别为0x8000、0x18000、0x28000,编写了完整的读写程序; 3、还有一部分就的串口通信程序,主要是完成和51单片机的通信,因51单片机控制着键盘、8个数码管和液晶显示,和其通信主要是为了控制输入输出。 4、修改蜂鸣器测试部分程序,当测试蜂鸣器时使其响5声,若不响查看JP14是否为弹起状态,在init.c文件中的sp()中修改; 5、修改存储器测试程序,使其读写次数改为32,在chkmem.asm中修改;

6、修改液晶显示程序,修改结果为:程序运行后按2进入第二屏,修改这一屏的显示,修改后为:1.存储器,2. 步进电机,3.直流电机,4.交通灯,5. 喇叭,按相应的键进入相应的程序中执行;

7、实现交通灯测试,使其符合生活中的十字路口交通灯;在init.c文件中的traffic_led()中修改,要巧妙运用Led_Traffic[18]、Led_Delay[18],两个数组,只要修改这两个数组的数据就能实现结果。

联系合同范文客服:xxxxx#qq.com(#替换为@)