电子时钟课程设计Word文件下载.docx
- 文档编号:16447245
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:17
- 大小:1.09MB
电子时钟课程设计Word文件下载.docx
《电子时钟课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子时钟课程设计Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
主程序
1.模块功能
(1)计时功能:
用到的8254的功能只是相当于一个分频计,输入一定频率的脉冲信号使每隔一秒就会在OUT0端产生0到1的跃变,作为中断IRQ的请求信号。
由于秒、分的进制形式不同,可通过中断程序控制,由此完成计时功能。
(2)显示功能:
可以用四位二进制码分别对应表示X4X3X2X1的逻辑值(1--高电平,0--低电平),实现时钟的显示功能。
具体操作:
首先将秒的个位数据通过8255的B端口送给数码管,同时将二进制码“0111”通过8255的A端口送给小键盘X4X3X2X1,这样通过计算机的扫描后,就会在数码管4上显示秒的个位值;
接着将秒的十位数据送给数码管,同时将二进制码“1011”送给小键盘X4X3X2X1,这样就会在数码管3上显示相应的数值;
同样的道理,分别将分的个位、十位送给数码管,“1101”、“1110”送给小键盘X4X3X2X1,就会依次在数码管2、1上显示分的个位、十位数值。
特别注意分秒的间隔点,由于数码管共阴极,将数码二进制最高位置1,其他为置0即可。
(3)按键功能:
由于X1,X2,X3,X4低电平显示相应的数码管,利用读回的Y1,Y2逻辑值辨别究竟按下哪个键,并通过相应的编程来完成不同键的按键功能。
1、键清除功能的设置:
在判别了按键的逻辑值为01110后,将显示的每一个位赋0的编码,这样在数码管显示的就是00.00,便达到了清除功能的目的。
2、键启动、3键停止计时功能的设置:
在进行2键和3键功能设置之前,我们可以定义一个暂停标志位:
PAUSE,它用标准的逻辑值(0、1)来表示,假如PAUSE=0,在进行计时设置的时候,让其自动加1,依次显示时间的各位;
假如PAUSE=1,我们就将其返回,停止加1,即暂停计时。
接着,假如我们判别的是2键被按下,就令PAUSE=0,让计数器计时,自动加1;
假如我们按下的是3键,就令PAUSE=1,让计数器暂停计时,即停止加1。
4、键终止程序功能的设置:
从上面的分析,我们已经知道,只有同时将对应键盘X列的低电平送到相应的数码管才会使得数码管亮,所以我们在判别了是4键被按下后,只要将键盘对应的二进制码全部赋高电平,并送到数码管,同时结束程序,就可以实现熄灭数码管、退出程序的功能。
5、键重置初始值功能的设置:
在这里我们设置了两个标志位:
调整位标志ADJUST和闪烁标志FLASH。
它们的具体设置如下:
ADJUST初始设置为00H,表示非调整状态,01H表示调整秒的个位,02H表示调整秒的十位,03H表示调整分的个位,04H表示调整分的十位。
FLASH设置为逻辑值,初始设置为00H,表示非闪烁状态,0FFH表示闪烁,其闪烁功能实现的过程为:
假如FLASH=0FFH,则将00H送给数码管,让数码管不显示。
然后,在中断计时程序里面,加入FLASH取反语句,由于计时程序每秒加1循环一次,这样FLASH也实现了每秒改变逻辑值一次。
也就是说,数码管闪烁的周期是1秒。
当然,闪烁标志位只是在有对应位需要调整的时候才用的着。
要实现5键设置初始时间的功能,我们就必须增加一个键(6键)来控制时间的增加。
这里,我们再引进一个标志位:
按键标志KEYMARK。
其设置为逻辑值,初始设置为0,表示允许响应此次按键,并在响应过后,将其置1;
KEMARK为1时,表示不响应此次按键。
之所以要设置此标志位,是因为键盘扫描的速度非常快,假如我按下6键需要调整时间加1,我按下的时间再怎么短,计算机一定已经扫描了无数次,这样一来,我只按了一次,时间位就会响应无数次,实现了无数次的加1,从而无法实现6键的功能。
INTCSR_BYTE0EQU0D838AH
INTCSR_BYTE1EQU0D839BH
INTCSR_BYTE2EQU0D83AH
INTCSR_BYTE3EQU0D83BH
IMB4_BYTE3EQU0D81FH
MY8254_COUNT0EQU0E040H
MY8254_COUNT1EQU0E041H
MY8254_COUNT2EQU0E042H
MY8254_MODEEQU0E043H
MY8255_AEQU0E060H
MY8255_BEQU0E061H
MY8255_CEQU0E062H
MY8255_MODEEQU0E063H
IRQEQU01CCH
DATASEGMENT
CSBAKDW?
IPBAKDW?
MKBAKDB?
ADJUSTDB00H;
调整位标志
FLASHDB00H;
闪烁标志位
PAUSEDB0B;
暂停标志位
KEYMARKDB0B;
按键标志位
INKEYDB00H;
按键
SECONDADB00H;
秒个位
SECONDBDB00H;
秒十位
MINUTEADB00H;
分个位
MINUTEBDB00H;
分十位
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;
数码管0-9的编码
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
CLI
MOVAX,DATA
MOVDS,AX
MOVDX,INTCSR_BYTE0
MOVAL,00H
OUTDX,AL
MOVDX,INTCSR_BYTE1
MOVAL,1FH
MOVDX,INTCSR_BYTE2
MOVAL,3FH
MOVDX,INTCSR_BYTE3
MOVAX,0000H
MOVES,AX
MOVDI,01CCH;
保存系统中断矢量
MOVAX,ES:
[DI]
MOVIPBAK,AX
MOVAX,OFFSETMYINT
CLD
STOSW
[DI]
MOVCSBAK,AX
MOVAX,SEGMYINT;
设置中断矢量
INAL,0A1H
MOVMKBAK,AL
ANDAL,0F7H
OUT0A1H,AL
STI;
开中断
MOVDX,MY8254_MODE;
8254初始化
MOVAL,15H;
00010101:
计数器0,只读低八位,方式2分频器,十进制
OUTDX,AL
MOVDX,MY8254_COUNT0
MOVAL,0
MOVDX,MY8255_MODE;
8255初始化
MOVAL,81H;
10000001:
A口:
方式0,输出,B口:
方式0,
;
输出,C口:
低四位输入,高四位输出
A1:
NOP;
等待
MOVCX,32H
A2:
MOVDX,MY8255_B
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETLED
MOVAL,SECONDA
XLATLED
CMPADJUST,01H;
是否调整秒的个位
JNEDIS_SECONDA
CMPFLASH,0FFH;
是否闪烁
ANDAL,00H;
熄灭数码管(若FLASH=1)
DIS_SECONDA:
;
显示秒的个位
OUTDX,AL
MOVDX,MY8255_A
MOVAL,0111B
CALLKEYCTR;
调用按键处理程序
CALLDELAY;
调用延迟程序
MOVDX,MY8255_B
MOVBX,OFFSETLED
MOVAL,SECONDB
CMPADJUST,02H;
是否调整秒的十位
JNEDIS_SECONDB
CMPFLASH,0FFH
ANDAL,00H
DIS_SECONDB:
显示秒的十位
MOVAL,1011B
CALLKEYCTR
CALLDELAY
MOVAL,MINUTEA
XLATLED
CMPADJUST,03H;
是否调整分的个位
JNEDIS_MINUTEA
DIS_MINUTEA:
显示分的个位
ADDAL,80H;
显示XX.XX中的点“.”
MOVAL,1101B
MOVBX,OFFSETLED
MOVAL,MINUTEB
CMPADJUST,04H;
是否调整分的十位
JNEDIS_MINUTEB
DIS_MINUTEB:
显示分的十位
MOVAL,1110B
CALLDELAY
LOOPSK1
JMPSK2
SK1:
JMPA2
SK2:
JMPA1
MYINT:
PUSHDS
PUSHAX
PUSHDX
MOVDX,IMB4_BYTE3
INAL,DX
清8259中断标志
MOVAL,63H;
根据中断号修改
OUT0A0H,AL
MOVAL,62H
OUT20H,AL
NOTFLASH;
中断处理程序
MOVKEYMARK,0B
CMPPAUSE,0B
JNEL1
INCSECONDA
CMPSECONDA,0AH
JCL1
MOVSECONDA,00H
INCSECONDB
CMPSECONDB,06H
MOVSECONDB,00H
INCMINUTEA
CMPMINUTEA,0AH
INCMINUTEB
MOVMINUTEA,00H
CMPMINUTEB,06H
MOVMINUTEB,00H
L1:
POPDS
POPAX
POPDX
IRET
KEYCTRPROCNEAR
MOVINKEY,AL
MOVDX,MY8255_C
INAL,DX
ANDAL,03H;
高六位清零
CMPAL,10B;
是否按下Y1行
JNEINY2
ADDINKEY,00H
JMPJUDGKEY
INY2:
CMPAL,01B;
是否按下Y2行
JNESKIP
ADDINKEY,10000B
JUDGKEY:
CMPINKEY,01110B;
是否按下1键
JNEKEY2
ANDSECONDA,00H;
时间位清零
ANDSECONDB,00H
ANDMINUTEA,00H
ANDMINUTEB,00H
SKIP:
JMPBACK
KEY2:
CMPINKEY,01101B;
是否按下2键
JNEKEY3
ANDPAUSE,0B;
启动计时
KEY3:
CMPINKEY,01011B;
是否按下3键
JNEKEY4
MOVPAUSE,1B;
暂停计时
JMPBACK
KEY4:
CMPINKEY,00111B;
是否按下4键
JNEKEY5
MOVAL,0FFH;
熄灭数码管,程序退出
MOVAX,4C00H
INT21H
KEY5:
CMPINKEY,11110B;
是否按下5键
JNEKEY6
CMPKEYMARK,0B
JNEKEY6
MOVKEYMARK,1B
MOVPAUSE,1B
是否已调整完分的十位
JETL
INCADJUST
TL:
ANDADJUST,00H
KEY6:
CMPINKEY,11101B;
是否按下6键
JNEBACK
CMPKEYMARK,0B
是否调整秒的个位
JNEAD1
INCSECONDA;
秒的个位加1
CALLOUTCLEAR;
判断溢出
AD1:
JNEAD2
CALLOUTCLEAR
AD2:
JNEAD3
AD3:
CALLOUTCLEAR
BACK:
RET
KEYCTRENDP
OUTCLEARPROCNEAR;
溢出清零程序
JCQ1
ANDSECONDA,00H
Q1:
JCQ2
Q2:
JCQ3
Q3:
JCQ4
Q4:
OUTCLEARENDP
DELAY:
PUSHCX;
延迟程序
MOVCX,1111H
DXMS:
LOOPDXMS
POPCX
CODEENDS
ENDSTART
本次实验要求我们运用所学的微机接口知识做一个简单的电子钟,要求该电子钟能够由8254进行定时,由数码管显示时间,根据不同的按键,达到不同的功能。
实验要求我们实现秒计时,即用试验箱上面的10KHZ信号(每一秒钟向中断IRQ发出一次中断请求),数据通过8255显示在数码管上。
经过初步的分析,以及商讨结果,我们画出了基本电路连接图,根据该图来实现电子钟功能。
编辑好代码之后,我们将进行初步检测,结果失败,但是我们仍是坚持不懈,最终皇天不负有心人,终于经过多次探讨和商量终于做了出来。
通过这次实验,我们认识到仅仅只学会理论的东西是不够的,应该学会如何将理论转化为实际。
通过这次实验我们更近一步了解了实验的硬件环境,并且学会了怎样利用它来实现功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 课程设计