当前位置:首页 > 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],两个数组,只要修改这两个数组的数据就能实现结果。
共分享92篇相关文档