汇编语言电子时钟的课程设计

作者&投稿:茅梵 (若有异议请与网页底部的电邮联系)
电子日历时钟程序设计(汇编语言)~

CD BIT P1.2;用于液晶
W BIT P3.6
R BIT P3.7
CE BIT P1.7

DATA1 EQU 43H;第一参数
DATA2 EQU 44H;第二参数
COM EQU 45H;命令寄存器

;*******************************************
ORG 0000H
jmp MAIN

ORG 0100H
;***************************************
MAIN:
;;;;;;;;;;;;;;;;;;;液晶初始化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV COM,#80H ;SET or 模式命令
LCALL WRITEDATA3
NOP
MOV DATA1,#00H ;SET TEXT HOME AREA ADDRESS 1000H
MOV DATA2,#10H
MOV COM,#40H
LCALL WRITEDATA
NOP
MOV DATA1,#1EH ;SET TEXT AREA ADDRESS 001EH
MOV DATA2,#00H
MOV COM,#41H
LCALL WRITEDATA
NOP
MOV DATA1,#00H ;SET GRAPHIC HOME AREA ADDRESS 2000H
MOV DATA2,#20H
MOV COM,#42H
LCALL WRITEDATA
NOP
MOV DATA1,#1EH ;SET GRAPHIC AREA ADDRESS 001EH
MOV DATA2,00H
MOV COM,#43H
LCALL WRITEDATA
NOP
MOV DATA1,#0FH ;SET OFFSET REGISTER 000FH
MOV DATA2,#00H
MOV COM,#22H
LCALL WRITEDATA
NOP
MOV DATA1,#00H ;SET ADDRESS POINTER 7C00H
MOV DATA2,#7CH
MOV COM,#24H
LCALL WRITEDATA
NOP
MOV COM,#9CH ;SET TEXT ON,GRAPHIC ON
LCALL WRITEDATA3
NOP
;**************************************************************

安装完成以后请将本光盘根目录下的环境设置批处理文件 Var.bat
拷贝到 Masm32\bin 目录下,并根据 MASM32 的安装位置编辑修改
Var.bat 文件中的相关目录名称。

2. 代码维护工具

每个例子都包括了描述编译、链接方法的 makefile 文件,
使用 nmake 工具可以自动根据此文件进行编译链接,nmake 工
具可以从 Visual C++ 的 bin 目录中找到,也可以从作者的网
站中下载。

3. 编译环境和编译方法

建议使用命令行方式进行编译,以编译 Chapter02\Test
目录中 Test.asm 为例,步骤是:

I. 打开一个“命令提示符”窗口。
II. 进入环境设置批处理文件 Var.bat 所在目录并执行
它,以后就可以使用这个“命令提示符”窗口编译
文件了。

x:
cd \masm32\bin
var

III. 进入源代码目录:

cd \chapter02est

IV. 使用 nmake 工具进行编译链接:

nmake

V. 执行编译好的可执行文件。

;name: ELECTRONIC CLOCK
data segment
mess1 db ' ****************ASM ASSIGNMENT**************** ',0ah,0dh
db ' ',0ah,0dh
db ' ***************ELECTRONIC CLOCK*************** ',0ah,0dh
db ' ',0ah,0dh
db ' ',0ah,0dh
db ' *******Press C or c to correct the time******* ',0ah,0dh
db ' ',0ah,0dh
db ' ***********Press ESC button to exit*********** ',0ah,0dh,'$'
tn db 'Please input the new time (hh:mm:ss):',0dh,0ah,'$'
mess2 db '*******Time is:',0ah,0dh,'$'
t_buff db 40 ;在数据段开一段时间显示缓冲区
db ?
db 40 dup (?)
hor db ?
min db ?
sec db ?
fg db 0
data ends

stack segment
db 100 dup(?)
stack ends

code segment
assume cs:code,ss:stack,ds:data ;确定各个逻辑段的类型
start:
call clear ;调用清屏子程序

display: ;时间显示部分
mov ax,data
mov ds,ax
mov bx,offset t_buff ;送t_buff的偏移地址到BX
mov ah,2ch ;调用DOS时间调用功能,功能号:2cH,小时,分钟,秒数分别保存在CH,CL,DH中
int 21h
mov al,ch ;小时数设定
mov ah,0
call bctd ;调用进制转换子程序
push ax
and al,0f0h ;选取al高四位
mov cl,4 ;设置右循环的次数
rol al,cl ;右循环
or al,30h ;加30h得到ACSII码
mov [bx],al ;将得到的结果送到t_buff缓冲区
inc bx ;BX自加1,指针指向下一个缓冲区的下一个地址

pop ax
and al,0fh ;选取低四位
or al,30h
mov [bx],al ;将转换后的低四位值送入缓冲区的第二个地址
inc bx
;----------------------------------------------------------
mov al,':' ;显示分隔符号
mov [bx],al
inc bx
;-------------------------------------------------------
mov ah,2ch
int 21h

mov al,cl ;分钟数设定
mov ah,0
call bctd
push ax
and al,0f0h
mov cl,4
rol al,cl
or al,30h

mov [bx],al
inc bx
pop ax
and al,0fh
or al,30h
mov [bx],al
inc bx
;-------------------------------------------------------------------------
mov al,':' ;显示分隔符号
mov [bx],al
inc bx
;-------------------------------------------------------------------------

mov ah,2ch ;秒设定
int 21h
mov al,dh
mov ah,0
call bctd
push ax
and al,0f0h
mov cl,4
rol al,cl
or al,30h

mov [bx],al
inc bx
pop ax
and al,0fh
or al,30h
mov [bx],al
inc bx
;----------------------------------------------------------------------
mov al,'$' ;将字符串的结束位送至显示缓冲区的最后一位
mov [bx],al
;------------------------------------------------------------------------
push bx ;置光标位置 ,AH=2,BH=0,DH跟DL分别为行号与列号,并入栈保护BX
mov ah,2
mov bh,0
mov dh,17
mov dl,41
int 10h
pop bx
lea dx,t_buff ;送t_buff偏移地址到DX,并调用DOS显示功能,功能号为9
mov ah,9
int 21h

push bx ;置光标位置
mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h
pop bx
lea dx,mess1
mov ah,9
int 21h

push bx ;置光标位置
mov ah,2
mov bh,0
mov dh,17
mov dl,21
int 10h
pop bx

lea dx,mess2
mov ah,9
int 21h

;-----------------------------
call delay1
mov ah,1 ;调用键盘I/O中断功能号1,获取键值到AL
int 16h
cmp al,'c' ;是c键,转到时间修改程序
je Cor
cmp al,'C' ;是C键,转到时间修改程序
je Cor
cmp al,1bh
jz quit ;是ESC键,退出程序
jmp display

quit:
mov ah,4ch ;程序终止功能号
int 21h
ret

Cor: call correct ;调用时间修改子程序
;-------------------------------
bctd proc near ;二进制转BCD码子程序
;AX输入参数
;AX输出参数,存放调整过的BCD码
mov dx,ax
mov ax,0
mov cx,16 ;设循环次数
bctd1:
clc ;清进位标志C
rcl dx,1 ;通过进位的循环右移
adc al,al ;带进位加法
daa ;加法的十进制调整
xchg al,ah ;交换高、低八位
adc al,al
daa
xchg al,ah
loop bctd1 ;循环次数保存在CX里
ret
bctd endp
;-------------------------------------------
clear proc near
push ax ;入栈保护现场
push bx
push cx
push dx
mov ax,0600h ;ah=06(滚动)al=00(全屏空白)
mov bh,3eh ;设置背景颜色(2)和前景颜色(e)
sub cx,cx
mov dx,5f5fh
int 10h
pop dx ;出栈恢复现场
pop cx
pop bx
pop ax
ret
clear endp

;-----------------------------------------
delay1 PROC ;精确延迟时间子程序

MOV DX,04ffh ;循环次数
up: XOR CX,CX
a: NOP
LOOP a
DEC DX
JNZ up
RET
delay1 ENDP
;----------------------------
correct proc ;时间修改子程序
call input ;调用键盘输入子程序输入数据
mov ch,hor
mov cl,min
mov dh,sec
and dl,0h
mov ah,2dh
int 21h
jmp start
ret
correct endp
;----------------------------------
input proc ;键盘输入子程序
push ax ;入栈保护数据
push bx
push cx
push dx
pushf

mov dx,offset tn ;显示修改时间的格式提示
mov ah,09h
int 21h

mov dx,offset t_buff ;数据缓冲区的数据输入
mov ah,0ah
int 21h
and dx,0h
lea bx,t_buff
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov ch,al
mov hor,al
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov cl,al
mov min,al
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov dh,al
mov sec,al
popf ;出栈恢复数据
pop dx
pop cx
pop bx
pop ax
ret
input endp
;----------------------------
code ends
end start

有人回答出来了怎么还不给分啊

驱动CRT显示,真晕。也不知道谁想出的这个问题,真是高手,模数结合。那需要你会单片机还要明白显像管显示器的显示原理,开发出这个估计去公司可以工程师了。

曾经杭电的单片机课程设计和你的有些像,不过是在8字管上显示的,比较容易。

怎么控制CRT显示我不知道,返回DOS应该是什么DOS系统调用的不知道,其它应该不难的吧。
以前学微机原理与接口的时候整过8086的汇编,现在早忘记光光了。

只能给你一点我关于这个问题的理解,如果愿意就给一点点分数,不愿意也没关系。

一个积存器用来保存 时分秒。秒,另一个积存器用来保存当前的时分秒。秒
时分秒。秒 和 时分秒之间的切换用一个子程序实现转换。模式1直接显示,模式2转换后显示。设置时间么,(汇编我不懂,不知道有没有变量的概念的)我从C的角度出发,就是时存于一个变量,按某个按键,切换到分设置,等等,然后把这些变量的值综合成0.1秒单位计时的数值,装入积存器。
没想过用汇编去解决问题啊,因为我汇编除了51的学过之外,其它都没学过,最多只是看得懂简单的指令,比如说跳转,装载什么的,不会拿汇编去实现什么复杂的功能。我觉得根本没必要啊。除了机器相关的,其他用C实现多方便。
我可以猜测这是你老师布置的作业,或者也可能是课程设计的。
只能说到这了

好难~- -


求一个关于用C语言编写的电子时钟的程序,内容要有闹钟,可以调整时间...
define unit unsigned int define uchar unsigned char \/\/#define HZ 12 sbit key0=P0^0; \/\/ 分钟调整 sbit key1=P0^1; \/\/ 小时调整 sbit P2_0=P2^7; \/\/秒 指示灯 sbit MN_RXD=P3^6;sbit MN_TXD=P3^7;uchar data CLOCK[4]={0,0,0,12};\/\/存放时钟时间(百分秒,秒...

用C语言编一个数字电子时钟的程序
内循环每秒钟更新秒数,重新刷新时间显示。当到达60秒时,应显示00并使分钟值增加1。同理,当到达60分时,应显示00并使... 要求:输入小时、分钟、秒钟三个整数值后,就从该时刻开始运行。内循环每秒钟更新秒数,重新刷新时间显示。当到达60秒时,应显示00并使分钟值增加1。同理,当到达60分时,应显示00并使时钟值增...

求一个用汇编语言编写一个8051单片机的时钟程序(急急急啊)
给你当参考...不足功能自己改...有问题再发问..;P1.4小时调整 P1.5分种调整 CODE_SEG SEGMENT CODE DATA_SEG SEGMENT DATA STACK_SEG SEGMENT IDATA K1 BIT P1.4 K2 BIT P1.5 RSEG DATA_SEG KEY_S: DS 1 KEY_V: DS 1 DIS_DIGIT: DS 1 SEC: DS 1...

求一个汇编语言课程设计的MASM32时钟的程序
line(451,200,x1,y1); \/*在电子表中绘制分针*\/ digitclock(408,318,digithour(h)); \/*在数字时钟中,显示当前的小时值*\/ digitclock(446,318,digitmin(m)); \/*在数字时钟中,显示当前的分钟值*\/ setwritemode(1); \/*规定画线的方式,如果mode=1,则表示画线时用现在特性的线与所画之处原有的线进行...

电子时钟程序(单片机汇编语言编写,不要C语言)
这个电子钟程序已经基本符合你的要求。希望能对你有用。程序说明:显示的时间格式为:12-00-00,既,时-分-秒 按键说明:P3.2为时调节。P3.3为分调节。P3.4为秒调节。这三个按键均是每按一次加一。晶振说明:12MHZ 数码管说明:共阳数码管。共8个数码管。共用了两个4连共阳数码管。其中,P0...

利用8086汇编语言做一个电子时钟·可以修改日期和时间的·12H\/24H能...
好像有点困难。

基于8086汇编语言的指针式屏显电子钟的设计程序
这个是有设置闹铃时间的电子钟,你参考一下:;具有时钟功能,可以显示并不断刷新当前时间;并可以预先设置好响铃时间,在到达响铃时间就会响铃 data segment hour dw ? ;响铃时的小时数 minute dw ? ;响铃时的分钟数 ten dw 10 s1 db 'please set the time when the clock will ring(set it ...

求大侠给小弟编写一个电子钟的源程序
write_ds1302(0x8e,0x00); \/\/写保护寄存器,在对时钟或RAM写前WP一定要为0 write_ds1302(0x8c,time[0]); \/\/年 write_ds1302(0x88,time[1]); \/\/月 write_ds1302(0x86,time[2]); \/\/日 write_ds1302(0x8A,time[3]); \/\/星期 write_ds1302(0x84,time[4]); \/\/时 write_ds1302(0x82,time...

单片机控制多位数码管的电子时钟程序
用单片机控制多位数码管的电子时钟,用独立按键进行控制,可显示时间,日期,有闹钟功能,独立按键进行时间日历,闹钟设置 软件编程: keil工程C语言代码:\/*** 项目名称:数码管电子时钟 实现功能:数码管显示时间、日期,时间、日 期可调,可设置闹钟,闹铃响一分钟。 ***\/ #include reg52.h #define...

用单片机写一个C语言程序关于电子时钟,用键盘调制时分秒的加减 第一个...
我给你一个保证好用的,KEY_COM调模式,按一下进入调时 ,在按一下调分,再按一下退出调时模式,这时加减按键都无效,在调时模式时会产生闪烁方式,这段程序是我自己想的办法实现的,可能有点笨拙,但效果很好,我建议你用DS1302做时钟,用单片机计数器由于晶振等原因会有很大的误差,实际中没有用...

安居区13335418907: 汇编语言电子时钟的课程设计 -
查青克立: ;name: ELECTRONIC CLOCK data segment mess1 db ' ****************ASM ASSIGNMENT**************** ',0ah,0dh db ' ',0ah,0dh db ' ***************ELECTRONIC CLOCK*************** ',0ah,0dh db ' ',0ah,0dh db ' ',0ah,0dh db ' *******Press C or c to ...

安居区13335418907: 汇编语言 电子钟 -
查青克立: 用汇编语言怎么实现时钟的实时显示,请各位帮忙!!! ;;在右上角显示时钟,按任一键结束;用MASM5.0编译通过.data segment HH DB 0,0,':' MM DB 0,0,':' SS1 DB 0,0 data ends code segment main proc far assume cs:code start: push ds ...

安居区13335418907: 用AT89C51芯片汇编语言编写简易电子钟 -
查青克立: 课设报告的大概内容:1 课程设计的要求2 数字电子时钟的设计方案3 数字电子时钟的硬件设计(包括 单片机选择 显示电路的设计 命令按钮的设计)4 程序流程图设计5 程序设计代码6 仿真与调试7 课程设计小结8 主要参考文献 课程设计的图纸设计 呵呵 满意就选满意回答吧

安居区13335418907: 求一个汇编语言课程设计的MASM32时钟的程序 -
查青克立: 安装完成以后请将本光盘根目录下的环境设置批处理文件 Var.bat 拷贝到 Masm32\bin 目录下,并根据 MASM32 的安装位置编辑修改 Var.bat 文件中的相关目录名称.2. 代码维护工具 每个例子都包括了描述编译、链接方法的 makefile 文件, ...

安居区13335418907: 汇编程序:电子日历时钟系统程序设计 -
查青克立: STACK SEGMENT STACK DW 200 DUP (?)STACK ENDSDATA SEGMENT WHOUR DB 0 ;秒表的时、分、秒、毫秒 WMIN DB 0 WSEC DB 0 WMSEC...

安居区13335418907: 用汇编语言编写一个数字电子钟程序代码
查青克立: 设计一个时钟程序,由键盘输入当前时、分、秒值,随即 显示时间并不停计时,当有键盘按下时,返回DOS. http://wenwen.sogou.com/z/q799785284.htm 楼主参考一下

安居区13335418907: 单片机数字钟设计 汇编语言
查青克立: 工作原理介绍:单片机通过了 3 只 74HC164 串行-并行转换芯片后,驱动时钟屏幕,因为时钟屏幕的极性是共阴极,所以必须使用“74HC”电路而不能使用“74LS”电路,后者的高电平驱动能力很差!这里的 3 只 74HC164 芯片,自身属于串...

安居区13335418907: 求 微机原理 模拟时钟 课程设计 用汇编语言写的! 不要单片机的啊!
查青克立:http://www.pudn.com/downloads43/sourcecode/windows/bitmap/detail146043.html 这里有~~~注册个帐号随便发个源码就可以下载了.

安居区13335418907: 课程设计:实时日历/时钟的设计与实现
查青克立: 本设计论文介绍了用at89c2051单片机控制的数字钟的硬件结构与软件设计,给出了汇编语言源程序. 此数字钟是一个将“时”、“分”、“秒”“百分秒”显示于人的视觉器官的计时装置.它的计时周期为12小时,显示满刻度为12时59分59...

安居区13335418907: 设计一个24小时制时钟计数器.用汇编语言 -
查青克立: 刚写了一个,应该没问题 ORG 2000H MOV R0,#0 ;R0,R1,R2初始化 MOV R1,#0 MOV R2,#0 MOV P0,#0;P0,P1,P2置0...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网