微机原理设计 关于8279 AD0809的一段汇编程序,高手来看看

微机原理设计 关于8279 AD0809的一段汇编程序,高手来看看,第1张

Z8279 EQU212H

D8279 EQU210H

LEDMODEQU00左边输入,八位显示外部译码八位显示

LEDFEQEQU38H 扫描频率

CODE SEGMENT

ASSUME CS:CODE,DS:code

START:push cs

popds

calldelay

MOVDX,Z8279

MOVAL,LEDMOD

OUTDX,AL

MOVAL,LEDFEQ

OUTDX,AL

MOVCX,06H

XZ: MOVDX,D8279

MOVAL,00H

OUTDX,AL

LOOP XZ

MOVDX,D8279

MOVAL,5eH

OUTDX,AL

MOVDX,D8279

MOVAL,77H

OUTDX,AL以上为写(AD )

NOP

bg: movdx,208h

moval,0

outdx,al

calldelay

in al,dx

这里用ah保存输入的低4位值

movah,al

andah,0fh

=======================

movcl,04h

roral,cl

andal,0fh

查表,将键码放入AL中

push ax

mov dx,z8279

mov al,83h

out dx,al

pop ax

LEA BX,LED

XLAT

这里已经处理了al中的高4位,还需要处理ah中的低4位

XCHGah,al

XLAT

=======================

MOV DX,D8279 将AL中内容写到数码管上

OUT DX,AL

这里再将高4位显示在led上

OUT DX,AH

=======================

calldelay

jmp bg

LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H

DB 5EH,79H,71H

delay proc near

push cx

mov cx,0f00h

loop $

pop cx

ret

delay endp

CODE ENDS

END START

并不需要修改LED表,由于不是很清楚该LED芯片如何下配置,仅以你提供的代码来改写的话就是在我上面标注的那些地方插入那些代码应该就可以了

但是不排除需要修改控制码值的情况,但是那种情况我就没办法推测如何修改了。

查表程序设计实验

一、实验目的

学习查表程序的设计方法

二、实验内容及步骤

所谓查表,就是根据某个值,在数据表格中寻找与之对应的一一个数据,在很多情况下,通

过查表比通过计算要使程序更简单,更容易编制。

通过查表的方法实现十六进制数转换为ASCII码。根据2.2章节的表2.1可知,0~9的

ASCII码为30H~39H,而A~F的ASCII码为41H~46H,这样就可以将0~9与A~F对

应的ASCII码保存在-一个数据表格中。当给定一个需要转换的十六进制数时,就可以快速的在

表格中找出相应的ASCII码值。

实验步骤:

1.根据设计思想绘制程序流程图,编写实验程序(例程文件名为: A8-1 .ASM)。

2.经编译、链接无误后,将目标代码装入系统。

3.将变量HEX, ASCH, ASCL添加到变量监视窗口中,并修改HEX的值,如12。

4.在语句JMP AA1处设置断点,然后运行程序。

5.程序会在断点行停止运行,并更新变量窗口中变量的值,查看变量窗,ASCH应为31,

ASCL应为32。

6.反复修改HEX的值,观察ASCH与ASCL的值,验证程序功能。

程序代码:

ASSUME DS:DATA,CS:CODE

DATA SEGMENT

TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H

DB 38H,39H,40H,41H,42H,43H,44H,45H

HEX DB 08H

ASCLL DB 0

DATA ENDS

CODE SEGMENT

START:

MOV AX,DATA

MOV DS,AX

LEA SI,TABLE

MOV AL,HEX

MOV BX,SI

XLAT

MOV ASCLL,AL

CODE ENDS

END START

附录1:晶振为12M的音乐频率表

音符 频率(Hz) 简谱码(T值)

低1DO 262 63628 TH0=F7HTL0=24H

#1DO# 27763731 TH0=F8HTL0=F3H

低2RE 294 63835 TH0=F9HTL0=5BH

#2RE# 311 63928 TH0=F9HTL0=B8H

低3M 330 64021 TH0=FAHTL0=15H

低4FA 349 64103 TH0=FAHTL0=67H

#4FA# 370 64185 TH0=FAHTL0=B9H

低5SO 392 64260 TH0=FBHTL0=04H

#5SO# 415 64331 TH0=FBHTL0=4BH

低6LA 440 64400 TH0=FBHTL0=90H

#6 466 64463 TH0=FBHTL0=CFH

低7SI 494 64524 TH0=FCHTL0=0CH

中1DO 523 64580 TH0=FCHTL0=44H

#1DO# 55464633 TH0=FCHTL0=79H

中2RE 587 64684 TH0=FCHTL0=ACH

#2RE# 622 64732 TH0=FCHTL0=DCH

中3M 659 64777 TH0=FDHTL0=09H

中4FA 698 64820 TH0=FDHTL0=34H

#4FA# 740 64860 TH0=FDHTL0=5CH

中5SO 784 64898 TH0=FDHTL0=82H

#5SO# 831 64934 TH0=FDHTL0=A6H

中6LA 880 64968 TH0=FDHTL0=C8H

#6 932 64994 TH0=FDHTL0=E2H

中7SI 988 65030 TH0=FEHTL0=06H

高1DO 104665058 TH0=FEHTL0=22H

#1DO# 1109 65085 TH0=FEHTL0=3DH

高2RE 117565110 TH0=FEHTL0=56H

#2RE# 1245 65134 TH0=FEHTL0=6EH

高3M 1318 65157 TH0=FEHTL0=85H

高4FA 139765178 TH0=FEHTL0=9AH

#4FA# 1480 65198 TH0=FEHTL0=AEH

高5SO 156865217 TH0=FEHTL0=C1H

#5SO# 1661 65235 TH0=FEHTL0=D3H

高6LA 176065252 TH0=FEHTL0=E4H

#6 1865 65268 TH0=FEHTL0=F4H

高7SI 196765283 TH0=FFHTL0=03H

休止符用TH0=FFH ,TL0=FFH表示

附录2:LCD相关资料

两行液晶显示的地址:(均为十六位计数)

0 1 2 3 4 5 6 7 8 9 A B C D E F

40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F

命令格式要求,设置地址指针的时候第8位为1,后边为地址,即AC0~AC6,就是对应上表的地址。

附录3:实验程序:

RS BIT P2.0 定义液晶显示端口标号

RW BIT P2.1

E BIT P2.2

********************************************

T0TH EQU 24H T0两个暂存变量

T0TL EQU 23H

ORG 0000H

LJMP INITION

ORG 000BH

LJMP T0INT

ORG 0100H

********************************************

*************************液晶初始化******************

INITION:

MOV SP,#70H

MOV P0,#01H 清屏

CALL ENABLE

MOV P0,#38H 8位,2行显示

CALL ENABLE

MOV P0,#0CH 屏显on,关光标

CALL ENABLE

MOV P0,#06H 计数地址加1,自动右移

CALL ENABLE

******************************************

开机提示

******************************************

MOV P0,#80H

CALL ENABLE

MOV DPTR,#TABLE0写数据的第一行

CALL WRITE1

MOV P0,#00010000B 光标左移两位

CALL ENABLE

MOV P0,#00010000B

CALL ENABLE

CALL DEL0

LJMP MAIN

*********************************************写指令

ENABLE:

CLR RS

CLR RW

SETB E

CALL DEL0

CLR E

RET

**********************************************写数据

WRITE1:

MOV R1,#00H查表程序,从表头到表尾

A1:

MOV A,R1

MOVC A,@A+DPTR

CALL WRITE2

INC R1

CJNE A,#00H,A1 未到字符串末尾继续

RET

WRITE2:

MOV P0,A 直接将数据写入液晶屏

SETB RS

CLR RW

SETB E

CALL DEL0

CLR E

RET

DEL0:MOV R4,#020H

C0:MOV R5,#020H

C1: DJNZ R5,C1

DJNZ R4,C0

RET

******************************************

TABLE0:DB 'WELCOM HERE',00H

*************************内存初始化******************

INITIAL:

MOV R3,#08H

MOV R0,#30H

M1:

MOV @R0,#00H

INC R0

DJNZ R3,M1

RET

*************************选择按键播放八个音调******************

MAIN: MOV SP,#80H 初始化堆栈

MOV TMOD,#11H定时器0工作方式0,定时器1工作方式0

SETB EA

SETB ET0计数器0允许

SETB ET1计数器1允许

START: SETB P3.7关蜂鸣器

CLR TR0 定时器不允许

SCAN: 键盘扫描

MOV A,P1

CJNE A,#0FFH,SU_KEY 判断键盘按下,跳到SU_KEY,若未按,继续扫描

NOP

LJMP SCAN

SU_KEY:

SU_KEY1:

JB P1.0,SU_KEY2 如果不是第1个键按下,转

MOV DPH,#0FCH

MOV DPL,#44H

SJMP PLAY

SU_KEY2:

JB P1.1,SU_KEY3 如果不是第2个键按下,转

MOV DPH,#0FCH

MOV DPL,#0ACH

SJMP PLAY

SU_KEY3:

JB P1.2,SU_KEY4 如果不是第3个键按下,转

MOV DPH,#0FDH

MOV DPL,#09H

SJMP PLAY

SU_KEY4:

JB P1.3,SU_KEY5 如果不是第4个键按下,转

MOV DPH,#0FDH

MOV DPL,#34H

SJMP PLAY

SU_KEY5:

JB P1.4,SU_KEY6 如果不是第5个键按下,转

MOV DPH,#0FDH

MOV DPL,#82H

SJMP PLAY

SU_KEY6:

JB P1.5,SU_KEY7 如果不是第6个键按下,转

MOV DPH,#0FDH

MOV DPL,#0C8H

SJMP PLAY

SU_KEY7:

JB P1.6,SU_KEY8 如果不是第7个键按下,转

MOV DPH,#0FEH

MOV DPL,#06H

SJMP PLAY

SU_KEY8:

JB P1.7,KEY1 如果不是第8个键按下,转

MOV DPH,#0FEH

MOV DPL,#22H

SJMP PLAY

PLAY:

MOV T0TH,DPH 存高位字符

MOV T0TL,DPL 存低位字符

MOV TH0,T0TH

MOV TL0,T0TL

SETB TR0 启动定时器0

MOV R2,#01B 1/4拍

DJNZ R2,PLAY

LCALL DELAY

SJMP JUDGE

JUDGE:

JB P2.4,START 按键未按下,则继续扫描,否则,开始放音乐

*************************选择按键播放音乐******************

KEY1:

JB P2.5,KEY2 第一个键(P2.5)按下,放音音乐1

MOV R2,#00H

LCALL MODD 歌曲号显示

MOV DPTR,#MU_TAB1

AJMP MUSIC

KEY2:

JB P2.6,KEY3 第二个键(P2.6)按下,放音乐2

MOV R2,#01H

LCALL MODD 歌曲号显示

MOV DPTR,#MU_TAB2

AJMP MUSIC

KEY3:

JB P2.7, NEXT_2第三个键(P2.7)按下,放音乐3

MOV R2,#02H

LCALL MODD 歌曲号显示

MOV DPTR,#MU_TAB3

AJMP MUSIC

NEXT_2: LJMP START 返回

MUSIC:

MOV TMOD,#01H

MOV IE,#82H 允许T0中断

MOV R7,#00H

LOOP:

CLR A

MOVC A,@A+DPTR 查表取代码

MOV R1,A定时器高八位存R1

INC DPTR

PUSH DPH 保护现场

PUSH DPL

GECI1:

JB P2.5,GECI2 第一个键(P2.5)按下,显示歌词1

MOV DPTR,#GE1

AJMP GECI

GECI2:

JB P2.6,GECI3 第二个键(P2.6)按下,显示歌词2

MOV DPTR,#GE2

AJMP GECI

GECI3:

JB P2.7, TIAOCHU第三个键(P2.7)按下,显示歌词3

MOV DPTR,#GE3

AJMP GECI

TIAOCHU:LJMP START

GECI:

LCALL QINGCHU

MOV P0,#0C0H显示的位置

CALL ENABLE

XIANSHI1: MOV A,R7 查表取音乐汉语拼音显示

MOVC A,@A+DPTR

CALL WRITE2

INC R7

CJNE A,#00H,XIANSHI1

MOV P0,#00010000B 将光标左移一位

CALL ENABLE

MOV P0,#00010000B 将光标左移一位

CALL ENABLE

POP DPL

POP DPH

CLR A

MOVC A,@A+DPTR

MOV R0,A定时器低八位存R0

ORL A,R1

JZ NEXT0相或结果全0为休止符

MOV A,R0

ANL A,R1

CJNE A,#0FFH,NEXT 相与结果为0FFH表示乐曲结束

MOV P0,#01H 清屏

CALL ENABLE

LJMP INITION 从头开始演奏

NEXT: MOV T0TH,R1 装定时初值

MOV TH0,T0TH

MOV T0TL,R0

MOV TL0,T0TL

SETB TR0启动定时器

SJMP NEXT1

NEXT0: CLR TR0 关闭定时器

NEXT1: CLR A

INC DPTR

MOVC A,@A+DPTR查延时常数

MOV R2,A

LOOP1:

ACALL D200

DJNZ R2,LOOP1 控制延时次数

INC DPTR

AJMP LOOP

D200: MOV R3,#81H 延时程序

D200B: MOV A,#0FFH

D200A: DEC A

JNZ D200A

DEC R3

CJNE R3,#00H,D200B

RET

QINGCHU:MOV A,#00100000B

MOV P0,#0C0H 将第二行的第一位置0

LCALL ENABLE

LCALL WRITE2

MOV A,#00100000B 将第二行的第二位置0

MOV P0,#0C1H

LCALL ENABLE

LCALL WRITE2

MOV A,#00100000B 将第二行的第三位置0

MOV P0,#0C2H

LCALL ENABLE

LCALL WRITE2

MOV A,#00100000B 将第二行的第四位置0

MOV P0,#0C3H

LCALL ENABLE

LCALL WRITE2

MOV A,#00100000B将第二行的第五位置0

MOV P0,#0C4H

LCALL ENABLE

LCALL WRITE2

MOV A,#00100000B 将第二行的第六位置0

MOV P0,#0C5H

LCALL ENABLE

LCALL WRITE2

MOV A,#00100000B 将第二行的第七位置0

MOV P0,#0C6H

LCALL ENABLE

LCALL WRITE2 将第二行的第三位置0

以上等价程序如下

GECI:MOV R3,#00H 控制循环次数

QINGCHU:

MOV A,#00100000B 置空格

PUSH A

MOV R4,#0C0H地址

MOV A,R4

MOV P0,A

POP A

INC R4

DEC R3 控制循环次数

CJNE R3,#00H,QINGCHU 计满十次则执行转移

***************************************************

定时器0中断子程序,定时音乐

***************************************************

T0INT: 中断服务子程序

MOV TH0,T0TH

MOV TL0,T0TL

CPL P3.7 反相输出,演示音乐

RETI

******************************************

显示

******************************************

MODD:

MOV P0,#8EH

LCALL ENABLE

MOV A,R2

MOV DPTR,#TABLE2

MOVC A,@A+DPTR

LCALL WRITE2

RET

TABLE2:DB 31H,32H,33H

GE1: db 'xin',00h,'nian',00h,'hao',00h,'ya',00h,'xin',00h,'nian',00h,'hao',00h,'ya',00h

db 'zhu',00h,'fu',00h,'da',00h,'jia',00h,'xin',00h,'nian',00h,'hao',00h

GE2: DB 'liang',00H,'zhi',00H,'lao',00H,'hu',00H,'liang',00H,'zhi',00H,'lao',00H,'hu',00H,'pao',00H,'de',00H,'kuai',00H

DB 'pao',00H,'de',00H,'kuai',00H,'yi',00H,'zhi',00H,'mei',00H,'you',00H,'yan',00H,'jing',00H,'yi',00H,'zhi',00H

DB 'mei',00H,'you',00H,'er',00h,'duo',00h,'zhen',00h,'qi',00h,'guai',00h,'zhen',00h,'qi',00h,'guai',00h

GE3: DB 'wo',00h,'ai',00h,'bei',00h,'jing',00h,'tian',00h,'an',00h,'men',00h,'tian',00h,'an',00h

*************************延时子程序******************

DELAY:MOV 30H,#100 延长时间等待,键盘消抖

D1:MOV R5,#200

D2:DJNZ R5,D2

DJNZ 30H,D1

RET

*******************新年好******************************

MU_TAB1: DB 0FEH,25H,04H,0FEH,25H,04H

DB 0FEH,25H,06H,0FDH,80H,06H

DB 0FEH,84H,04H,0FEH,84H,04H

DB 0FEH,84H,06H,0FEH,25H,06H

DB 0FEH,25H,04H,0FEH,84H,04H

DB 0FEH,0C0H,04H,0FEH,84H,04H

DB 0FEH,98H,04H,0FEH,84H,04H

DB 0FEH,57H,06H

DB 0FFH,0FFH

*******************两只老虎****************************

MU_TAB2: DB 0FCH,44H,06H,0FCH,0ACH,06H,0FDH,09H,06H,0FCH,44H,06H

DB 0FCH,44H,06H,0FCH,0ACH,06H,0FDH,09H,06H,0FCH,44H,06H

DB 0FDH,09H,06H,0FDH,34H,06H,0FDH,0A6H,06H

DB 0FDH,09H,06H,0FDH,34H,06H,0FDH,0A6H,06H

DB 0FBH,04H,04H,0FDH,0C8H,04H,0FBH,04H,04H,0FDH,34H,04H

DB 0FDH,09H,04H,0FCH,44H,04H,0FBH,04H,04H,0FDH,0C8H,04H

DB 0FBH,04H,04H,0FDH,34H,04H,0FDH,09H,04H,0FCH,44H,04H

DB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH,44H,06H

DB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH,44H,06H

DB 0FFH,0FFH

*******************我爱北京天安门****************************

MU_TAB3: DB 0FDH,82H,06H,0FEH,22H,04H,0FDH,82H,04H,0FDH,34H,04H

DB 0FDH,09H,04H,0FCH,0ACH,04H,0FCH,44H,06H

DB 0FFH,0FFH,0FFH,0FFH

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8094252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存