kk++; } } }
char ConvertScanToChar(unsigned char cScanCode) {
unsigned int cReturn;
cReturn=0;
switch ( cScanCode ) {
case SCANCODE_0: cReturn=0; break; case SCANCODE_1: cReturn=1; break; case SCANCODE_2: cReturn=2; break; case SCANCODE_3: cReturn=3; break; case SCANCODE_4: cReturn=4; break; case SCANCODE_5: cReturn=5; break; case SCANCODE_6: cReturn=6; break; case SCANCODE_7: cReturn=7; break; case SCANCODE_8: cReturn=8; break; case SCANCODE_9: cReturn=9; break;
case SCANCODE_Enter: cReturn=0x11;break; default:cReturn=10;break; }
return cReturn; }
void interrupt xint2(void) // XINT2中断服务程序 {
LcdDelay(16);
nCount++; nCount%=256; // 中断计数 if ( nCount%2==1 ) {
nScanCode=port8001; nScanCode&=0x0ff;
cKey=ConvertScanToChar(nScanCode); if (( cKey==1)) {
state=1; display=1;
}
else if ( cKey==2 ) {
state=2; display=1; }
else if ( cKey==3 ) {
state=3; display=1; }
else if((cKey==0x11 )) {
state=0; display=1; } } }
void Delay(unsigned int nDelay) {
int ii,jj,kk=0;
for ( ii=0;ii for ( jj=0;jj<1000;jj++ ) { kk++; } } } void Display1(void) {// LcdCls(); /*DisplayDigital(0, 0, 0, DigitalArray, 0, 0);//I DisplayDigital(0, 0, 8, DigitalArray, 2, 0);//I DisplayDigital(0, 0, 16, DigitalArray, 4, 0);//R DisplayChineseChar(0, 0, 24, ChineseArray, 60, 0);//清空 DisplayChineseChar(0, 0, 32, ChineseArray, 0, 0);//滤 DisplayChineseChar(0, 0, 48, ChineseArray, 2, 0);//波 DisplayChineseChar(0, 0, 0, ChineseArray, 4, 1);//测 DisplayChineseChar(0, 0, 16, ChineseArray, 6, 1);//试 DisplayChineseChar(0, 0, 32, ChineseArray, 8, 1);//系 DisplayChineseChar(0, 0, 48, ChineseArray, 10, 1);//统 DisplayChineseChar(0, 2, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 2,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 2, 32, DigitalArray, 6, 0);//1 DisplayDigital(0, 2, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 2, 0, ChineseArray, 18, 1);//低 DisplayChineseChar(0, 2, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 2, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 2, 48, ChineseArray, 2, 1);//波 DisplayChineseChar(0, 4, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 4,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 4, 32, DigitalArray, 8, 0);//2 DisplayDigital(0, 4, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 4, 0, ChineseArray, 16, 1);//高 DisplayChineseChar(0, 4, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 4, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 4, 48, ChineseArray, 2, 1);//波*/ DisplayChineseChar(0, 6, 0, ChineseArray, 30, 0);//正 DisplayChineseChar(0, 6, 16, ChineseArray, 32, 0);//在 DisplayChineseChar(0, 6, 32, ChineseArray, 34, 0);//进 DisplayChineseChar(0, 6, 48, ChineseArray, 36, 0);//行 DisplayChineseChar(0, 6, 0, ChineseArray, 18, 1);//低 DisplayChineseChar(0, 6, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 6, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 6, 48, ChineseArray, 2, 1);//波 state=1; } void Display2(void) {//LcdCls(); DisplayChineseChar(0, 6, 0, ChineseArray, 30, 0);//正 DisplayChineseChar(0, 6, 16, ChineseArray, 32, 0);//在 DisplayChineseChar(0, 6, 32, ChineseArray, 34, 0);//进 DisplayChineseChar(0, 6, 48, ChineseArray, 36, 0);//行 DisplayChineseChar(0, 6, 0, ChineseArray, 16, 1);//高 DisplayChineseChar(0, 6, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 6, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 6, 48, ChineseArray, 2, 1);//波 state=2; } void Display3(void) { //LcdCls(); DisplayChineseChar(0, 0, 0, ChineseArray, 38, 0);//. DisplayChineseChar(0,0, 16, ChineseArray, 40, 0);//. DisplayChineseChar(0,0, 32, ChineseArray, 42, 0);//. DisplayChineseChar(0, 0, 48, ChineseArray, 84, 0);//清空 DisplayChineseChar(0, 0, 0, ChineseArray, 44, 1);//0 DisplayChineseChar(0, 0, 16, ChineseArray, 46, 1);//. DisplayChineseChar(0,0, 32, ChineseArray, 48, 1);//. DisplayChineseChar(0, 0, 48, ChineseArray, 84, 1);//清空 DisplayChineseChar(0, 2, 0, ChineseArray, 50, 0);// . DisplayChineseChar(0, 2, 16, ChineseArray, 52, 0);//. DisplayChineseChar(0, 2, 32, ChineseArray, 54, 0);//. DisplayChineseChar(0, 2, 48, ChineseArray, 84, 0);//清空 DisplayChineseChar(0, 2, 0, ChineseArray, 56, 1);//0 DisplayChineseChar(0, 2, 16, ChineseArray, 58, 1);//. DisplayChineseChar(0,2, 32, ChineseArray, 60, 1);//. DisplayChineseChar(0, 2, 48, ChineseArray, 84, 1);//清空 DisplayChineseChar(0, 4, 0, ChineseArray, 62, 0);//. DisplayChineseChar(0, 4, 16, ChineseArray, 84, 0);//清空 DisplayChineseChar(0, 4, 32, ChineseArray, 64, 0);//. DisplayChineseChar(0, 4, 48, ChineseArray, 84, 0);//清空 DisplayChineseChar(0, 4, 0, ChineseArray, 66, 1);//0 DisplayChineseChar(0, 4, 16, ChineseArray, 68, 1);//. DisplayChineseChar(0,4, 32, ChineseArray, 70, 1);//. DisplayChineseChar(0, 4, 48, ChineseArray, 84, 1);//清空 DisplayChineseChar(0, 6, 0, ChineseArray, 72, 0);// . DisplayChineseChar(0, 6, 16, ChineseArray, 74, 0);//.. DisplayChineseChar(0, 6, 32, ChineseArray, 76, 0);//.. DisplayChineseChar(0, 6, 48, ChineseArray, 84, 0);//清空 DisplayChineseChar(0, 6, 0, ChineseArray, 78, 1);//0 DisplayChineseChar(0, 6, 16, ChineseArray, 80, 1);//. DisplayChineseChar(0,6, 32, ChineseArray, 82, 1);//. DisplayChineseChar(0, 6, 48, ChineseArray, 84, 1);//清空 state=3; } void Display4(void) { DisplayChineseChar(0, 6, 0, ChineseArray, 60, 1);// DisplayChineseChar(0, DisplayEnterSystem(); } 清空 6, 48, ChineseArray, 60, 1);//清空 宁波理工学院 I I R滤波器设计 题 目 IIR滤波器综合设计 姓 名 学 号 专业班级 指导教师 学 院 完成日期 一、实验目的 1、熟悉CCS集成开发环境的基本操作及相关功能。 2、学会LCD模块的运用方法。 3、掌握字模提取软件。 4、掌握按键以及子模在DSP中读取及显示的方法。 5、在CCS集成环境中对输入信号进行滤波,并观察输入波形。 二、实验任务 在DSP实验箱上完成下列功能: 2?3?7??(1) 通过键盘控制:按键1:对输入信号x?n??sin(n??)?cos?n?进 585?8?行低通IIR滤波,采用窗函数滤波,参数:通带范围(0,0.6?),阻带最小衰减40dB。按键2:对输入信号x?n??2?3?7??sin(n??)?cos?n?进行5858??高通IIR滤波,采用窗函数滤波,参数:通带范围(0.5?,?),阻带最小衰减40dB。按回车键:退出。按键3:显示组员姓名及学号 (2) 在LCD上显示下列功能: 1、运行程序:显示选项菜单 2、按下按键1:显示正在进行低通滤波 3、按下按键2:显示正在进行高通滤波 4、按下按键3:显示组员姓名及学号 三、流程图 开始 调试 观察LCD屏幕 按下 1 键进 判断按下按键 行低通滤波 的键值 按下2键进行高通滤波 按下3键显示组员和学号 按下Enter键 按下Enter键 按下Enter键 四、巴特沃斯IIR滤波器 (1)滤波器的设计 IIR滤波器系统函数为: 结束 b0?b1z?1?b2z?2?...?bMz?MH(z)? ?1?2?N1?a1z?a2z?...?aNz因此:IIR滤波器主要参数是a,b参数提取。 常用IIR滤波器有巴特沃思IIR滤波器及切比雪夫等滤波器等。本实验主要设计巴特沃思IIR滤波器。 MATLAB中提取巴特沃思IIR滤波器参数的指令如图1所示。 图一、MATLAB指令输入 在MATLAB左上角找到H数组,打开,可以得到IIR低通滤波器的模型数组 fH1[N]={ 1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000,0.9999,0.9996,0.9990,0.9972,0.9924,0.9801,0.9493, 0.8785,0.7425,0.5496,0.3569 , 0.2107,0.1161,0.0601,0.0290,0.0127, 0.0049,0.0015,0.0004,0.0000 ,0.0000}; 在CCS上信号通过IIR巴特沃斯低通滤波器后,信号变成如下图所示fOut的图形,f In为输入波形的频域表示图。 图三、滤波器,信号,通过滤波器的信号 同样的方法可以得到IIR巴特沃斯高通滤波器的模型以及信号通过IIR巴特沃斯高通滤波器后的信号。 图四、高通滤波器以及输出信号 五、字模提取模块 2、提取字模 ……………. /*-- 数字: 0 --*/ {0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//56 {0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00}, 六、LCD显示模块 1、LCD上显示设置,用自己的姓名做例子说明: DisplayChineseChar(0, 2, 0, ChineseArray, 50, 0);// { port8004=0; LcdDelay(LCDDELAY); port8002=0; LcdDelay(LCDDELAY); } } } void TurnLcdOff() { port8001 = LCDCMDTURNOFF; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } void TurnLcdOn() { port8001 = LCDCMDTURNON;//设置打开LCD命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(1024);//延迟,等待打开LCD port8001 = LCDCMDSTARTLINE;//设置起始行命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDPAGE;//设置当前操作页 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDSTARTCOLUMN;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 } void DisplayChineseChar(int nStartLine, int nPage, int nStartColumn, unsigned char Array[][16], int nCharIndex, int nBufferIndex) { int i; port8001 = LCDCMDSTARTLINE + nStartLine; LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDPAGE + nPage;//设置当前操作页 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 //左上角 for (i = 0; i < 16; i ++) { if (nBufferIndex == 0) { port8003 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } else { port8004 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } } port8001 = LCDCMDPAGE + nPage + 1;//设置起始行命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 for (i = 0; i < 16; i ++) { if (nBufferIndex == 0) { port8003 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } else { port8004 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } } } void DisplayEnterSystem() { DisplayDigital(0, 0, 0, DigitalArray, 0, 0);//I DisplayDigital(0, 0, 8, DigitalArray, 2, 0);//I DisplayDigital(0, 0, 16, DigitalArray, 4, 0);//R DisplayChineseChar(0, 0, 32, ChineseArray, 0, 0);//滤 DisplayChineseChar(0, 0, 48, ChineseArray, 2, 0);//波 DisplayChineseChar(0, 0, 0, ChineseArray, 4, 1);//测 DisplayChineseChar(0, 0, 16, ChineseArray, 6, 1);//试 DisplayChineseChar(0, 0, 32, ChineseArray, 8, 1);//系 DisplayChineseChar(0, 0, 48, ChineseArray, 10, 1);//统 DisplayChineseChar(0, 2, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 2,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 2, 32, DigitalArray, 6, 0);//1 DisplayDigital(0, 2, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 2, 0, ChineseArray, 18, 1);//低 DisplayChineseChar(0, 2, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 2, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 2, 48, ChineseArray, 2, 1);//波 DisplayChineseChar(0, 4, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 4,16, ChineseArray, 14, 0);//键 DisplayDigital(0, 4, 32, DigitalArray, 8, 0);//2 DisplayDigital(0, 4, 40, DigitalArray, 10, 0);//: DisplayChineseChar(0, 4, 0, ChineseArray, 16, 1);//高 DisplayChineseChar(0, 4, 16, ChineseArray, 20, 1);//通 DisplayChineseChar(0, 4, 32, ChineseArray, 0, 1);//滤 DisplayChineseChar(0, 4, 48, ChineseArray, 2, 1);//波 DisplayChineseChar(0, 6, 0, ChineseArray, 12, 0);//按 DisplayChineseChar(0, 6, 16, ChineseArray, 22, 0);//回 DisplayChineseChar(0, 6, 32, ChineseArray, 24, 0);//车 DisplayChineseChar(0, 6, 48, ChineseArray, 14, 0);//键 DisplayChineseChar(0, 6, 16, ChineseArray, 26, 1);//退 DisplayChineseChar(0, 6, 32, ChineseArray, 28, 1);//出 } void DisplayDigital(int nStartLine, int nPage, int nStartColumn, unsigned char Array[][8], int nCharIndex, int nBufferIndex) { int i; port8001 = LCDCMDSTARTLINE + nStartLine; LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDPAGE + nPage;//设置当前操作页 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 //左上角 for (i = 0; i < 8; i ++) { if (nBufferIndex == 0) { port8003 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } else { port8004 = Array[nCharIndex][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } } port8001 = LCDCMDPAGE + nPage + 1;//设置起始行命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 port8001 = LCDCMDSTARTCOLUMN + nStartColumn;//设置起始列命令字 LcdDelay(LCDDELAY);//延迟 port8002 = 0;//完成命令字 LcdDelay(LCDDELAY);//延迟 for (i = 0; i < 8; i ++) { if (nBufferIndex == 0) { port8003 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } else { port8004 = Array[nCharIndex + 1][i]; LcdDelay(LCDDELAY); port8002 = 0; LcdDelay(LCDDELAY); } } } void LcdDelay(unsigned int nDelay) { int ii,jj,kk=0; for ( ii=0;ii for ( jj=0;jj 0.8785,0.7425,0.5496,0.3569 , 0.2107,0.1161,0.0601,0.0290,0.0127, 0.0049,0.0015,0.0004,0.0000 ,0.0000}; float fA1[IIRNUMBER]={1.0000,0.9853,0.9738,0.3864,0.1112,0.0113}; float fB1[IIRNUMBER]={0.1084,0.5419,1.0837,1.0837,0.5419,0.1084}; fH2[N]={ 0,0.0000,0.0000,0.0001,0.0003,0.0010,0.0026,0.0059,0.0122,0.0237,0.0436,0.0771, 0.1320,0.2189,0.3489,0.5218,0.7071,0.8531,0.9372,0.9757,0.9912,0.9970,0.9990,0.9997, 0.9999,1.0000 ,1.0000,1.0000,1.0000,1.0000,1.0000,1.0000}; float fA2[IIRNUMBER]={1.0000,-0.0000,0.6334,-0.0000,0.0557,-0.0000}; float fB2[IIRNUMBER]={0.0528,-0.2639,0.5279,-0.5279,0.2639,-0.0528}; float fXn[IIRNUMBER]={ 0.0 }; float fYn[IIRNUMBER]={ 0.0 }; float fInput,fOutput; float fSignal1,fSignal2; float fStepSignal1,fStepSignal2; float f2PI; int i; float fIn[256],fOut[256],fAn[6],fBn[6]; int nIn,nOut,display=0; char ConvertScanToChar(unsigned char cScanCode); //16*8 digital array unsigned char DigitalArray[14][8]= { {0x00,0x00,0x08,0xF8,0xF8,0x08,0x08,0x00},{0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,0x00}, //I {0x00,0x00,0x08,0xF8,0xF8,0x08,0x08,0x00},{0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,0x00}, //I {0x00,0xF8,0xF8,0x08,0x08,0x88,0xF8,0x60},{0x20,0x3F,0x3F,0x21,0x03,0x1F,0x38,0x20}, //R {0x00,0x00,0x10,0xF0,0xF8,0x00,0x00,0x00},{0x00,0x00,0x20,0x3F,0x3F,0x20,0x20,0x00}, //1 {0x00,0x70,0x78,0x08,0x08,0xD8,0xF0,0x20},{0x00,0x30,0x38,0x34,0x33,0x31,0x38,0x08},//2 {0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80},{0x00,0x00,0x00,0x00,0x31,0x7B,0x7B,0x31},//: {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} //清空 }; //16*16 Chinese character Array unsigned char ChineseArray[86][16]= { {0x20,0xC2,0x0C,0x40,0xF8,0x48,0x48,0x48,0xFF,0x2A,0x2A,0x2B,0x8A,0x28,0x18,0x00}, {0x04,0xFC,0x82,0x61,0x1F,0x10,0x08,0x3C,0x40,0x45,0x59,0x41,0x71,0x08,0x30,0x00}, //滤 {0x20,0x42,0x04,0x0C,0x80,0xF8,0x88,0x88,0x88,0xFF,0x88,0x88,0xA8,0x18,0x00,0x00}, {0x04,0x04,0xFE,0x41,0x30,0x8F,0x40,0x22,0x14,0x08,0x14,0x22,0x41,0xC0,0x40,0x00},//波 {0x10,0x22,0x6C,0x00,0x80,0xFC,0x04,0xF4,0x04,0xFE,0x04,0xF8,0x00,0xFE,0x00,0x00}, {0x04,0x04,0xFE,0x01,0x40,0x27,0x10,0x0F,0x10,0x67,0x00,0x47,0x80,0x7F,0x00,0x00},//测 {0x40,0x42,0xCC,0x00,0x10,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x14,0x10,0x00}, {0x00,0x00,0x7F,0x20,0x10,0x20,0x60,0x3F,0x10,0x10,0x01,0x3E,0x40,0x80,0x70,0x00},//试 {0x00,0x02,0x22,0x22,0x32,0x2E,0xA2,0x62, 0x22,0x22,0x91,0x09,0x01,0x00,0x00,0x00}, {0x00,0x00,0x42,0x22,0x1A,0x43,0x82,0x7E,0x02,0x02,0x0A,0x13,0x66,0x00,0x00,0x00}, //系 {0x20,0x30,0xAC,0x63,0x30,0x88,0xC8,0xA8, 0x99,0x8E,0x88,0xA8,0xCC,0x88,0x00,0x00}, {0x22,0x67,0x22,0x12,0x92,0x40,0x30,0x0F, 0x00,0x00,0x3F,0x40,0x40,0x41,0x70,0x00}, //统 {0x10,0x10,0x90,0xFF,0x90,0xA0,0x98,0x88,0x88,0xE9,0x8A,0x88,0x88,0xA8,0x98,0x00}, {0x01,0x41,0x80,0x7F,0x00,0x00,0x80,0x84,0x4B,0x30,0x10,0x28,0x47,0xC0,0x00,0x00},//按 {0x10,0x28,0xE7,0x24,0x24,0xC2,0xB2,0x8E,0x10,0x54,0x54,0xFF,0x54,0x7C,0x10,0x00}, {0x01,0x01,0x7F,0x21,0x51,0x24,0x18,0x27,0x48,0x89,0x89,0xFF,0x89,0xCD,0x48,0x00},//键 {0x04,0x04,0x04,0xF4,0x94,0x94,0x95,0x96,0x94,0x94,0x94,0xF4,0x04,0x06,0x04,0x00},//高 {0x00,0xFE,0x02,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x82,0xFF,0x02,0x00}, {0x40,0x20,0xF8,0x07,0x00,0xFC,0x84,0x84,0x84,0xFC,0x82,0x82,0x83,0xC2,0x80,0x00}, {0x00,0x00,0xFF,0x00,0x00,0x7F,0x20,0x10,0x08,0x20,0x47,0x18,0x60,0x80,0x70,0x00}, //低 {0x40,0x42,0x44,0xCC,0x00,0x00,0xF1,0x91,0x95,0xF9,0x95,0x93,0xF9,0x10,0x00,0x00}, {0x00,0x40,0x20,0x1F,0x20,0x40,0xBF,0x84,0x84,0xBF,0x94,0xA4,0x9F,0xC0,0x40,0x00},//通 {0x00,0xFC,0x04,0x04,0x04,0xE4,0x24,0x24,0x24,0xF4,0x24,0x04,0x04,0xFE,0x04,0x00}, {0x00,0x7F,0x20,0x20,0x20,0x2F,0x24,0x24,0x24,0x2F,0x20,0x20,0x20,0x7F,0x00,0x00}, //回 {0x00,0x04,0xC4,0xA4,0x94,0x8C,0x87,0xF4,0x84,0x84,0xC4,0x84,0x06,0x04,0x00,0x00}, {0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00},//车 {0x40,0x42,0x44,0xCC,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x40,0x00,0x00}, {0x00,0x40,0x20,0x1F,0x20,0x40,0x9F,0x88,0x85,0x81,0x82,0x85,0x88,0xD8,0x40,0x00},//退 {0x00,0x00,0xFC,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00}, {0x00,0xFE,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0xFE,0x00,0x00},//出 {0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00}, {0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00},//正 {0x08,0x08,0x08,0x08,0xC8,0x38,0x0F,0x08,0x08,0xE8,0x08,0x88,0x08,0x0C,0x08,0x00}, {0x08,0x04,0x02,0xFF,0x00,0x40,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x60,0x40,0x00},//在 {0x40,0x42,0xCC,0x00,0x08,0x08,0xFF,0x08,0x08,0x08,0xFF,0x08,0x8C,0x08,0x00,0x00}, {0x40,0x20,0x1F,0x20,0x41,0x51,0x4F,0x41,0x41,0x41,0x7F,0x41,0x41,0x61,0x20,0x00},//进 {0x00,0x10,0x88,0xC4,0x23,0x40,0x42,0x42,0x42,0x42,0x42,0xC2,0x43,0x62,0x40,0x00}, {0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00},//行 {0x00,0x02,0x82,0x82,0xF2,0x4A,0x26,0x80,0x60,0x00,0xFF,0x20,0x40,0x80,0x00,0x00},///38 …………………….. {0x40,0x44,0x44,0x44,0xC4,0xFE,0x42,0x63,0x42,0x00,0xF8,0x00,0x00,0xFF,0x00,0x00},//40 ………………….. {0x10,0x10,0xD0,0xFF,0x50,0x90,0x08,0x88,0x78,0x0F,0xC8,0x08,0x0C,0x88,0x00,0x00},//42 …………………….. /*-- 文字: 0 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//44 {0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00}, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x30,0x30,0x38,0x08,0x88,0x88,0x88,0x88,0xD8,0xF8,0x70,0x20,0x00,0x00},//46 {0x00,0x00,0x18,0x18,0x38,0x20,0x21,0x21,0x21,0x21,0x21,0x3B,0x1E,0x1E,0x04,0x00}, /*-- 文字: 2 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x20,0x70,0x78,0x08,0x08,0x08,0x08,0x08,0x88,0xF8,0xF8,0x70,0x00,0x00},//48 {0x00,0x00,0x30,0x30,0x38,0x3C,0x34,0x36,0x32,0x33,0x31,0x31,0x30,0x38,0x08,0x00}, {0x80,0x84,0x44,0x44,0x24,0x14,0x04,0xFF,0x04,0x14,0x24,0x24,0x46,0xC4,0x40,0x00},//.//50 ………………….. …………………….//52 {0x80,0x80,0x40,0x40,0x20,0x11,0x0A,0x04,0x0A,0x11,0x10,0x20,0x40,0xC 0,0x40,0x00}, ……………………………. {0x20,0x10,0x0D,0x02,0x05,0x18,0x40,0x7F,0x40,0x3F,0x22,0x07,0x38,0x40,0xE0,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//56 {0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x20,0x70,0x78,0x08,0x08,0x08,0x08,0x08,0x88,0xF8,0xF8,0x70,0x00,0x00},//58 {0x00,0x00,0x30,0x30,0x38,0x3C,0x34,0x36,0x32,0x33,0x31,0x31,0x30,0x38,0x08,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x00,0xF8,0xF8,0x88,0x88,0x88,0xC8,0xC8,0x88,0x88,0x88,0x08,0x00,0x00},//60 {0x00,0x00,0x18,0x1D,0x39,0x20,0x20,0x20,0x20,0x20,0x20,0x3B,0x1F,0x0F,0x06,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ …………………… /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ ………………… /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE 0,0xC0,0x00},//66 {0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x30,0x30,0x38,0x08,0x88,0x88,0x88,0x88,0xD8,0xF8,0x70,0x20,0x00,0x00},//68 {0x00,0x00,0x18,0x18,0x38,0x20,0x21,0x21,0x21,0x21,0x21,0x3B,0x1E,0x1E,0x04,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x70,0xF0,0xD8,0xC8,0x88,0x88,0x88,0x88,0x88,0x88,0xF8,0x70,0x20,0x00},//70 {0x00,0x08,0x1E,0x1E,0x33,0x21,0x21,0x21,0x21,0x21,0x23,0x23,0x1E,0x1E,0x0C,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ {0x00,0x80,0xC0,0xBC,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0xC0,0x80,0x00},//72 . /*-- 文字:.--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ {0x10,0x10,0xD0,0xFF,0x90,0x10,0xFC,0x84,0x84,0x84,0xF4,0x82,0x83,0xC2,0x80,0x00},//74 {. /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ {0x04,0x84,0xE4,0x9C,0x86,0xC4,0x80,0xFC,0x84,0x84,0xF4,0x82,0x83,0xC2,0x80,0x00},//76 . /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0xE0,0xF0,0xF0,0x18,0x08,0x08,0x08,0x08,0x08,0x38,0xF0,0xE0,0xC0,0x00},//78 {0x00,0x01,0x0F,0x1F,0x1F,0x30,0x20,0x20,0x20,0x20,0x20,0x38,0x1F,0x0F,0x07,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x20,0x70,0x78,0x08,0x08,0x08,0x08,0x08,0x88,0xF8,0xF8,0x70,0x00,0x00},//80 {0x00,0x00,0x30,0x30,0x38,0x3C,0x34,0x36,0x32,0x33,0x31,0x31,0x30,0x38,0x08,0x00}, /*-- 文字: . --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ {0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x60,0x30,0xF0,0xF8,0xF8,0x00,0x00,0x00,0x00},//82 {0x00,0x00,0x06,0x07,0x05,0x04,0x24,0x24,0x24,0x3F,0x3F,0x3F,0x24,0x24,0x24,0x00}, {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, //84 {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} //清空 }; unsigned int uWork; int nCount,nCursorCount; unsigned int nScanCode,nKeyCode,state; unsigned int cKey,tKey; main() { nIn=0; nOut=0; fInput=fOutput=0; f2PI=2*PI; fSignal1=PI*0.6; fSignal2=0.0; fStepSignal1=2*PI/16; fStepSignal2=7*PI/8; state=4; tKey=0; cKey=tKey; REGISTERCLKMD=0; CTRGR=0; // 初始化ICETEK-CTR CTRGR=0x80; CTRGR=0; CTRLR=0; // 关闭东西方向的交通灯 CTRLR=0x40; // 关闭南北方向的交通灯 TurnLcdOn(); // 打开显示 LcdCls(); // 清除显示内存 CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行 CTRLCDCR=0; tKey=port8002; // 清键盘缓冲区 //REGISTERCLKMD=0x1007; // 设DSP主频改为两倍PLL时钟=32MHz asm(\ssbx INTM\// 关中断,进行关键设置时不许打扰 port3004=0; // 使能XINT2 uWork=PMST; // 设置PMST寄存器 PMST =uWork&0xff; // 中断向量表起始地址=80H IMR = 4; // 使能XINT2 IFR = 4; // 清中断标志位 asm(\rsbx INTM\// 开中断 DisplayEnterSystem(); for (;;) { switch(state) { case 0: if(display){ display=0; LcdCls(); } break; case 1: if(display){ display=0; Display1(); } fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256; fOutput=IIR(fH1,fA1,fB1); fOut[nOut]=fOutput; nOut++; /* break point */ if ( nOut>=256 ) { nOut=0; } break; case 2: if(display){ display=0; Display2(); } fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256; fOutput=IIR(fH2,fA2,fB2); fOut[nOut]=fOutput; nOut++; nOut%=256; /* break point */ break; case 3: if(display){ display=0; Display3(); } break; default:break; } } } float InputWave() { for ( i=IIRNUMBER-1;i>0;i-- ) { fXn[i]=fXn[i-1]; fYn[i]=fYn[i-1]; //输出也参加移位 } fXn[0]=2*sin((double)fSignal1)/5+cos((double)fSignal2); fYn[0]=0.0; fSignal1+=fStepSignal1; if ( fSignal1>=f2PI ) fSignal1-=f2PI; fSignal2+=fStepSignal2; if ( fSignal2>=f2PI ) fSignal2-=f2PI; return(fXn[0]); } float IIR(float fHn[],float fAn[],float fBn[]) { float fSum; fSum=0; for(i=0;i fSum+=(fXn[i]*fBn[i]); fSum+=(fYn[i]*fAn[i]); } return(fSum); } void LcdCls() { int i,j; port8001=LCDCMDSTARTLINE; LcdDelay(LCDDELAY); port8002=0; LcdDelay(LCDDELAY); for ( i=0;i<8;i++ ) { port8001=LCDCMDPAGE+i; LcdDelay(LCDDELAY); port8002=0; LcdDelay(LCDDELAY); port8001=LCDCMDSTARTCOLUMN; LcdDelay(LCDDELAY); port8002=0; LcdDelay(LCDDELAY); for ( j=0;j<64;j++ ) { port8003=0; LcdDelay(LCDDELAY); port8002=0; LcdDelay(LCDDELAY); } port8001=LCDCMDPAGE+i; LcdDelay(LCDDELAY); port8002=0; LcdDelay(LCDDELAY); port8001=LCDCMDSTARTCOLUMN; LcdDelay(LCDDELAY); port8002=0; LcdDelay(LCDDELAY); for ( j=0;j<64;j++ )