天津大学自动化2010级微机原理创新型实验报告

天津大学自动化2010级微机原理创新型实验报告


2024年5月8日发(作者:联想打印机官网驱动下载地址)

微机原理设计报告

创新型实验设计报告

题 目 音乐播放器

学 院 自动化学院

专 业 自动化

成 员 叶林奇 3010203109

熊鹏辉 3010203104

王同宇 3010203073

指导教师 刘迎澍

简 介

本实验利用液晶屏、按键和喇叭,构成音乐播放器。共有8首歌

曲,分两页在液晶屏上显示,每页显示4首歌曲。在屏幕左端有一个

“*”号,星号所在行表示歌曲被选中。有两个按键,一个是选歌键,

一个是播放/暂停键。按下选歌键,星号上下移动,选择歌曲(第4

首后自动翻页)。按播放/暂停键播放选中歌曲,再次按下歌曲暂停,

再按下继续播放。

曲目表:

第一页 第二页

1、天大校歌 1、天仙配

2、青花瓷 2、鳟鱼

3、牧童短笛 3、友谊地久天长

4、最炫民族风 4、半屏山

目 录

1 成员分工………………………………………………………… 01

2 乐理基础………………………………………………………… 01

3 外部线路图……………………………………………………… 03

4 程序设计…………………………………………………………

4.1主程序………………………………………………………

4.2音符子程序…………………………………………………

4.3 LCD 显示程序 ……………………………………………

4.4光标子程序…………………………………………………

4.5歌曲编码……………………………………………………

5 实验心得…………………………………………………………

附录:实验源程序…………………………………………………

04

04

05

07

09

11

12

14

1. 成员分工

叶林奇:整体思路设计以及主程序、LCD程序、单音符播放程序设计

熊鹏辉:代码编写,线路连接

王同宇:按键处理与光标移动程序设计,程序测试

2. 乐理基础

优美的音乐令人陶醉,我们所听到的音乐都是由基本的音阶构成

的。所谓音阶,也就是具有特定频率关系的一组音调。比如大家都知

道的do、re、mi、fa、so、la、si,这7个音符就组成了一组音阶。

音乐家(也许是科学家)发现,人耳对于声波的频率是指数敏感的。

不妨以下图来说明:

人耳感觉到的音高

人耳感觉到的音高

ln

(

f )

声音频率

f

打比方说,100HZ、200HZ、300HZ、400HZ……这些声音,人

听起来并不觉得它们是“等距离”的,而是觉得越到后面,各个音之

间的“距离”越近。100HZ、200HZ、400HZ、800HZ……这些声音,

人听起来才觉得是“等距离”的(为什么会这样我也不清楚)。换句

1

话说,某一组声音,如果它们的频率是严格地按照×1、×2、×4、

×8……,即按2n的规律排列的话,它们听起来才是一个“等差音

高序列”。 ×2就意味着等距离,这是音乐中最基本的关系。用音乐

术语来说,×2就是一个“八度音程”。前面提到的do、re、mi中的do,

以及so、la、si后面的那个高音do,这两个do之间就是八度音程的

关系。也就是说,高音do的频率是do的两倍。同样的,re和高音

re之间也是八度音程的关系,高音re的频率是re的两倍。而高音

do上面的那个更高音的do,其频率就是do的4倍。也可以说,它

们之间隔了两个“八度音程”。在一个八度音程之间适当的选取某些频

率,便可构成自然音阶,也即 前面说过的do、re、mi、fa、so、la、

si。

现在的钢琴是按照“十二平均律”来设计的,也就是,把一个2

倍的关系按等比数列平分成12分,不难得出等比因子为2开12次

方,约为1.05946。这样一个八度之内就有十三个音a1,a2,……,a13,

后一个音的频率由前一个音乘以1.05946得到,这样的两个音称之为

半音程关系,相差两个半音则叫做一个全音。自然音阶是按“全全半

全全全半”的关系来选取的。就是说,do的频率确定后,re比do

高一个全音,mi比re高一个半音……也就是从等比数列

a1,a2,……,a12中依次抽取a1,a3,a5,a6,a8,a10,a12,a13构成do、

re、mi、fa、so、la、si、高音do。

音乐的基本元素:音符(音高+延时)

音乐可以分解成一个个的音符,简单地说,一个音符就是一定频

2

率的音延迟一定的时间。与频率差不多的是,时长也是按×2的关系

分配的。全音符减半得二分音符,二分音符减半四分音符,四分音符

减半得八分音符……。有了音符(例如我选择低音so、低音la、低

音si、do、re、mi、fa、so、la、si、高音do、高音re、高音mi,

以及休止符0,和5种时长:全音符到16分音符的组合),把它们按

照简谱上的顺序排列起来,就可以奏出我们想要的音乐了。

3. 外部线路图

PC0

PC1

0288H

CS

PC2

PB0

8255

PA0

PB7

PA1

PC4

0280H

CS

CLK0

1M

D/I

RW

E

D0

LCD

12864

D7

按键1

按键2

GATE0

8253

OUT0

喇叭

3

4. 程序设计

 4.1 主程序

开始

段地址初始化

8255、8253初始化

LCD初始化

显示歌曲

播放键按下?

NO

YES

等待按键松开

YES

NO

修改播放/暂停标志

选择键按下?

YES

等待按键松开

光标下移(或翻页)

暂停

播放/暂停标志?

播放

歌曲数组读取

YES

歌曲结束?

NO

播放下一音符

4

 4.2 音符子程序

通过8253定时器可以产生不同频率的方波信号,经过功率放大

和低通滤波后得到近似的正弦单频信号。8253工作在方式3分频模

式,通过设置8253的定时值即可在OUT0得到不同频率的方波输出

信号。GATE0是使能端,当其置1时OUT0才有输出,GATE0置1

的时间决定了音符的时长。

入口参数:音高、时长

计数值=10^6/频率 (CLK0输入时钟频率为10^6)

音符名

5

编码

‘a’

‘b’

‘c’

‘1’

‘2’

‘3’

‘4’

‘5’

‘6’

‘7’

‘u’

频率

196.0

220.0

246.9

261.6

293.7

329.6

349.2

392.0

440.0

493.9

523.3

计数值

5102

4545

4050

3823

3405

3034

2864

2551

2273

2025

1911

6

7

1

2

3

4

5

6

7

1

5

2

3

‘v’

‘w’

‘0’

587.3

659.3

0

1703

1517

休止符 0

时长

全音符

2分音符

4分音符

4分半音符

8分音符

8分半音符

16分音符

编码

‘1’

‘2’

‘4’

‘6’

‘8’

‘b’

‘h’

延时值

16T

8T

4T

4T+2T=6T

2T

2T+T=3T

T

6

音高

分支

休止符?

NO

设定计数值CNT0

YES

GATE0置1

音高

分支

设定延时值time

延时

GATE0置0

返回

 4.3 LCD显示程序

LCD最基本的两个操作是写命令和写数据,时序分别如下:

7

D/I

RW

E

DB

写命令时序

D/I

RW

E

DB

写数据时序

LCD字符串(或汉字)显示子程序:

判断AL值

写入AL对应行的地址

从数据地址读取数据

CX减一,数据地址加一

YES

CX>0?

NO

返回

8

 4.4 光标子程序

通过按键1,2 控制音乐播放和选择歌曲,在显示屏上有个光标,通

过光标指向播放的歌曲。把按键2次数存在AL 里,每按一次AL加

一。光标上下移动的原理就是通过不断的清除上一个图标以及显示下

一个图标来实现移动的。在屏幕上显示和清除光标子程序分别是:

开始

保护BX,AX

判断AL

ZF=1

ZF=0

开始

保护BX,AX

判断AL

ZF=1

ZF=0

在lcd上相应位置写光标

“*”

POP AX, BX

在lcd上相应位置写光标

“ ”,即空格。

POP AX, BX

结束

图标显示子程序

结束

图标清除子程序

9

开始

初始化

判断是否按键

清除该行

图标

AL加一

AL与9比较

ZF=0

ZF=1

令AL=1

下一行显

示图标

返回

光标移动子程序

10

 4.5 歌曲编码(以天大校歌为例)

歌曲简谱

歌曲编码:

'u6u85454344464543858u4544838244444344452u6u858

583868543838382464542838

11

838386874u47464544248382418c8142232

384854v4u474645454645474546474u4v4u4u4e'

‘u6’是第一个音符“

1

”的编码,代表高音do四分半音符,依次类推。

最后一个字符’e’代表歌曲结束。

5. 实验心得

 叶林奇:

本次创新型实验从选题、设计、编程、调试到最终完成,只花了

不到1天时间。之所以这么快,是因为之前用单片机编过一个类似的

程序。那个程序是用C语言写的,而且是用在单片机上。在我看来,

这是一次成功的代码移植。为了把C程序移植到8086上,需要给C

程序中的变量分配寄存器,如果变量比较多,还要利用堆栈。还有就

是C语言各种程序结构(如分支、循环嵌套等)的汇编实现。C程

序逻辑易懂,就像流程图一样直观。正是如此,才使我们事半功倍。

尽管如此,实验中还是遇到了很多的问题。例如在调试的时候发

现,每次在断点停下,都能正常播放出一个音符。但是一全速运行,

就发不出声音了。这让我们困惑了很久,最后才发现是音符的延时不

够长。像这种问题,之前是没法预料的。这也更加告诉我们,实验中

要时刻做好出错的心理准备,遇到问题认真分析,耐心调试,才能得

到满意的结果。

 熊鹏辉:

本次课程设计使我们更加深入的学习了关于微机原理的知识,使

12

我们对其认识不仅局限与书本上,还与各种芯片与程序有了很好的交

流。在实验中,我们遇到了很多问题,但是都一步一步慢慢的解决了。

最初我们想的只是能够放出音乐来就行,于是通过给予不同的频率来

让其发出不同的音节,后来我们看到了实验箱上的LCD显示屏,于

是想到联合起来做一个真正类似MP3播放器的作品,不仅能放音乐,

还能进一步的选择歌曲,中间还有暂停播放等操作。在让LCD显示

屏显示歌名的时候,我们以为只能直接给其赋予字母,但通过后面的

不断尝试与新的编程,成功的显示了汉字。LCD显示屏共有四行,

我们写了四首歌,每行首列用来选择歌曲,通过前面的“*”的跳动来选

择歌曲。信号跳到哪一行,相应的调用那一首歌的数据,于是放出该

首歌。在初期的编程中,很多时候程序都不能实现目标,我们就把程

序一块一块拿出来单个调试,有的时候甚至单步调试一步一步的找出

错误,从而加以改正,最后得到了我们现在的这个程序。在本次实验

中,我们对微机原理软硬件的操作更加熟悉,也培养了我们遇到问题

不骄不躁慢慢攻克的好习惯。总的来说,这次实验非常有意义,让我

们的实践能力得到了很大的提高。

 王同宇:

经过本次微机课题的设计与研究,我们深入的学习了除课本以外

的很多微机附件的内容,掌握了很多实验室操作技能。我们在实际设

计中遇到很多问题,但结合所学知识以及参考资料的帮助,不断地尝

试,设计了一种能够解决实际问题的系统。同时也加深了我们对于现

实生活中,实际的嵌入式操作系统的原理的理解。在这一过程中,我

13

们充分发挥我们的主观能动性,想象创造性,攻克了很多之前都没有

想过的难关,真的受益匪浅。而且让我明白了一个设计成型的过程不

是从一开始就完成的,而是在完成这项设计的过程中不断的提出新创

意,新思想,然后去实现,最后形成一个比最初设想的好的设计。例

如本设计中的选歌子程序就是在实验调试过程中提出来并实现的。

附:实验源程序

;********************************************************************

;名称:音乐播放器 作者:叶林奇 熊鹏辉 王同宇 创建日期:2013/3/2

;网络视频链接:/v_show/id_

;PA0:按键1(选择歌曲) PA1:按键2(播放/暂停)

;PC0:D/I PC1:RW PC2:E PC4:GATE0

;OUT0:喇叭

;CLK0:1M或2M(2M高一个8度音)

;********************************************************************

STACK1 SEGMENT

STA DW 128 DUP(0)

TOP EQU LENGTH STA

STACK1 ENDS

DATA SEGMENT

END_FLAG DB 0

PLAY_FLAG DB 0

CNT_LOW5 EQU 5102

CNT_LOW6 EQU 4545

CNT_LOW7 EQU 4050

CNT_1 EQU 3823

CNT_2 EQU 3405

CNT_3 EQU 3034

CNT_4 EQU 2864

CNT_5 EQU 2551

CNT_6 EQU 2273

CNT_7 EQU 2025

14

CNT_HIGH1 EQU 1911

CNT_HIGH2 EQU 1703

CNT_HIGH3 EQU 1517

T16 EQU 200

MUSIC3 DB

'380h2h3858283h5h3h2h18b8a8b818a404380h2h3858283h5h3h2h18b8a8b818a4086

h5hu8'

DB

'68583868580h3h5hu868583868580h3h5h6h5h3h2h3h5h6h5h3h2h180h2h2h3h2h1h

b818a404380h2'

DB

'h80h2h18382404uhvhuh6h5h6hu86858380h6h583828b814e';牧童短笛

MUSIC4 DB

'b4b8a8b4b8b8142818b21418a88243268686858383418b8b8b83822383

858382838'

DB

'2818b4a4b23838583838585868u8685462b4b8a8b414283h2h182832b8686858283h2

h18283218b8b81824'

DB

'a8a83858382812b81828382818a8a8b2b4b8a8b414283h2h182832b8686858283h2h1

8283218b8b81824a8'

DB

'a838583828140818b88586202680h6h6868680h5h3828280h2h380h5h

380h2h180hbhb4b8a8'

DB

'b4b818283h2h8285838281812bh1h2h3h2h1hbh1h6262u8uhuh686h6h

585h5h383h3h283h2h'

DB

'18bhahbhah1h2h3h5h6hvhu286268h2h2828182834080h3

h382h1hc81h2h3234'

DB

'5838u464646827262623858385834b80h6h14b83hbh180h1h281h2h32

34680h6h54280h2h32'

DB

15

'3h2h1hbhahahahah14b80hbh24a80haha4a80hah12b4180hbh380h3h280h3h6262626

2e';最炫民族风

MUSIC1 DB

'u6u85454344464543858u4544838244444344452u6u8585838685438

383824645428'

DB

'3814586818

74u474645442'

DB

'48382418c84v4u474645454645474546474u4v4u4u4e' ;天大校歌

MUSIC2 DB

'2818b81418b81418b818b8a4082818b81418b8408a8b83834382834382

838583838'

DB

'282824818b81418b81418b818b8a808a8b838545838545

83828181408'

DB

'2882418b8281818b814181811b4283858382208585838

2838a4283858'

DB

'2882822834

b42838583822'

DB

'a4283858288282408a8382828281101385

86204583822'

DB

'2812b4818b8241411b428

385838220858'

DB

'58382838a428385828828221828283458

383404585838'

DB

'2838b42838583822a4283858288282408a

16

83428282811e';青花瓷

MUSIC5 DB

'583828585h3h3h2hh2h14b42828c8b814bh1hbh1h2h3h182h1hb8a4585

h3h283h5h645'

DB 'h6h5h3h22583858u80h6h5h6h5h3h540868180h2h583828382h1hb8a2e';

天仙配

MUSIC6 DB

'58u8u8w8w8u45858580h5hvhuh7h6h540858u8u8w8w8u458u8786h7hu8485408587

878uh7h6h7hu45'

DB

'8u878787hwhvh7hu408u8686868u8u45858580h5hv878u408u87h6h686huh7hvhu45

858580h5hv878u404383'

DB

'8383878u468080838380h7hu404u8u8u8u8u8u8u8u4680h6hv4vh6h4h2h740858u80

huh780h7hw8680868v4v'

DB

'8v8w8u878v8u408u8686868u8u45858580h58v80h78u408u87h6h686huh7hvhu4585

8580h5hv80h7hu2e';鳟鱼

MUSIC7 DB

'a8180h1h1838280h1h2838180h1h3858640868580h3h3818280h1h2838180hbhb8a81

40868580h3h3818280h1'

DB 'h2868580h3h38586408u8580h3h3818280h1h2838180hbhb8a812e';友

谊地久天长

MUSIC8 DB

'38585458645858382h3h2h1h1218a4h5h3885h6h583828

0h3h382818ch1hb4585huh'

DB '6858383h5h2818182h3h2h1hb818a418342h3h5812e';半屏山

CON_8255 EQU 028BH

PA_8255 EQU 0288H

PB_8255 EQU 0289H

PC_8255 EQU 028AH

17

CON_8253 EQU 0283H

CNT0_8253 EQU 0280H

CNT1_8253 EQU 0281H

CNT2_8253 EQU 0282H

SELECT DB 1

DAT1 DB ' 天大校歌 '

DAT2 DB ' 青花瓷 '

DAT3 DB ' 牧童短笛 '

DAT4 DB ' 最炫民族风 '

DAT5 DB ' 天仙配 '

DAT6 DB ' 鳟鱼 '

DAT7 DB ' 友谊地久天长 '

DAT8 DB ' 半屏山 '

TEMP DB 16 DUP (0)

MES DB 'PRESS ANY KEY TO DOS',0DH,0AH,'$'

DATA ENDS

;*************************************************

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1

START:MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,STACK1

MOV SS,AX

MOV AX,TOP

MOV SP,AX

CLD

;*************************************************

MAIN:

MOV AL,90H ;PA入,PB、PC出

MOV DX,CON_8255

OUT DX,AL

;*************************************************

MOV AL,36H

MOV DX,CON_8253

18

OUT DX,AL ;8253初始化,CNT0方式3

;*************************************************

CALL LCD_INIT;LCD初始化

MOV DI,OFFSET DAT1

MOV AL,1

CALL SHOW_STRING

MOV DI,OFFSET DAT2

MOV AL,2

CALL SHOW_STRING

MOV DI,OFFSET DAT3

MOV AL,3

CALL SHOW_STRING

MOV DI,OFFSET DAT4

MOV AL,4

CALL SHOW_STRING

TUBIAO1:

MOV AL,1

CALL TUBIAO

LEA SI,MUSIC1

;*************************************************

A1:

MOV DX,PA_8255

IN AL,DX

TEST AL,01H;播放键是否按下

JZ A6;

A7:

MOV DX,PA_8255

IN AL,DX

TEST AL,01H

JNZ A7 ;等待按键松开

LEA DI,PLAY_FLAG

MOV AL,[DI]

19

XOR AL,1

MOV [DI],AL;

A6:

LEA DI,PLAY_FLAG

MOV AH,[DI]

LEA DI,END_FLAG

MOV AL,[DI]

CMP AX,0100H

JNE END1 ;标志位是0就不播放

A5:

MOV CH,[SI];音高

CMP CH,'e';判断是否结束

JE END1

INC SI

MOV CL,[SI];时长

INC SI

CALL NOTE

END1:

MOV DX,PA_8255

IN AL,DX

TEST AL,02H

JZ A1

A3:

MOV DX,PA_8255

IN AL,DX

TEST AL,02H

JNZ A3 ;等待按键松开

LEA DI,SELECT

20

MOV AL,[DI]

CALL CLEAR_TUBIAO

INC AL

CMP AL,1

JE MUSIC_1

CMP AL,2

JE MUSIC_2

CMP AL,3

JE MUSIC_3

CMP AL,4

JE MUSIC_4

CMP AL,5

JE MUSIC_5

CMP AL,6

JE MUSIC_6

CMP AL,7

JE MUSIC_7

CMP AL,8

JE MUSIC_8

MUSIC_1:

PUSH AX

MOV DI,OFFSET DAT1

MOV AL,1

CALL SHOW_STRING

MOV DI,OFFSET DAT2

MOV AL,2

CALL SHOW_STRING

MOV DI,OFFSET DAT3

MOV AL,3

CALL SHOW_STRING

MOV DI,OFFSET DAT4

MOV AL,4

CALL SHOW_STRING

POP AX

21

LEA SI,MUSIC1

JMP A4

MUSIC_2:

LEA SI,MUSIC2

JMP A4

MUSIC_3:

LEA SI,MUSIC3

JMP A4

MUSIC_4:

LEA SI,MUSIC4

JMP A4

MUSIC_5:

PUSH AX

MOV DI,OFFSET DAT5

MOV AL,1

CALL SHOW_STRING

MOV DI,OFFSET DAT6

MOV AL,2

CALL SHOW_STRING

MOV DI,OFFSET DAT7

MOV AL,3

CALL SHOW_STRING

MOV DI,OFFSET DAT8

MOV AL,4

CALL SHOW_STRING

POP AX

LEA SI,MUSIC5

JMP A4

MUSIC_6:

LEA SI,MUSIC6

JMP A4

MUSIC_7:

LEA SI,MUSIC7

JMP A4

22

MUSIC_8:

LEA SI,MUSIC8

JMP A4

A4:

CMP AL,9

JNE A2

MOV AL,1

A2:

LEA DI,SELECT

MOV [DI],AL

CALL TUBIAO

JMP A1

;*************************************************

MOV AH,4CH

INT 21H

;*************************************************

;写命令子程序

;入口参数:BL-要写入的命令

LCD_WR_CMD PROC NEAR

PUSH AX

PUSH DX

PUSH CX

MOV AL,0

MOV DX,PC_8255

OUT DX,AL

MOV CX,8000

CALL DELAY

MOV AL,BL

MOV DX,PB_8255

OUT DX,AL

MOV AL,4

23

MOV DX,PC_8255

OUT DX,AL

MOV CX,8000

CALL DELAY

MOV AL,0

MOV DX,PC_8255

OUT DX,AL

POP CX

POP DX

POP AX

RET

LCD_WR_CMD ENDP

;**********************************

;写数据子程序

;入口参数:BL-要写入的数据

LCD_WR_DAT PROC NEAR

PUSH AX

PUSH DX

PUSH CX

MOV AL,1

MOV DX,PC_8255

OUT DX,AL

MOV CX,8000

CALL DELAY

MOV AL,BL

MOV DX,PB_8255

OUT DX,AL

MOV AL,5

MOV DX,PC_8255

OUT DX,AL

24

MOV CX,8000

CALL DELAY

MOV AL,1

MOV DX,PC_8255

OUT DX,AL

POP CX

POP DX

POP AX

RET

LCD_WR_DAT ENDP

;**********************************

LCD_INIT PROC NEAR

PUSH BX

MOV BL,30H ; /*30---基本指令动作*/

CALL LCD_WR_CMD

MOV BL,01H ; /*清屏,地址指针指向00H*/

CALL LCD_WR_CMD

MOV BL,06H ; /*光标的移动方向*/

CALL LCD_WR_CMD

MOV BL,0CH ;/*开显示,关游标*/

CALL LCD_WR_CMD

POP BX

RET

LCD_INIT ENDP

;**********************************

;字符串显示子程序

;入口参数:DI字符串起始地址 AL行

SHOW_STRING PROC NEAR

PUSH BX

25

CMP AL,1

JE ROW1

CMP AL,2

JE ROW2

CMP AL,3

JE ROW3

CMP AL,4

JE ROW4

ROW1:

MOV AL,80H

JMP NEXT

ROW2:

MOV AL,90H

JMP NEXT

ROW3:

MOV AL,88H

JMP NEXT

ROW4:

MOV AL,98H

NEXT:

MOV BL,30H

CALL LCD_WR_CMD

MOV BL,AL

CALL LCD_WR_CMD

MOV CX,16

AGAIN:

MOV BL,[DI]

CALL LCD_WR_DAT

INC DI

LOOP AGAIN

POP BX

RET

SHOW_STRING ENDP

26

;**********************************

;图标显示子程序

;入口参数:AL行

TUBIAO PROC NEAR

PUSH BX

PUSH AX

CMP AL,1

JE TROW1

CMP AL,2

JE TROW2

CMP AL,3

JE TROW3

CMP AL,4

JE TROW4

CMP AL,5

JE TROW1

CMP AL,6

JE TROW2

CMP AL,7

JE TROW3

CMP AL,8

JE TROW4

TROW1:

MOV AL,80H

JMP TNEXT

TROW2:

MOV AL,90H

JMP TNEXT

TROW3:

MOV AL,88H

JMP TNEXT

TROW4:

MOV AL,98H

TNEXT:

MOV BL,30H

27

CALL LCD_WR_CMD

MOV BL,AL

CALL LCD_WR_CMD

MOV BL,'*'

CALL LCD_WR_DAT

POP AX

POP BX

RET

TUBIAO ENDP

;**********************************

;图标清除子程序

;入口参数:AL行

CLEAR_TUBIAO PROC NEAR

PUSH BX

PUSH AX

CMP AL,1

JE CROW1

CMP AL,2

JE CROW2

CMP AL,3

JE CROW3

CMP AL,4

JE CROW4

CMP AL,5

JE CROW1

CMP AL,6

JE CROW2

CMP AL,7

JE CROW3

CMP AL,8

JE CROW4

CROW1:

MOV AL,80H

JMP CNEXT

28

CROW2:

MOV AL,90H

JMP CNEXT

CROW3:

MOV AL,88H

JMP CNEXT

CROW4:

MOV AL,98H

CNEXT:

MOV BL,30H

CALL LCD_WR_CMD

MOV BL,AL

CALL LCD_WR_CMD

MOV BL,' '

CALL LCD_WR_DAT

POP AX

POP BX

RET

CLEAR_TUBIAO ENDP

;**********************************

;长延时子程序

;入口参数CX

LONG_DELAY PROC NEAR

B2:

MOV BX,50000

B1:

DEC BX

JNZ B1

LOOP B2

RET

LONG_DELAY ENDP

;**********************************

;延时子程序

29

;入口参数CX

DELAY PROC NEAR

LOOP $

RET

DELAY ENDP

;*************************************************

;子程序NOTE:音阶子程序

;入口参数:CH音高 CL时长

NOTE PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

;*************************************************

CMP CH,'0'

JE note_0

CMP CH,'a'

JE note_low5

CMP CH,'b'

JE note_low6

CMP CH,'c'

JE note_low7

CMP CH,'1'

JE note_1

CMP CH,'2'

JE note_2

CMP CH,'3'

JE note_3

CMP CH,'4'

JE note_4

CMP CH,'5'

JE note_5

CMP CH,'6'

JE note_6

CMP CH,'7'

30

JE note_7

CMP CH,'u'

JE note_high1

CMP CH,'v'

JE note_high2

CMP CH,'w'

JE note_high3

;*************************************************

note_0:

JMP time

note_low5:

MOV AX,CNT_LOW5

JMP CNT

note_low6:

MOV AX,CNT_LOW6

JMP CNT

note_low7:

MOV AX,CNT_LOW7

JMP CNT

note_1:

MOV AX,CNT_1

JMP CNT

note_2:

MOV AX,CNT_2

JMP CNT

note_3:

MOV AX,CNT_3

JMP CNT

note_4:

MOV AX,CNT_4

JMP CNT

note_5:

MOV AX,CNT_5

JMP CNT

note_6:

31

MOV AX,CNT_6

JMP CNT

note_7:

MOV AX,CNT_7

JMP CNT

note_high1:

MOV AX,CNT_HIGH1

JMP CNT

note_high2:

MOV AX,CNT_HIGH2

JMP CNT

note_high3:

MOV AX,CNT_HIGH3

;*************************************************

CNT:

MOV DX,CNT0_8253

OUT DX,AL

MOV AL,AH

OUT DX,AL;写计数值

;*************************************************

MOV DX,PC_8255

MOV AL,10H

OUT DX,AL;GATE0置1

;*************************************************

time: MOV AL,T16

CMP CL,'1'

JE t_1

CMP CL,'2'

JE t_2

CMP CL,'4'

JE t_4

CMP CL,'6'

JE t_s

CMP CL,'8'

JE t_8

32

CMP CL,'b'

JE t_b

CMP CL,'h'

JE t_h

;*************************************************

t_1:

MOV DL,16

JMP DELAY_MUSIC1

t_2:

MOV DL,8

JMP DELAY_MUSIC1

t_4:

MOV DL,4

JMP DELAY_MUSIC1

t_s:

MOV DL,6

JMP DELAY_MUSIC1

t_8:

MOV DL,2

JMP DELAY_MUSIC1

t_b:

MOV DL,3

JMP DELAY_MUSIC1

t_h:

MOV DL,1

;*************************************************

DELAY_MUSIC1:

MUL DL

CALL DELAY_MUSIC

MOV DX,PC_8255

MOV AL,00H

OUT DX,AL;GATE0置0

;*************************************************

POP DX

POP CX

33

POP BX

POP AX

RET

NOTE ENDP

;*************************************************

;延时子程序

;入口参数:AX

DELAY_MUSIC PROC NEAR

PUSH CX

PUSH BX

AGAIN1:

MOV CX,20000

LOOP $

DEC AX

JNZ AGAIN1

POP BX

POP CX

RET

DELAY_MUSIC ENDP

;*************************************************

CODE ENDS

END START

34


发布者:admin,转转请注明出处:http://www.yc00.com/num/1715121952a2569334.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信