基于8155的8LED显示语音播放机设计.doc_第1页
基于8155的8LED显示语音播放机设计.doc_第2页
基于8155的8LED显示语音播放机设计.doc_第3页
基于8155的8LED显示语音播放机设计.doc_第4页
基于8155的8LED显示语音播放机设计.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验名称:基于的显示语音播放机设计一、 实验要求1 将处理过的数据通过单片机进行存储(信号固化)。2 用D/A转换器回放存储的信号。3 通过模拟示波器显示回放的波形。4 在数码管或LCD上显示回放波形的参数(最大/最小幅值,波形播放时间)。基于8155口是指显示和键盘都由8155的IO口控制;实验中需要的信源,可以通过处理一段WAV文件,将其变为一段数据表进行实验。二、 实验原理存在单片机内的数据为8000Hz采样的样点值,用T0查询方式进行125us定时,每当定时器溢出则像DAC0832输出采样值则实现了8000Hz采样恢复波形;在将采样值送到DAC0832的同时进行幅值大小的比较得出最大最小幅值最后进行显示;用T1中断方式进行定时,每一秒一次中断可用以计时并输出;8155A、B口用作输出,A口做段选码输出,B口做位选输出,C口为输入方式,输入键控信号。三、 实验内容1. 信号固化通过打开文件读文件写文件的方式将wav文件写成汇编程序所需要的数据表形式,对应的转换C程序如下:#include #include #include int main() FILE *v_fpLog, *fp; int fSet = 0, fEnd = 0, i, j; int filelen = 0, num, last, r; char *pb, ch6, cnum11; if ( (v_fpLog = fopen( 3.wav , rb+) = NULL | (fp = fopen( Windows 错误.txt , w+a+) = NULL) printf( The file was not opened); return 0; else fseek( v_fpLog, 0, SEEK_SET ); fSet = ftell( v_fpLog ); fseek( v_fpLog, 0, SEEK_END ); fEnd = ftell( v_fpLog ); pb = (char *)malloc(fEnd - fSet ); fseek( v_fpLog, 0, SEEK_SET ); fread(pb, fEnd - fSet, 1, v_fpLog); fwrite(unsigned char boot_bin, 23, 1, fp); memset(cnum, 0, 11); itoa(fEnd-fSet, cnum, 10); fwrite(cnum, sizeof(cnum), 1, fp); fwrite( = , 6, 1, fp); fwrite(n, 2, 1, fp);/ num = (fEnd-fSet)/16; last = (fEnd-fSet)%16; for(i = 0; i num; i+) fwrite(DB , 3*sizeof(char), 1, fp);for(j = 0; j 15; j+) memset(ch, 0, 6); r = (int)pbj + 16 * i ; r = r & (0xFF); sprintf(ch, 00%02xH, r); r = fwrite(ch, sizeof(ch), 1, fp); printf(%s, ch);if(j = 14)j+;memset(ch, 0, 6); r = (int)pbj + 16 * i; r = r & (0xFF); sprintf(ch, 00%02xH, r); r = fwrite(ch, sizeof(ch), 1, fp); printf(%s, ch); fwrite(n, 2, 1, fp); / / fwrite( , 1, 1, fp); printf( ); fwrite(DB , 3*sizeof(char), 1, fp); for(i = 0; i last; i+) r = (int)pbi + 16 * num; r = r & (0xFF); sprintf(ch, 00%02xH, r); fwrite(ch, sizeof(ch), 1, fp); printf(%s, ch); fwrite(, 1, 1, fp); fwrite(;, 2, 1, fp); free(pb); fclose(v_fpLog); fclose(fp); return 0;2. D/A转换模块硬件图如图:DAC0832采用单缓冲方式,单缓冲方式就是使输入寄存器和DAC寄存器中的一个处于直通方式,而另一个处于受控的锁存方式。在实际应用中,如果只有一路模拟量输出,或虽是多路模拟量输出但并不要求输出同步的情况下,就可采用单缓冲方式。为使DAC寄存器处于直通方式,应使XEFR、WR2接地(数字地),使DAC寄存器处于直通状态;ILE接+5V,WR1、WR2相连,CS与XEFR相连。为使输入寄存器处于受控锁存方式,应把WR1接89C51的WR,ILE接高电平。此外还应把CS接高位地址线线或译码器输出(本实验中用P2.6作为片选),以便对输入寄存器进行选择,DAC0832地址为0BFFFH。3. 显示模块8155PA口为输出方式输出段选码,PB口为输出方式输出位选码,PC口为输入方式接受控制信号。P2.7为8155的片选码,命令状态寄存器地址7FF8H,A口地址7FF9H,B口地址7FFAH,C口地址7FFBH。SW1接高电平为开,低电平为关。重播键开始暂停开关时钟电路3.89C51连接模块复位电路晶振频率为12MHz(机器周期为1us),EA接高电平CPU先从内部ROM取指令,直到超出它的地址范围(0000H0FFFH)再从外部ROM取指令。4. 汇编程序设计程序框图: 开始 初始化 否 开始键是否按下? 开始计数 是DPTR=#TABLE取第一个样点值给DAC0832,R7(当前样点值),R3(最小值),R2(最大值),DPTR+1 否T1定时是否溢出? 暂停键是否按下? 是 是 置P1.0为0 否是否播放结束? 是 取样点值给DAC0832,R7,DPTR+1 否R7R2?R3=R7 否 否显示程序R2=R7 是 开始显示程序框图P1.0=1?继续键按下?是 是P1.0=1,到是否重播? 否 是显示最大最小值及当前时间到否T1中断程序框图:开始指针压栈,重装初值R6-1,R6=0? 否 是R6=20,输出时间值指针出栈,返回主程序汇编源程序:ORG 0000HAJMP MAINORG 001BHAJMP T1BREAKORG 30HMAIN:MOV TMOD,#11H;定时器0,1均工作于方式1 MOV TH0,#0FFH MOV TL0,#083H;定时器0初值,定时125us MOV TH1,#03CH MOV TL1,#0B0H;定时器1初值,定时50ms SETB EA;cpu开中断 CLR ET0;禁止T0中断 CLR ET1;禁止T1中断 ;8155初始化 MOV DPTR,#7FF8H MOV A,#03H MOVX DPTR,A;扫描播放按键有无按下SCAN:CLR TR1 CLR C MOV DPTR,#7FFBH MOVX A,DPTR MOV C,ACC.0 JC START AJMP SCANSTART:MOV R6,#20;计数20次则为1s MOV R5,#4;当前时间 MOV DPTR,#7FFAH MOV A,#0BFH MOVX DPTR,A MOV A,#66H MOV DPTR,#7FF9H MOVX DPTR,A CLR ET1;禁止T1中断 CLR TR1 MOV TH1,#03CH MOV TL1,#0B0H SETB ET1;允许T1中断 MOV DPTR,#TABLE;取第一个样点值 MOV A,#00H MOVC A,A+DPTR MOV R2,A;R2为最大值 MOV R3,A;R3为最小值 MOV R7,A;R7为当前样点值 INC DPTR MOV R1,DPH;保护数据指针值 MOV R0,DPL MOV DPTR,#0BFFFH;第一个样点值给D/A MOVX DPTR,A SETB TR0;启动定时 SETB TR1WAIT:JB TF0,STOP;125us输出一次采样值则采样频率8000Hz SJMP WAITSTOP:CLR C;判断是否有暂停键按下 MOV DPTR,#7FFBH MOVX A,DPTR MOV C,ACC.0 JC NEXT1 CLR P1.0;暂停标志 AJMP XSNEXT1:CLR TF0 MOV TH0,#0FFH;重装T0初值 MOV TL0,#083H MOV DPH,R1;取数据指针值 MOV DPL,R0 MOV A,#00H;取样点值 MOVC A,A+DPTR MOV R7,A INC DPTR MOV R1,DPH MOV R0,DPL CJNE A,#0FFH,NEND;判断歌曲是否播放结束 AJMP XSNEND:MOV DPTR,#0BFFFH MOVX DPTR,AFD: CLR C;比较出最大最小幅度 SUBB A,R3 JC NEXT2 CLR C MOV A,R7 SUBB A,R2 JC WAIT AJMP NEXT3NEXT2:MOV A,R7;AR2,A为最大值 MOV R2,A AJMP WAIT;显示程序,显示最大值、最小值、当前时间XS: CLR TR1 CLR C;判断是否要从暂停处继续播放 MOV C,P1.0 JC A1 MOV DPTR,#7FFBH;读取暂停键的值 MOVX A,DPTR MOV C,ACC.0 JC A2 AJMP A1A2: SETB P1.0;继续播放 SETB TR1 AJMP NEXT1A1: CLR C;判断是否重新播放 MOV DPTR,#7FFBH MOVX A,DPTR MOV C,ACC.1 JC NT AJMP MINNT: AJMP SCAN;重新播放;显示最大最小值以及当前时间MIN: MOV DPTR,#7FFAH MOV A,#0FEH;位选值 MOVX DPTR,A MOV DPTR,#TAB2;查低位值 MOV A,R3 MOVC A,A+DPTR MOV DPTR,#7FF9H MOVX DPTR,A ACALL DELAY MOV A,#0FDH;位选值 MOV DPTR,#7FFAH MOVX DPTR,A MOV DPTR,#TAB1;查高位值 MOV A,R3 MOVC A,A+DPTR MOV DPTR,#7FF9H MOVX DPTR,A ACALL DELAYMAX: MOV DPTR,#7FFAH MOV A,#0F7H;位选值 MOVX DPTR,A MOV DPTR,#TAB2;查低位值 MOV A,R2 MOVC A,A+DPTR MOV DPTR,#7FF9H MOVX DPTR,A ACALL DELAY MOV A,#0EFH;位选值 MOV DPTR,#7FFAH MOVX DPTR,A MOV DPTR,#TAB1;查高位值 MOV A,R2 MOVC A,A+DPTR MOV DPTR,#7FF9H MOVX DPTR,A ACALL DELAYTIME:MOV A,#0BFH;位选值 MOV DPTR,#7FFAH MOVX DPTR,A MOV A,R5;查时间值 MOV DPTR,#TABLE1 MOVC A,A+DPTR MOV DPTR,#7FF9H MOVX DPTR,A ACALL DELAY AJMP XSDELAY: MOV R4,#10;延时子程序 AA1: MOV R7,#250AA: DJNZ R7,AA DJNZ R4,AA1 RET;T1中断子程序,动态显示播放时间ORG 200HT1BREAK:PUSH DPH;保护指针值 PUSH DPL MOV TH1,#03CH MOV TL1,#0B0H;重装定时器1初值,定时50ms DJNZ R6,RETURN;不到20次返回 MOV R6,#20 DEC R5;时间值减一 MOV DPTR,#7FFAH MOV A,#0BFH MOVX DPTR,A MOV DPTR,#TABLE1 MOV A,R5 MOVC A,A+DPTR MOV DPTR,#7FF9H MOVX DPTR,ARETURN:POP DPL POP DPH RETITABLE1:DB 3FH,06H,5BH,4FH,66H,6DHTAB1:DB 0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH;1 DB 0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH;2 DB 0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH;3 DB 0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH;4 DB 0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,0BFH,86H;5 DB 86H,86H,86H,86H,86H,86H,86H,86H,86H,86H;6 DB 86H,86H,86H,86H,86H,86H,86H,86H,86H,86H;7 DB 86H,86H,86H,86H,86H,86H,86H,86H,86H,86H;8 DB 86H,86H,86H,86H,86H,86H,86H,86H,86H,86H;9 DB 86H,86H,86H,86H,86H,86H,86H,86H,86H,86H;10 DB 0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH;11 DB 0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH;12 DB 0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH;13 DB 0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH;14 DB 0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH,0DBH;15 DB 0DBH,0DBH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH;16 DB 0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH;17 DB 0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH;18 DB 0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH;19 DB 0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH,0CFH;20 DB 0CFH,0CFH,0CFH,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H;21 DB 0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H;22 DB 0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H;23 DB 0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H;24 DB 0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H,0E6H;25 DB 0E6H,0E6H,0E6H,0E6H,0EDH,0EDH,0EDHTAB2:DB 3FH,3FH,3FH,06H,06H,06H,06H,06H,5BH,5BH;1 DB 5BH,5BH,5BH,4FH,4FH,4FH,4FH,4FH,66H,66H;2 DB 66H,66H,66H,66H,6DH,6DH,6DH,6DH,6DH,7DH;3 DB 7DH,7DH,7DH,7DH,07H,07H,07H,07H,07H,7FH;4 DB 7FH,7FH,7FH,7FH,6FH,6FH,6FH,6FH,6FH,3FH;5 DB 3FH,3FH,3FH,3FH,06H,06H,06H,06H,06H,5BH;6 DB 5BH,5BH,5BH,5BH,4FH,4FH,4FH,4FH,4FH,4FH;7 DB 66H,66H,66H,66H,66H,6DH,6DH,6DH,6DH,6DH;8 DB 7DH,7DH,7DH,7DH,7DH,07H,07H,07H,07H,07H;9 DB 7FH,7FH,7FH,7FH,7FH,6FH,6FH,6FH,6FH,6FH;10 DB 3FH,3FH,3FH,3FH,3FH,06H,06H,06H,06H,06H;11 DB 06H,5BH,5BH,5BH,5BH,5BH,4FH,4FH,4FH,4FH;12 DB 4FH,66H,66H,66H,66H,66H,6DH,6DH,6DH,6DH;13 DB 6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论