《微型计算机系统原理及应用》课程设计-电子时钟显示程序设计.doc_第1页
《微型计算机系统原理及应用》课程设计-电子时钟显示程序设计.doc_第2页
《微型计算机系统原理及应用》课程设计-电子时钟显示程序设计.doc_第3页
《微型计算机系统原理及应用》课程设计-电子时钟显示程序设计.doc_第4页
《微型计算机系统原理及应用》课程设计-电子时钟显示程序设计.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微型计算机系统原理及应用课程设计电子时钟显示目录一、课程设计的目的 (2)二、课程设计的题目 (2)三、课程设计的主要内容 (2) (一)、程序论述 (2)(二)、程序设计的步骤 (2)(三)程序流程图(2)(四)程序 (4)(五)结果显示(14)四、总结(14)(一)、本设计主要用到的dos、bios调用及功能 (14)(二)、心得体会 (15)五、参考文献(16)一、课程设计的目的:本次微型计算机原理及应用课程设计我选择了用汇编语言做电子时钟,其主要目的是加强软件编程能力。通过本次设计复习并熟练掌握微机原理中的基本操作指令、dos中断功能调用以及bios中断功能调用。最主要的是使用汇编语言编程来实现现实中许多电子产品的功能。二、课程设计的题目:电子时钟显示程序设计三、课程设计的主要内容:(一)、程序论述本次微型计算机原理及应用课程设计我做的题目是“电子时钟显示程序设计”,是使用汇编语言编程实现电子时钟显示的功能。主要提供了系统时间的调用,设置时间及显示时间等功能。在我所做的程序中主要以下面的内用运行。主程序首先注册新的中断处理程序从系统中取得时间,然后持续等待,直到在中断程序中检测到有按键时间的发生,然后主程序取消中断处理程序。判断输入的键,然后根据相应的按键提供相应的设置功能。中断处理程序每次得到系统定时器中断时间、,判断是否到达1秒,如果到达则更新时间,存入数据区,然后更新数据的显示。当有按键事件发生时,设置数据区的按键标记为真。当主程序检查到该标记为真时,则取消中断程序的驻留。然后处理相应的事件。(二)程序设计的步骤:1、定义显示界面2、调用系统时间,并将调用的二进制表示的时间数转换成asc码,并将时间存入内存区。3、将存在系统内存区的 时间数用显示字符串的形式显示出来。4、获取键盘的按键值,判断键值并推出系统。(三)程序流程图:开始设置输入字符串用缓冲区,定义变量初始化界面输入的asc码转换成16进制数dos调用,显示:welcome to simple clock取得系统时间,时、分、秒分别存ch、cl、dh时间定时更新关中断开中断dh清零,cl加1cl清零,ch加1ch清零显示时间16进制转换成10进制显示字符串外部中断?结束(dh)60h??(cl)60h??(ch)24h?yyyynnnn延时1秒(四)程序:.model small;- .stack;- .datahour db ?min db ?sec db ?msec db ? nhour db 0 ;设置时间使用nmin db 0 ;设置时间使用nsec db 0 ;设置时间使用funkey db ? ;功能设置使用keysw db 00h ;是否按键开关switch db 0ffh ;刷新开关,真,则不断在定时器中断函数中刷新,否则不刷新 n db 0dh,0ah,$ count dw 1 smsg db * welcome to simple clock *,0dh,0ah,$ qmsg db * please input q to quit *,0dh,0ah db ,* input s to set new time *,0dh,0ah,$ settmsg db please input new time(hh:mm:ss),0dh,0ah,$ authormsg db _,0dh,0ah db author: dingchuanxiang,0dh,0ah db e-mail: ,0dh,0ah db class: xin gong_042_08 hao,0dh,0ah db date: 2007/07/07,0dh,0ah db _,0dh,0ah,$;- .codepusha macro push ds push ax push bx push cx push dx endmpopa macro pop dx pop cx pop bx pop ax pop ds endmmain proc far start: mov ax,data mov ds,ax push ds call gettime ;取得系统时间 call initui ;初始化界面 mov al,1ch mov ah,35h int 21h ;dos调用取中断向量 push es push bx push ds mov dx,offset tupdate mov ax,seg tupdate mov ds,ax mov al,1ch mov ah,25h int 21h ;dos调用设置中断向量 pop ds in al, 21h and al, 11111100b out 21h,al stidelay: pusha cmp ds:keysw,0ffh ;检查是否有按键 jz exitdelay ;有按键则跳转 popa jmp delayexitdelay: popa pop dx pop ds mov al, 1ch mov ah, 25h int 21h ;dos调用设置中断向量 pop ds ;restore ds ;读敲入的按键 mov ah,07h int 21h cmp al,s jne next1;判断读入字符然后进行相应处理,此时中断函数已经取消,只是单线程sett: mov ds:funkey,al call settime ;调用子函数设置时间 mov ds:keysw,00h jmp startnext1: cmp al,q je endmain mov ds:keysw,00h jmp startendmain: mov ax,4c00h ;exit int 21hmain endp;定时中断程序()tupdate proc near push ds ;保存工作寄存器 push ax push bx push cx push dx mov ax, data mov ds, ax sti dec count ;时间间隔总数(约18.2次为1秒) jnz exit ;不到一秒则跳转 mov count,18 call caltime ;更新时间;检测刷新开关是否打开 mov bl,ds:switch cmp bl,00 jz exit;检测是否有按键按下,取适当的值进行退出控制 pusha mov ah, 0bh ;检测是否输入消息(按键消息) int 21h inc al jnz nokey mov ds:keysw,0ffh ;设置已经被按键 popa jmp exitnokey: popa call displyh ;显示小时 call displym ;显示分钟 call displys ;显示秒exit: cli mov al,20h out 20h,al pop dx pop cx pop bx pop ax pop ds iret ;返回中断tupdate endp;-;关闭定时刷新开关closesw proc near pusha mov bl,0h mov ds:switch,bl ;关闭刷新开关 popa retclosesw endp;-;打开定时刷新开关opensw proc near pusha mov bl,0ffh mov ds:switch,bl ;打开刷新开关 popa retopensw endp;-;初始化显示界面initui proc near pusha ;设置显示方式(4025 黑白文本,16级灰度) mov ah,0h mov al,00h ;bios调用设置显示方式 int 10h ;显示头标题 mov dh,00h mov dl,00h call movcur mov dx,offset smsg mov ah,09h ;dos调用显示字符串 int 21h ;call dos ;显示结尾标题 mov dh,06h mov dl,02h call movcur mov dx,offset qmsg mov ah,09h ;dos调用显示字符串 int 21h ;显示作者信息 mov dh,0bh mov dl,00h call movcur mov dx,offset authormsg mov ah,09h ;dos调用显示字符串 int 21h popa retinitui endp;-;移动光标(dh:row,dl:col); dh ;参数设置行; dl ;参数设置列movcur proc near pusha ;设置光标位置 mov ah,2h mov bh,0 int 10h popa ret movcur endp;-;显示小时displyh proc near pusha ; 设置光标位置 mov dh,3h mov dl,13d. call movcur mov dh,0 mov dl,ds:hour call output ;调用output函数输出小时 mov dl,: mov ah,02h int 21h popa retdisplyh endp;-;显示分钟displym proc near pusha ;设置光标位置 mov dh,3h ;set row no. mov dl,16d ;set column no. call movcur mov dh,0 mov dl,ds:min call output mov dl,: mov ah,02h int 21h popa retdisplym endp;-;显示秒displys proc near pusha ;设置光标位置 mov dh,3h ;set row no. mov dl,19d ;set column no. call movcur mov dh,0 mov dl,ds:sec call output popa retdisplys endp;-;调用dos中断取得系统时间gettime proc near pusha mov ah,2ch ; 取得系统时间,ch:cl=(h:m),dh:dl=(s:1/100s) int 21h mov ds:hour,ch ;取得小时 mov ds:min,cl ;取得分钟 ; dec dh ;延迟1秒 mov ds:sec ,dh ;取得秒 mov ds:msec,dl popa retgettime endp;-;调整时间,累加秒,分,时caltime proc near pusha ;调整秒 inc ds:sec cmp ds:sec,60d jb endc mov ds:sec,0h setm: ;调整分钟 inc ds:min cmp ds:min,60d jb endc mov ds:min,0h seth: ;调整小时 inc ds:hour cmp ds:hour,24d jb endc mov ds:hour,0h endc: popa retcaltime endp;-;设置时间settime proc near pusha call closesw ;关闭定时刷新 mov dh,11h mov dl,00h call movcur ;移动光标 mov dx,00h mov ah,09h ;输出提示信息,提示输出设置时间 mov dx,offset settmsg int 21h call readnt ;读取时间(hh:mm:ss);设置时间 mov ch,ds:nhour ;hour mov cl,ds:nmin ;min mov dh,ds:nsec ;second mov dl,0h ;1/100 second mov ah,2dh int 21h cmp al,00h je setsuccess mov ah,02h ;设置时间中断调用失败处理 mov dl,! int 21h setsuccess: call opensw ;打开刷新开关 popa retsettime endp;-rsetsuccess: call opensw ;打开刷新开关 popa ret;-;读取时间(从ascii码到16进制数值的转换)(hh:mm:ss)readnt proc near pusha mov ah,01h int 21h mov bx,0h ;bx存放得到的数值(16进制) loop1: cmp al,0 ;读取小时 jl endloop1 cmp al,9 jg endloop1 sub al,30h cbw xchg ax,bx mov cx,0ah mul cx xchg ax,bx add bx,ax mov ah,01h int 21h jmp loop1 ;存取小时endloop1: mov ds:nhour,bl; mov bx,0h; loop2: mov ah,01h int 21h ;bx存放得到的数值(16进制) cmp al,0 ;读取分钟 jl endloop2 cmp al,9 jg endloop2 sub al,30h cbw xchg ax,bx mov cx,0ah mul cx xchg ax,bx add bx,ax jmp loop2 ;存取分钟endloop2: mov ds:nmin,bl mov bx,0h loop3: mov ah,01h int 21h ;bx存放得到的数值(16进制) cmp al,0 ;读取秒 jl rlast cmp al,9 jg rlast sub al,30h cbw xchg ax,bx mov cx,0ah mul cx xchg ax,bx add bx,ax jmp loop3rlast: ;存取秒 mov ds:nsec,bl popa retreadnt endp;-;输出字符(dx中存放十进制数值)output proc near pusha mov ax,dx mov dx,00h mov cx,0h trans: mov bx,000ah div bx add dl,30h mov dh,0h push dx inc cx mov dx,00h cmp ax,00h jg trans cmp cx,01h jg print addzero: ;增加前导0,比如:02 mov dh,0 mov dl,0 push dx inc cx print: cmp cx,0h jle endout pop dx mov dh,0 dec cx mov ah,02h int 21h jmp print endout: popa retoutput endp ;- end start ;end assemble .end(五)结果显示: 四、总结: 1、本设计主要用到的dos、bios调用及功能 dos中断功能调用:ah功能调用参数返回参数01键盘输入并回显al = 输入字符02显示输出dl = 输出字符07键盘输入(无回显)al = 输入字符09显示字符串ds : dx = 串地址(s为串结束字符)0b检验键盘状态al = 00 有输入 = ff 无输出25设置中断向量ds : dx = 中断向量 al = 中断类型号2c取时间ch :cl = 时 :分dh :dl =秒:1/100秒2d设置时间ch :cl = 时 :分dh :dl =秒:1/100秒al =00 成功 = ff无效35取中断向量al=中断类型号es :bx = 中断向量4c带返回码结束al = 返回码bios中断功能调用;ah功能调用参数返回参数0设置显示方式al=00 4025黑白方式2设置光标位置bh = 页号dh、dl = 行、列2、心得体会 课程设计是培养学生综合运用所学的知识,发现、提出、分析和解决实际问题和锻炼能力的主要过程,是对学生实际能力的综合体现。这次微机原理课程设计历时两个星期,在这两个星期的日子里,可谓是历尽艰难,但到最后还是取得了成功,学到了很多的东西。同时不仅巩固了以前所学的知识,而且学到了很多在书本上所没有学到的知识。 通过本次课程设计使

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论