8086数字电子钟的设计 附程序代码文档格式.docx

上传人:b****5 文档编号:20500694 上传时间:2023-01-23 格式:DOCX 页数:21 大小:464.88KB
下载 相关 举报
8086数字电子钟的设计 附程序代码文档格式.docx_第1页
第1页 / 共21页
8086数字电子钟的设计 附程序代码文档格式.docx_第2页
第2页 / 共21页
8086数字电子钟的设计 附程序代码文档格式.docx_第3页
第3页 / 共21页
8086数字电子钟的设计 附程序代码文档格式.docx_第4页
第4页 / 共21页
8086数字电子钟的设计 附程序代码文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

8086数字电子钟的设计 附程序代码文档格式.docx

《8086数字电子钟的设计 附程序代码文档格式.docx》由会员分享,可在线阅读,更多相关《8086数字电子钟的设计 附程序代码文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

8086数字电子钟的设计 附程序代码文档格式.docx

图1.1七段数码管

图1.2伟福实验台六位LED的电路图及寻址空间

实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

将KEY/LEDCS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。

实验箱提供了一个6×

4的小键盘,将KEY/LEDCS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。

向列扫描码地址逐列输入低电平,然后从行码地址读回。

如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。

这样就可以通过输出的列码和读取的行码来判断按下的是什么键。

在判断有键按下后,要有一定的时延,防止键盘抖动。

2.硬件连接

图2.1伟福实验台内部总线连接

8253用定时器/计数器1,8253片选接CS1,地址为09000H,8253时钟源CLK1接分频电路的F/64输出,频器的Fin接4MHz时钟,8253的GATE1接VCC;

8259中断INT0接8253的OUT1,片选接CS2,地址为0A000H。

显示电路的KEY/LEDCS接CS0,地址为08000H。

如下图:

D.运行界面

三、课程设计总结或结论

四、参考文献

[1]王保义,张少敏接口与通信.北京-中国电力出版社,2008

[2]沈美明,温冬婵IBM-PC汇编语言程序设计.清华大学出版社,第二版.2002

[3]陆红伟微机原理实验与课程设计指导书.中国电力出版社,2006.8

附录(设计流程图、程序等)

CONTROLEQU09003H

COUNT1EQU09001H

IN_KEYEQU08001H;

键盘读入口

OUTBITEQU08002H;

位控制口

OUTSEGEQU08004H;

段控制口

ICW1EQU00010011B;

单片8259,上升沿中断,要写ICW4

ICW2EQU00100000B;

中断号为20H

ICW4EQU00000001B;

工作在8086/88方式

OCW1EQU11111110B;

只响应INT0中断

CS8259AEQU0A000H;

8259地址

CS8259BEQU0A001H

DATASEGMENT

CNTDB0;

闹铃显示

RHOURDB1

RMINUTEDB0

HOURDB0

MINUTEDB0

SECONDDB0

NUMDB0;

判断闹铃

LEDBUFDB6DUP(?

);

显示缓冲

RINGBUFDB6DUP(?

SETBUFDB6DUP(?

LEDMAP:

;

八段管显示码

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

KEYTABLE:

;

键码定义

DB16H,15H,14H,0FFH

DB13H,12H,11H,10H

DB0DH,0CH,0BH,0AH

DB0EH,03H,06H,09H

DB0FH,02H,05H,08H

DB00H,01H,04H,07H

SET:

DB6DH,79H,07H,01H,00H,00H;

字符显示SET

BELL:

DB7FH,79H,38H,38H,00H,00H;

字符显示BELL

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

DELAYPROCNEAR

PUSHAX;

延时子程序

PUSHCX

MOVAL,0

MOVCX,AX

LOOP$

POPCX

POPAX

RET

DELAYENDP

DISPLAYLEDPROCNEAR

MOVCL,6;

共6个八段管

MOVAH,00100000B;

从左边开始显示

DLOOP:

MOVDX,OUTBIT

MOVAL,0

OUTDX,AL;

关所有八段管

MOVAL,[BX]

MOVDX,OUTSEG

OUTDX,AL

MOVDX,OUTBIT

MOVAL,AH

OUTDX,AL;

显示一位八段管

PUSHAX

MOVAH,01H

CALLDELAY

SHRAH,1

INCBX

DECCL

JNZDLOOP

OUTDX,AL;

DISPLAYLEDENDP

TESTKEYPROCNEAR

输出线置为0

MOVDX,IN_KEY

INAL,DX;

读入键状态

NOTAL

ANDAL,0FH;

高四位不用

TESTKEYENDP

GETKEYPROCNEAR

MOVCH,00100000B

MOVCL,6

KLOOP:

MOVAL,CH;

找出键所在列

OUTDX,AL

SHRCH,1

INAL,DX

ANDAL,0FH

JNEGOON_;

该列有键入

JNZKLOOP

MOVCL,0FFH;

没有键按下,返回0FFH

JMPEXIT1

GOON_:

SHLCL,2;

键值=列*4+行

MOVCH,4

LOOPC:

TESTAL,1

JNZEXIT1

SHRAL,1

INCCL

DECCH

JNZLOOPC

EXIT1:

MOVCH,0

MOVBX,OFFSETKEYTABLE

ADDBX,CX

MOVAL,[BX];

取出键码

MOVBL,AL

WAITRELEASE:

等键释放

MOVAH,10

CALLTESTKEY

JNEWAITRELEASE

MOVAL,BL

GETKEYENDP

IENTERPROCNEAR

PUSHDX

MOVNUM,0

INCSECOND

MOVAL,SECOND

CMPAL,60

JNEJ0

MOVSECOND,0

INCMINUTE

MOVAL,MINUTE

MOVMINUTE,0

INCHOUR

MOVAL,HOUR

CMPAL,24

MOVHOUR,0

J0:

MOVAL,HOUR

CMPAL,RHOUR

JNEJ1

INCNUM

J1:

MOVAL,MINUTE

CMPAL,RMINUTE

JNEJ2

J2:

CMPNUM,2

JNEEXIT

MOVCNT,0EH

L33:

MOVDX,0D000H

OUTDX,AL

MOVBX,OFFSETBELL

CALLDISPLAYLED

DECCNT

JNEL33

EXIT:

MOVDX,CS8259A

MOVAL,20H;

中断服务程序结束指令

POPDX

IRET

IENTERENDP

IINITPROC

MOVAL,ICW1

MOVDX,CS8259B

MOVAL,ICW2

MOVAL,ICW4

MOVAL,OCW1

IINITENDP

STARTPROCNEAR

MOVAX,DATA

MOVDS,AX

MOVNUM,0

MOVLEDBUF,03FH;

显示00.00.00

MOVLEDBUF+1,03FH

MOVLEDBUF+2,03FH

MOVLEDBUF+3,03FH

MOVLEDBUF+4,03FH

MOVLEDBUF+5,03FH

CLI;

关中断

MOVAX,0

MOVAL,76H;

01110110B;

计数器1,16位,方式3,二进制

MOVDX,CONTROL

MOVAX,65500

MOVDX,COUNT1

计数器低字节

计数器高字节

MOVBX,4*ICW2;

中断号

MOVAX,CODE

SHLAX,4;

*16

ADDAX,OFFSETIENTER;

中断入口地址(段地址为0)

MOV[BX],AX

INCBX

INCBX

MOV[BX],AX;

代码段地址为0

CALLIINIT

STI;

开中断

LOOP2:

MOVAH,0

MOVCL,10

DIVCL

MOVCH,AH

MOVBX,OFFSETLEDMAP

ADDBX,AX

MOVLEDBUF,AL

MOVAL,CH

ORAL,80H

MOVLEDBUF+1,AL

MOVLEDBUF+2,AL

ORAL,80H

MOVLEDBUF+3,AL

JMPL3

LOOP1:

JMPLOOP2

L3:

MOVLEDBUF+4,AL

MOVLEDBUF+5,AL

MOVBX,OFFSETLEDBUF

D0:

MOVBX,OFFSETLEDBUF

CALLDISPLAYLED;

显示

CALLTESTKEY;

有键入?

JELOOP1;

无键入,继续显示

CALLGETKEY;

读入键码

显示键码

MOVAH,0

CMPAL,0AH

JESET0

CMPAL,0BH

JEBELL01

CMPAL,0CH

JESTOP1

CMPAL,0DH

JECLEAR1

JMPD0

STOP1:

CLI

STOP2:

JESTOP2

CALLGETKEY

CMPAL,0CH

JNESTOP2

STI

CLEAR1:

MOVHOUR,0

MOVMINUTE,0

MOVSECOND,0

SET0:

MOVBX,OFFSETSET

JESET0

MOVSETBUF[0],AL

MOVBX,OFFSETLEDMAP

ADDBX,AX

MOVAL,[BX]

MOVLEDBUF,AL

SET1:

MOVBX,OFFSETLEDBUF

CALLDISPLAYLED

CALLTESTKEY

JESET1

CALLGETKEY

ANDAL,0FH

MOVAH,0

MOVSETBUF[1],AL

MOVLEDBUF+1,AL

JMPSET2

BELL01:

JMPBELL02

SET2:

JESET2

MOVSETBUF[2],AL

MOVLEDBUF+2,AL

SET3:

JESET3

MOVSETBUF[3],AL

MOVLEDBUF+3,AL

JMPSET6

BELL02:

JMPBELL03

SET6:

JESET6

CMPAL,0AH

JETIMESET

JMPD0

TIMESET:

MOVAL,SETBUF[0]

MOVCL,10D

MULCL

MOVBL,SETBUF[1]

ADDAL,BL

MOVHOUR,AL

CMPHOUR,24

JLLP1

MOVHOUR,0

LP1:

MOVAL,SETBUF[2]

MOVBL,SETBUF[3]

MOVMINUTE,AL

CMPMINUTE,60

JLLP2

MOVMINUTE,0

LP2:

MOVSECOND,0

BELL03:

MOVBX,OFFSETBELL

CALLDISPLAYLED;

CALLTESTKEY;

JEBELL03;

CALLGETKEY;

ANDAL,0FH;

MOVRINGBUF[0],AL

BELL1:

JEBELL1;

MOVRINGBUF[1],AL

BELL2:

JEBELL2;

MOVRINGBUF[2],AL

BELL3:

JEBELL3;

MOVRINGBUF[3],AL

BELL4:

JEBELL4

CMPAL,0BH

JEBELLSET

BELLSET:

MOVNUM,0

MOVAL,RINGBUF[0]

MOVBL,RINGBUF[1]

MOVRHOUR,AL

CMPRHOUR,24

JLLP3

MOVRHOUR,0

LP3:

MOVAL,RINGBUF[2]

MOVBL,RINGBUF[3]

MOVRMINUTE,AL

CMPRMINUTE,60

JLLP4

MOVRMINUTE,0

LP4:

STARTENDP

CODEENDS

ENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1