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条)