求AT89c51单片机四位数码管时钟程序,要汇编,要能时间调整。

求AT89c51单片机四位数码管时钟程序,要汇编,要能时间调整。,第1张

汇编不怎么会,网上给找了个汇编程序,你看看有没有用!这是个显示系统日期和时间的程序。这个程序运行时按‘D’显示日期,按‘T’显示时间,注意一定要切换到大写状态下按,不然没用。

STACK

SEGMENT

STACK

DW

200

DUP

(?)

STACK

ENDS

DATA

SEGMENT

SPACE

DB

1000

DUP

('

')

PATTERN

DB

6

DUP

('

'),0C9H,26

DUP

(0CDH),0BBH,6

DUP

('

')

DB

6

DUP

('

'),0BAH,26

DUP

(20H),0BAH,6

DUP

('

')

DB

6

DUP

('

'),0C8H,26

DUP

(0CDH),0BCH,6

DUP

('

')

DBUFFER

DB

8

DUP

(':'),12

DUP

('

')

DBUFFER1

DB

20

DUP

('

')

STR

DB

0DH,0AH,

'PLEASE

INPUT

DATE(D)

OR

TIME(T)

OR

QUIT(Q):

$'

DATA

ENDS

CODE

SEGMENT

ASSUME

CS:CODE,DS:DATA,ES:DATA,SS:STACK

START:

MOV

AX,0001H

设置显示方式为40*25彩色文本方式

INT

10H

MOV

AX,DATA

MOV

DS,AX

MOV

ES,AX

MOV

BP,OFFSET

SPACE

MOV

DX,0B00H

MOV

CX,1000

MOV

BX,0040H

MOV

AX,1300H

INT

10H

MOV

BP,OFFSET

PATTERN

显示矩形条

MOV

DX,0B00H

MOV

CX,120

MOV

BX,004EH

MOV

AX,1301H

INT

10H

LEA

DX,STR

显示提示信息

MOV

AH,9

INT

21H

MOV

AH,1

从键盘输入单个字符

INT

21H

CMP

AL,44H

AL='D'?

JNE

A

CALL

DATE

显示系统日期

A:

CMP

AL,54H

AL='T'?

JNE

B

CALL

TIME

显示系统时间

B:

CMP

AL,51H

AL='Q'?

JNE

START

MOV

AH,4CH

返回dos状态

INT

21H

DATE

PROC

NEAR

显示日期子程序

DISPLAY:MOV

AH,2AH

取日期

INT

21H

MOV

SI,0

MOV

AX,CX

MOV

BX,100

DIV

BL

MOV

BL,AH

CALL

BCDASC1

日期数值转换成相应的ASCII码字符

MOV

AL,BL

CALL

BCDASC1

INC

SI

MOV

AL,DH

CALL

BCDASC1

INC

SI

MOV

AL,DL

CALL

BCDASC1

MOV

BP,OFFSET

DBUFFER1

MOV

DX,0C0DH

MOV

CX,20

MOV

BX,004EH

MOV

AX,1301H

INT

10H

MOV

AH,02H

设置光标位置

MOV

DX,0300H

MOV

BH,0

INT

10H

MOV

BX,0018H

REPEA:

MOV

CX,0FFFFH

延时

DEC

BX

JNZ

REPEA

MOV

AH,01H

读键盘缓冲区字符到AL寄存器

INT

16H

JE

DISPLAY

JMP

START

MOV

AX,4C00H

INT

21H

RET

DATE

ENDP

TIME

PROC

NEAR

显示时间子程序

DISPLAY1:MOV

SI,0

MOV

BX,100

DIV

BL

MOV

AH,2CH

取时间

INT

21H

MOV

AL,CH

CALL

BCDASC

将时间数值转换成ASCII码字符

INC

SI

MOV

AL,CL

CALL

BCDASC

INC

SI

MOV

AL,DH

CALL

BCDASC

MOV

BP,OFFSET

DBUFFER

MOV

DX,0C0DH

MOV

CX,20

MOV

BX,004EH

MOV

AX,1301H

INT

10H

MOV

AH,02H

MOV

DX,0300H

MOV

BH,0

INT

10H

MOV

BX,0018H

RE:

MOV

CX,0FFFFH

REA:

LOOP

REA

DEC

BX

JNZ

RE

MOV

AH,01H

INT

16H

JE

DISPLAY1

JMP

START

MOV

AX,4C00H

INT

21H

RET

TIME

ENDP

BCDASC

PROC

NEAR

时间数值转换成ASCII码字符子程序

PUSH

BX

CBW

MOV

BL,10

DIV

BL

ADD

AL,'0'

MOV

DBUFFER[SI],AL

INC

SI

ADD

AH,'0'

MOV

DBUFFER[SI],AH

INC

SI

POP

BX

RET

BCDASC

ENDP

BCDASC1

PROC

NEAR

日期数值转换成ASCII码字符子程序

PUSH

BX

CBW

MOV

BL,10

DIV

BL

ADD

AL,'0'

MOV

DBUFFER1[SI],AL

INC

SI

ADD

AH,'0'

MOV

DBUFFER1[SI],AH

INC

SI

POP

BX

RET

BCDASC1

ENDP

CODE

ENDS

END

START

 输入的五位数字,第一位为符号位,当符号位为0时为正数,否则为负数

 后四位为参数计算的数字,输出结果同上

assume cs:codesg,ds:datasg,ss:stacksg

datasg segment

input1 db 'Input first number! ','$'

input2 db 'Input second number! ','$'

result db 'result is : ','$'

 21号中断10号例程,存放输入数据

add1 db 6  缓冲区最大容量

db ?  实际上接收字符的个数,不包括最后的回车

db 6 dup (?)  存放输入的字符,回车结尾

add2 db 6

db ?

db 6 dup (?)

num dw ?  存放中间结果

sign db ?  两个数和的符号位

sum dw 10 dup (?)  两个数的和

datasg ends

stacksg segment

stacksg ends

codesg segment

start: mov ax,datasg

mov ds,ax

lea dx,input1

mov ah,9

int 21h

 读取第一个加数

mov dx,offset add1

mov ah,10

int 21h

 取光标位置,ah为行,al为列

mov ah,3

mov bh,0

int 10h

 设置光标位置

mov ah,2

mov bh,0

inc dh

mov dl,0

int 10h

lea dx,input2

mov ah,9

int 21h

 读取第二个加数

mov dx,offset add2

mov ah,10

int 21h

 取光标位置,ah为行,al为列

mov ah,3

mov bh,0

int 10h

 设置光标位置

mov ah,2

mov bh,0

inc dh

mov dl,0

int 10h

lea bx,add1

mov ax,[bx+1]

mov ah,0

dec ax  除去符号位,得到数字个数

push ax  压入字符数量

add bx,3

push bx  压入字符串首地址

call DeciToBina

lea bx,add1

mov dl,[bx+2]  取输入的数字的符号位

cmp dl,'0'

jz posi1

neg ax  符号位不为0,则表示负数,所以求补得到负数

posi1:

lea bx,num

mov [bx],ax  保存第一个数

lea bx,add2

mov ax,[bx+1]

mov ah,0

dec ax

push ax  压入字符数量

add bx,3

push bx  压入字符串首地址

call DeciToBina

lea bx,add2

mov dl,[bx+2]

cmp dl,'0'

jz posi2

neg ax

posi2:

lea bx,num

add [bx],ax  保存两个数相加的结果

lea dx,result

mov ah,9

int 21h

lea bx,num

mov ax,[bx]  取出两个数的和

push ax  保存一个备份

 测试结果的符号位

and ax,1000000000000000b  取最高位

neg ax

sbb ax,ax

neg ax  ax的值是0或1

add ax,30h  转为0或1的ascii码

lea bx,sign

mov [bx],al  存入符号位

pop ax  取出备份

cmp byte ptr [bx],30h  测试结果是否为正数

jz posi

neg ax  不为正,则求补取绝对值

posi:

push ax  压入第二个参数,即待转换的十六进制数的绝对值

lea di,sum

push di  压入第一个参数,接收结果的缓冲区

call BinaToDeci

lea dx,sign

mov ah,9

int 21h

mov ax,4c00h

int 21h

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

 作用:将十六进制数,转为十进制字符,用以输出

 形式:void BinaToDeci( [buff], int ),从右向左依次压入堆栈

 参数1:第一个参数 [buff]:接收结果的缓冲区地址

 参数2:第二个参数int :待转换的十六进制数字

 返回值:无,直接保存到内存中

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

BinaToDeci proc

push bp

mov bp,sp

push ax

push bx

push cx

push dx

mov cx,0  初始化计数器,记录循环次数,即十进制数的位数

mov ax,[bp+6]  取出传入的待转换十六进制数,段内调用只加6,段间调用加8

 计算出十进制各位数字,并保存到堆栈

bina_next:

xor dx,dx

mov bx,10

div bx

push dx

inc cx

cmp ax,0

jz bina_end

jmp bina_next

bina_end:

mov bx,[bp+4]  取出保存十进制数的缓冲区首地址

 将十进制的各个位数转换成ascii码,并存入指定的内存区域

bina_next2:

pop ax

add ax,30h

mov byte ptr [bx],al

inc bx

loop bina_next2

 字符串以'$'结尾,用以调用21号中段的9号例程

mov byte ptr [bx],'$'

pop dx

pop cx

pop bx

pop ax

mov sp,bp

pop bp

ret 4

BinaToDeci endp

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

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

 作用:将十进制字符,转换为十六进制数,用以计算

 形式:void DeciToBina( [buff], int ),从右向左依次压入堆栈

 参数1:第一个参数 [buff]:放置十进制数字字符串的缓冲区的首地址

 参数2:第二个参数int :十进制字符串的字符个数

 返回值:十六进制的数字

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

DeciToBina proc

push bp

mov bp,sp

push bx

push cx

push dx

push si

mov bx,[bp+4]  取放置十进制字符串缓冲区的首地址

mov cx,[bp+6]  十进制数字字符串的字符个数

xor ax,ax

 将ascii码还原为数字,并保存到堆栈

deci_next:

mov al,byte ptr [bx]  依次取缓冲区内的字符

sub al,30h

push ax

inc bx

loop deci_next

mov cx,[bp+6]  再次获得字符的个数

xor ax,ax

xor dx,dx

mov bx,1  用作乘数

xor si,si

 各位相乘然后累加获得十六进制数值

 结果=个位*1+十位*10+百位*100+千位*1000

deci_next1:

pop ax  取出数字

mul bx  相乘

add si,ax  累加结果

 计算下次相乘时的乘数

mov ax,bx

mov bx,10

mul bx

mov bx,ax

loop deci_next1

 将结果存入ax,为返回值

mov ax,si

pop si

pop dx

pop cx

pop bx

mov sp,bp

pop bp

ret 4

DeciToBina endp

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

codesg ends

end start

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

masm5测试通过

智慧软件使用 *** 作指南手册

大智慧软件使用 *** 作指南2.1开机菜单启动系统,进入大智慧出现如下开机菜单,开机菜单清楚地显示了系统各项功能。在任一菜单的画面中,其各级选项均表示本级菜单所能实现的功能或所包括的所有可选项。 *** 作: 1、用【↑】、【↓】选择菜单中的某项功能。2、确定菜单选项后,按Enter键确认并执行所指定选项的 *** 作,按 Esc 键回到上一级菜单。

2.2下拉菜单为方便用户 *** 作,大智慧同时采用下拉式菜单设计,下拉式菜单包含了系统的所有功能。在任一选项菜单下,组成菜单的各项表示该菜单所能实现的功能或所包括的所有可选项。 *** 作: 1、任一界面下,用鼠标左键点击工具栏中的菜单,从中选择某项功能。2、确定菜单选项后,单击鼠标左键或按Enter键确认并执行所指定选项的 *** 作。

2.3大盘当日动态走势大盘当日动态走势,主要内容包括当日指数、成交总额、成交手数、委买/卖手数、委比、上涨/下跌股票总数、平盘股票总数等。另有指标曲线图窗口,可显示多空指标,量比等指标曲线图。激活功能:1、从开机菜单中选择"大盘分析",单击鼠标左键或按Enter键进入子菜单,确定选项后按Enter键确认并执行 *** 作,按Esc键退出当前菜单。2、从下拉菜单上选择"大盘走势",确定选项后,单击鼠标左键或按Enter键确认并执行 *** 作。 *** 作:1、Enter键切换到大盘K线图画面。2、PageUp查看上一个类别指数,PageDown查看下一个类别指数。3、01+Enter 或 F1,查看分时成交明细,02+Enter 或 F2,查看分价成交明细;10+Enter 或 F10 查看当天的咨讯信息。4、"/" 切换走势图的类型,并调用各个大盘分析指标。5、进入大盘的分时图或者日线图后,您可以发现在右下角这里新增了"大单"这项功能,按小键盘的"+"号键就能切换到大单揭示页面。它在沪深大盘分时走势页面提供了个股大单买卖的数据。用鼠标双击某一个股名称,可以切换到该股票的分时图界面。

2.4大盘分时走势大盘当日动态走势主要内容包括当日指数、成交总额、成交手数、委买/卖手数、委比、上涨/下跌股票总数、平盘股票总数等。另有指标曲线图窗口,可显示多空指标,量比等指标曲线图。激活功能:1、从开机菜单中选择"大盘分析",单击鼠标左键或按Enter键进入子菜单,确定选项后按Enter键确认并执行 *** 作,按Esc键退出当前菜单。2、从下拉菜单上选择"大盘走势",确定选项后,单击鼠标左键或按Enter键确认并执行 *** 作。 *** 作: 1、Enter键切换到大盘K线图画面。2、PageUp查看上一个类别指数,PageDown查看下一个类别指数。3、01+Enter 或 F1,查看分时成交明细,02+Enter 或 F2,查看分价成交明细;10+Enter 或 F10 查看当天的咨讯信息。4、"/" 切换走势图的类型,并调用各个大盘分析指标。5、进入大盘的分时图或者日线图后,您可以发现在右下角这里新增了"大单"这项功 能,按小键盘的"+"号键就能切换到大单揭示页面。它在沪深大盘分时走势页面提供了个股大单买卖的数据。用鼠标双击某一个股名称,可以切换到该股票的分时图界面。

2.5个股分时走势主要内容包括个股当日动态走势线、个股当日均价线、分时价量显示窗口(该窗口显示当前盘口情况,即当前个股的委托买卖情况)、分时价量表(详细显示各个时刻的分时成交明细)、个股基本面窗口等。另有指标曲线图窗口,可显示动量指标,量比指标等共八种指标的曲线图。激活功能:1、从开机菜单中的"分类报价"或"自选股报价"中选定个股,然后按Enter键确认并执行 *** 作。按Esc键退出。2、从下拉菜单"行情报价"中进入相应的行情列表,从中选定个股,然后按Enter键确认并执行 *** 作。按Esc键退出;

作者:220.188.149.* 2008-2-13 15:55 回复此发言

2 大智慧软件使用 *** 作指南手册

3、直接输入个股代码或个股名称拼音首字母,然后按Enter键确认并执行 *** 作, 如"深发展"输入"0001"或"sfz"即可。按Esc键退出。 *** 作: 1、通过Enter键循环切换个股K线图、行情列表、分时走势画面;2、PageUp查看上一个股动态分时走势,PageDown查看下一个股动态分时走势;3、"-"键用于改变盘口显示方式,"+"键循环切换右下角特色基本面窗口、个股分时走势图、个股分时成交明细。说明:通过"+"键切换至特色基本面窗口,可以浏览竞买竞卖指标、大单比率、五日换手总量、市盈率、每股收益、每股净资产、总股本等基本面数据。同时,大智慧还提供流通股本、流通市值、公司上市日期、概念板块等重要数据参考。让用户可以在短时间内大致了解上市公司(图二中"中报数据"表示基本面引用的是公司中报数据)。★ 特别注意:竞买、竞卖指标是判断市场资金流向的指标,当外盘/竞买大于内盘/竞卖时,表明场外有资金介入;反之就表明场内有资金在外逃。4、"/"快速切换分析指标。5、"大智慧"提供"上证指数"("深证成分")叠加功能。在个股分时走势图下,点击鼠标右键,从中选择"上证指数"("深证成分"),可将"上证指数"("深证成分")叠加到个股分时走势图上。 6、01+Enter或F1,查看个股分时成交明细;02+Enter或F2,查看个股分价成交明细 ;10+Enter或F10查看个股基本面资料。 2.6自定义指标参数(1) 在K线图下,选定技术指标后,通过07+Enter或F7可自定义指标参数(包括参数、式样和坐标的设定)。(2) 还可以用鼠标左键点中技术指标图形后,再点击鼠标右键,即可自定义指 标参数 ::小窍门:: 晚间资讯在收盘后会有信息地雷挂在大盘或个股分时图右侧的蓝色网格上,我们称之为晚间资讯。为您提供收市以后的资讯服务。如果在盘后有什么重大消息,我们会在这儿立即挂出地雷,盘中他会自动消失。 【Page Up】和【Page Down】可翻页。 点键评价功能,在个股走势和日线界面上使用"."键查看大智慧对个股的评价和 *** 作建议。再按一下"."键,可以查看综合评价。

2.7行情报价行情报价由以下内容组成:分类报价、智慧排行、综合排名、股指同列、多股同列、自选报价、板块(包括行业、地域、概念)报价。激活功能:0+Enter后选择相应报价或通过鼠标左键选择"行情报价"的某一选项,(如分类报价之上证A股 1)即可。 *** 作:1、用鼠标左键点击"行情报价",从中选取相应内容;或者通过【↑】、【↓】键选取相应的内容,然后按Enter键确认并执行 *** 作。2、行情列表下,Enter键循环切换个股分时走势、K线图、行情列表画面。3、【←】和【→】移动行情列表中的字段。4、"*"键改变字体大小;"/"键可快速切换排行内容。5、"行情报价"中备有"字段重组"功能。在行情列表下,选定任一字段,点鼠标右键,出现"字段重组"后,可从中选取所需字段。6、行情列表下,点击任一字段,可按字段内容自动进行相应的排行。7、大智慧板块报价包括每日更新的行业、地域、概念板块,可从"行情报价"中选取,详情请见特色功能说明。8、大智慧还推出多项智慧排行。"智慧排行"可从"行情报价"中选取,也可从开机菜单中进入,详情请见特色功能说明。 9、在行情报价界面点右键,可以将对应的个股添加至自选股中,当然也能做删除 *** 作。 10、根据相关数据计算出板块指数,提供高开低收量额等基本数值以提供盘中实时数据和F10资料.这些都是大智慧为您自动分类的。

2.8多股同列多股同列具有将多个股票的走势在一个画面中同时列出的功能。激活功能: 1、从开机菜单中选择"多股同列",Enter后选定相应的选项查看,Esc键退出。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存