版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章图形与发声系统的程序设计任课教师:陶雪丽7/23/20231本章内容提要显示方式视频显示存储器EGA/VGA图形程序设计通用发声程序乐曲程序7/23/20232河南师范大学计算机与信息技术学院10.1显示方式1显示分辨率2BIOS设置显示方式7/23/20233河南师范大学计算机与信息技术学院10.1.1显示分辨率7/23/20234河南师范大学计算机与信息技术学院10.1.2BIOS设置显示方式7/23/20235河南师范大学计算机与信息技术学院10.2视频显示存储器1图形存储器映像2数据到颜色的转换3直接视频显示7/23/20236河南师范大学计算机与信息技术学院10.2.1图形存储器影像7/23/20237河南师范大学计算机与信息技术学院10.2.2数据到颜色的转换7/23/20238河南师范大学计算机与信息技术学院10.2.3直接视频显示7/23/20239河南师范大学计算机与信息技术学院10.3EGA/VGA图形程序设计1读写像素2图形方式下的文本显示3彩色绘图程序4动画显示技术7/23/202310河南师范大学计算机与信息技术学院10.3.1读写像素7/23/202311河南师范大学计算机与信息技术学院10.3.2图形方式下的文本显示7/23/202312河南师范大学计算机与信息技术学院10.3.3彩色绘图程序7/23/202313河南师范大学计算机与信息技术学院10.3.4动画显示技术7/23/202314河南师范大学计算机与信息技术学院10.4通用发声程序1可编程时间间隔定时器2扬声器驱动方式3通用发声程序480X86PC的时间延迟7/23/202315河南师范大学计算机与信息技术学院主要内容可编程时间间隔定时器8253/54(programmableintervaltimer,PIT),能根据程序提供的计数值和工作模式,产生各种形状和各种频率的技术/定时脉冲,提供给系统的各个部件使用。例如,它可以产生不同频率的脉冲作为扬声器的声源。本节先介绍计算机发声的原理,然后在10.5节介绍乐曲的编程方法。7/23/202316河南师范大学计算机与信息技术学院10.4.1可编程时间间隔定时器8253/54在8253/54定时器内部有:3个独立工作的计数器:Counter0,Counter1,Counter2,每个计数器都分配一个端口地址,分别为40H、41H、42H。一个公用的控制寄存器,端口地址为43H。端口地址输入到8253/54的CS,A1,A0端,分别对3个计数器和控制器寻址。如图10.7所示的8253/54的编程结构。7/23/202317河南师范大学计算机与信息技术学院对8253/54编程首先设定控制字,以选择计数器,确定工作模式和计数值的格式。8253/54的三个计数器是分别编程的,在对任何一个计数器编程时,首先将控制字节写入控制寄存器。以选择计数器,确定输出什么样的脉冲波形。向选定的计数器送入一个8位或16位的计数初值,由于8253/54的数据总线是8位的,所以要用两条输出指令来写入初值。7/23/202318河南师范大学计算机与信息技术学院8253/54的控制器D0——选择计数值的格式。D3、D2、D1——选择操作模式。六种模式决定了输出脉冲的形状。D5、D4——读写指示位。
计数器锁存:锁定当前计数值,以便读出; 只读/写高字节(MSB); 只读/写低字节(LSB); 先读/写LSB,紧接着读/写MSB。D7、D6——选择计数器。确定控制字对那一个计数器进行初始化。7/23/202319河南师范大学计算机与信息技术学院
图10.88253/54的控制格式7/23/202320河南师范大学计算机与信息技术学院
8253/54的初始化程序例10.12计数器0 初始化程序段计数器1 初始化程序段计数器2 初始化程序段7/23/202321河南师范大学计算机与信息技术学院
10.4.2扬声器驱动方式PC机上大多数I/O都是由主板上的8255(或8255A)可编程外围接口芯片(PPI)管理的。PPI包括三个8位寄存器:
两个输入寄存器,端口地址分别是60H、62H;一个输出寄存器,端口地址为61H。由PPI输出寄存器中的,也就是61H端口的D0、D1位来控制扬声器的驱动方式。见图10.9扬声器驱动系统。7/23/202322河南师范大学计算机与信息技术学院
声音产生方式位触发方式:直接控制61H的PB1交替为1或为0,以产生一个脉冲电流,经过放大器后控制扬声器交替地接通与断开,从而推动扬声器的纸盆振动,发出不同音高和音长的声音。如例8.1。利用8253/54定时器来驱动扬声器。连接到扬声器上的是定时器2。
图10.9所示的,Couter2的GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使Counter2在模式3下工作。Couter2的OUT2与端口61H的PB1通过一个与门与扬声器的驱动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器。即PB1、PB0=11时,扬声器发声。7/23/202323河南师范大学计算机与信息技术学院
10.4.3通用发声程序BIOS中的BEEP子程序:
只能发出896Hz的声音;产生的音长只能是0.5s的倍数。编写通用发声程序应该:
能发出任意频率的声音,可由1193100÷给定频率=12348C÷给定频率计算出来。声音的持续时间更易于调整。利用CPU来产生延迟时间是最常用的一种方法。通用发声程序例10.137/23/202324河南师范大学计算机与信息技术学院
10.4.480X86PC的时间延迟IBM采用了一种利用硬件产生时间延迟的方法,这种方法产生的时间延迟与处理器无关。即通过61H端口的PB4,使PB4每15.08微秒触发一次,以产生一个固定不变的时间基准。在IBMPCATBIOS中的WAIT子程序,就是一个产生N×15.08微秒时间延迟的程序。调用WAIT子程序时,CX必须装入15.08微秒的倍数N。例10.14
修改后的GENSOUND7/23/202325河南师范大学计算机与信息技术学院10.5乐曲程序1音调与频率和时间的关系2演奏乐曲的程序3键盘控制发声程序7/23/202326河南师范大学计算机与信息技术学院
10.5.1音调与频率和时间的关系组成乐曲的每个音符的频率值和持续时间是乐曲程序发声所需要的两个数据。音符的频率可从图10.10中查到。实际送入计数器2的是输入频率1.1931MHz与音符频率相除的值,通用发声程序SOUNDF的前半部分就是完成这个计算,并将计数值送入计数器2的功能。音符的持续时间是根据乐曲的速度及每个音符的节拍数来确定的。7/23/202327河南师范大学计算机与信息技术学院
音符的持续时间在4/4(四四拍)中,四分音符为1拍,每小节4拍,全音符持续4拍,二分音符持续2拍,四分音符持续1拍,八分音符持续半拍等。如果全音符分配1s(100×10ms)的时间,则二分音符的持续时间为0.5s(50×10ms),四分音符的持续时间为0.25s(25×10ms),八分音符的持续时间为0.125s(12.5×10ms)。7/23/202328河南师范大学计算机与信息技术学院
10.5.2演奏乐曲的程序编写乐曲程序可分为四个步骤:为演奏乐曲定义一个频率表和一个节拍时间表。频率表可从图10.10中查到,节拍表中的数据是延迟时间10ms的倍数;分别将两个表的偏移地址放入SI和BP;从表中取出音符的频率放入DI,取出音符的持续时间(实际上是10ms的倍数)放入BX。乐曲的结束符可以用数据0FFFFH表示,也可以用0或其他特定值来代替。调用SOUNDF子程序发出音调。例10.15演奏乐曲程序MUSIC7/23/202329河南师范大学计算机与信息技术学院
10.5.3键盘控制发声程序音符和频率之间又一定的对应关系,如果计算机键盘上的某些键和音符、频率形成一种对应关系,则可通过键盘控制扬声器发出各种音符声音,这是就可用计算机键盘弹奏出简单的音乐了。例10.16是一个八度音程的钢琴程序。这里让数字键1~8对应一个音阶的八个音符。7/23/202330河南师范大学计算机与信息技术学院练习与作业P398习题练习:
10.11、10.13、10.17、10.18
7/23/202331河南师范大学计算机与信息技术学院图10.78253/54的编程结构每个计数器包含一个16位的、倒计数方式计数的计数寄存器,即从计数初值开始逐次减1,直到减为0为止。在IBMPC机中,8253/54的:CLK0~CLK2的输入频率都是1.1931817MHz;GATE0、GATE1接+5V;GATE2与8255(可编程外围接口芯片)的端口PB0相连。7/23/202332河南师范大学计算机与信息技术学院
例10.12-1;将计数器0设定为模式3,计数初值为4282(BCD) MOV AL,00110111B OUT 43H,AL MOV AX,4282 OUT 40H,AL MOV AL,AH OUT 40H,AL7/23/202333河南师范大学计算机与信息技术学院
例10.12-2;将计数器2设定为模式3,计数初值为65536 MOV AL,10110110B OUT 43H,AL SUB AL,AL OUT 42H,AL OUT 42H,AL7/23/202334河南师范大学计算机与信息技术学院
计时器0的初始化程序-1计数器0作为定时器为系统时钟提供计时基准。计数器0的OUT端与中断控制器8259A的中断请求端IRQ0相连,为IRQ0提供18.2次/秒的中断信号,即OUT0的输出频率应当是18.2Hz,这正是CLK0的输入频率1.1931817MHz与216相除的结果。计数器0选择Mode3;读/写LSB、MSB。则控制字应为:00110110B=36H在IBMPCBIOS中,计数器0的初始化程序如下:7/23/202335河南师范大学计算机与信息技术学院
计时器0的初始化程序-2 22 TIMER EQU 40H … … … … … … … … E277 B036 695 MOV AL,36H E279 E643 696 OUT TIMER+3,AL E27B B000 697 MOV AL,0;WRITELSBTOTIMER0REG E27D E640 698 OUT TIMER,AL … … … … … … … …;WRITEMSBTOTIMER0REG E284 E640 704 OUT TIMER,AL7/23/202336河南师范大学计算机与信息技术学院
计时器1的初始化程序-1计数器1作为定时器,其输出脉冲用作DRAM刷新的定时信号。在IBMPC中,刷新DRAM的任务由8237DMA来完成。DMA要求每隔15微秒刷新一次,这样,OUT1的输出频率应当是66.2KHz,因为CLK1的输入频率1.1931817MHz,所以计数初值应为18(1.1931817MHz/18=66.2KHz)。在Mode2下,OUT1连续输出周期为15微秒的定时信号,这个定时信号就作为DRAM的刷新请求信号。则控制字应为:01010100B=54H在IBMPCBIOS中,计数器1的初始化程序如下:7/23/202337河南师范大学计算机与信息技术学院
计数器1的初始化程序-2 MOV AL,54H OUT 43H,AL MOV AL,18 OUT 41H,AL7/23/202338河南师范大学计算机与信息技术学院
计数器2的初始化程序-1计数器2用来控制扬声器发声。在IBMPC中有个BEEP子程序,它在Mode3下,能产生频率为896Hz的声音,装入计数器2的计数初值为533H(1.19318MHz/896Hz=1331=533H),这样得到的控制字为10110110B=0B6H。即Counter2,LSB和MSB,Mode3,二进制格式。BIOS中计数器2的初始化程序如下:7/23/202339河南师范大学计算机与信息技术学院
计数器2的初始化程序-2 MOV AL,0B6H OUT 43H,AL MOV AL,33H OUT 42H,AL MOV AL,05 OUT 42H,AL7/23/202340河南师范大学计算机与信息技术学院
图10.9扬声器驱动系统7/23/202341河南师范大学计算机与信息技术学院
控制扬声器的代码 IN AL,61H MOV AH,AL OR AL,00000011B ;turnon OUT 61H,AL ;thespeaker;howlongthebeepsoundgoeshere …;gettheoriginalsettingofportB;turnoffthespeaker MOV AL,AH OUT 61H,AL对IBMPC及兼容机来所,80X86系列机,驱动扬声器的过程都是相同的。至于音调发出的时间量(音长),则取决于它延迟的时间,这个延迟时间可以在PC机的80x86主处理器的帮助下实现。7/23/202342河南师范大学计算机与信息技术学院
发声频率从10.4.1小节知道,给计数器2装入计数值533H能产生896Hz的声音(1.1931MHz/896Hz=533H),同样,产生其他频率声音的计数值也可以用这种方法计算出来。假定发声频率存放在DI寄存器中,下面的指令使AX中得到送往定时器2的计数值。 MOV DX,12H MOV AX,348CH DIV DI7/23/202343河南师范大学计算机与信息技术学院
产生延迟时间-1对8088/86、80286、386、486以及Pentium,它们产生的延迟时间都是不一样的。对基于8088/86的PC/XT,PS/2等PC机,可用下面的代码来产生时间延迟: MOV CX,N DELAY: LOOP DELAY在8088/86CPU中,执行一条LOOP指令需要17个时钟周期,因此执行上面的指令大约需要N×17×T时钟周期。若N=2800,系统频率为4.7MHz(时钟周期约为212ns),那么得到的延迟时间为10ms(2800×17×212ns)。7/23/202344河南师范大学计算机与信息技术学院
产生延迟时间-2;在BIOS中,利用上述方法来产生250ms延迟时间的程序如下: SUB CX,CXG7: LOOP G7 ;65535×212ns×17=236ms如果要产生与10ms成倍数的延迟时间,可在BX寄存器中放入倍数。例如,要产生1s的持续时间,可在BX中放入100,以控制LOOP执行100×2800次,也就是10ms的100倍。指令如下:
MOV BX,100 WAIT: MOV CX,2800 DELAY: LOOPDELAY DEC BX JNZ WAIT7/23/202345河南师范大学计算机与信息技术学院
例10.13-1这是一个任一频率(由DI指定)和任意持续时间(由CX和BX指定)的通用发声程序。它包括三个步骤:在8253/54中的43H端口送一个控制字0B6H(10110110B),该控制字对定时器2进行初始化,使定时器2准备接收计数初值。在8253/54中的42H端口(Timer2)装入一个16位的计数值(533H×896/频率),以建立将要产生的声音频率。把输出端口61H的0、1两位置1,发出声音。通用发声程序GENSOUND,如下:7/23/202346河南师范大学计算机与信息技术学院
例10.13-2public gensoundcseg segment para ‘code’ assume cs:cseg gesound proc far push ax push bx push cx push dx push di mov al,0b6h out 43h,al mov dx,12 mov ax,348ch 7/23/202347河南师范大学计算机与信息技术学院
例10.13-3 div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,al wait1: mov cx,2800 delay: loop delay dec bx jnz wait17/23/202348河南师范大学计算机与信息技术学院
例10.13-4 mov al,ah out 61h,al pop di pop dx pop cx pop bx pop ax ret gensound endp cseg ends end7/23/202349河南师范大学计算机与信息技术学院
GENSOUND程序产生的声音不仅与输入频率有关,而且与CPU有关。如果80x86的工作频率为8MHz,则T=125ns(1/8MHz=125ns),那么该程序产生的时间延迟就要短的多。在80286中,LOOP指令只需8个执行周期,这也会使延迟时间短的多。因此从PC/AT开始,对所有的80286/80386/80486/Pentium计算机,IBM都提供一种利用硬件产生时间延迟的方法,这种方法不仅与频率无关,也与CPU无关。10.4.4小节将介绍这种方法。7/23/202350河南师范大学计算机与信息技术学院
WAIT子程序;(CX)=Countof15.08μs WAITF PROC NEAR PUSH AX WAITF1: IN AL,61H AND AL,10H CMP AL,AH JE WAITF1 MOV AH,AL LOOP WAITF1 POP AX RET WAITF1 ENDP在80x86各种型号PC机中,61H端口既可作为输入寄存器,也可作为输出寄存器;但在8088/86中,该端口只能作输出寄存器用。7/23/202351河南师范大学计算机与信息技术学院
例10.14;调用WAITF子程序,产生1.5s的延迟时间。;因为1.5s的延迟时间需要设置计数值99436(1.5s/15.08μs=99346)而16位寄存器表示的最大数为65535,所以可以连续调用3次产生0.5s延迟的程序。 MOV BL,03BACK: MOV CX,33144 ;33144×15.08μs=o.5s CALL WAITF DEC BL JNZ BACK7/23/202352河南师范大学计算机与信息技术学院
修改后的GENSOUND;可用WAITF代替循环指令来产生延迟。计数值设为663(10ms/15.08μs=663.13)。 SOUNDF PROC FAR … ;sameasgensound WAIT1: MOV CX,663 CALL WAITF … … ;sameasgensound7/23/202353河南师范大学计算机与信息技术学院
图10.10两个音阶的琴键7/23/202354河南师范大学计算机与信息技术学院
SOUNDF前半部分;(DI)=thedesiredoutputfrequency MOV AL,0B6H ;启动定时器2 OUT 43H,AL MOV DX,12H ;设定计数值 MOV AX,384CH ;即确定发声频率 DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL …7/23/202355河南师范大学计算机与信息技术学院
例10.15-1 .modelsmall .stack 64kb .datamus_freq dw 330,294,262,294,3dup(330) ;bar1&2 dw 3dup(294),330,392,392 ;bar3&4 dw 330,294,262,294,4dup(330) ;bar5&6 dw 294,294,330,294,262,-1 ;bar7&8mus_time dw 6dup(25),50 ;bar1&2 dw 2dup(25,25,50) ;bar3&4 dw 12dup(25),100 ;bar5&6 .code extrn soundf:far7/23/202356河南师范大学计算机与信息技术学院
例10.15-2 .startup lea si,ds:mus_freq lea bp,ds:mus_time freq: mov di,[si] cmp di,-1 je end_mus mov bx,ds:[bp] call soundf add si,2 add bp,2 jmp freq end_mus: exit 0 end如果想演奏其他乐曲,只需把mus_freq和mus_time两个表中的数据换成另一个乐曲的频率和节拍时间即可。例如:《太湖船》的曲调。7/23/202357河南师范大学计算机与信息技术学院
《太湖船》的曲调mus_freq dw 330,392,330,294,330,392,330,294,330 dw 330,392,330,2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年黑龙江省伊春市初中历史七年级期末上册评估重点试卷(详细参考解析)
- PCR扩增技术专项考试题(含详细答案)
- 蜡染工安全操作规程
- 粉尘清扫作业安全操作规程
- PACS系统岗位实操考核试题(含详细答案解析)
- OPPO在线笔试题(含详细答案解析)
- 烟气制酸工安全操作规程
- 水泥窑预热器巡检工安全操作规程
- 2026年护理管理制度试题及答案
- 2026年涂装工理论考试题库附答案
- 二期工业固废填埋场及可利用工业废渣堆场堆存方式改造项目环境影响报告书
- 品检考核制度
- 围手术期患者心理护理的沟通技巧与情绪管理
- 专家论证幕墙安全专项施工方案
- 反渗透培训课件
- 世界毒品报告
- 右额颞叶脑出血护理查房
- JJF 2225-2025 高绝缘电阻测量仪(高阻计)校准规范
- 2025年湖北行测试题及答案
- 四川雅碧江两河口水电站引水发电系统工程施工测量技术方案
- 《商法(第七版)》课件全套 赵万一
评论
0/150
提交评论