电子时钟课程设计

时间:2024.3.31

《微术》

电子时钟课程设计报告

                       姓名:田时雨 2010212443

                                2010212441

指导教师:曾素华

目录

一、实验目的和题目:... 3

二、实验要求:... 3

三、设计方案:... 3

四、实验代码:... 7

五、实验截图:... 14

六、心得体会:... 14

一、实验题目和目的:

电子钟

围绕《微机原理与接口技术》课程,运用电子技术、计算机技术及信息科学领域的基本理论和基本知识,综合多个接口芯片,结合实际应用而进行的一次综合分析设计能力的训练。学生通过本次课程设计,进一步掌握硬件接口技术及其应用编程方法,使学生系统科学地受到分析问题和解决问题的训练,提高学生综合分析设计能力、独立思考与团结协助能力。

二、实验要求:

由8254定时,8255控制数码管显示时间,小键盘控制计时:       

         1键(清除)         显示初值 00、00

         2键(启动)         电子钟计时

         3键(停止)         电子钟停止计时

         4键(终止程序)     熄灭数码管,程序退出

         5键(设置初始值)   设置分、秒值。同时具有判断错误的能力,若输入有错,则显示错误提示,此时按5可从新输入预置值。

6、键时间位加1功能的设置

三、设计方案:

设计原理:用8254的计数器0来实现秒计数,信号源用实验箱上的10KHZ(当然选择其它信号源也可以,不过到时候初值会不一样),使每一秒钟就向中断端子IRQ发出一次中断请求,进一步与PC机中的某个中断联系起来。当中断发生以后,PC机就会转去执行中断服务程序,把计数的秒编码成具体的时间,把数据通过8255显示在数码管上。那个按键也是通过8255对键盘进行软件扫描,识别出哪个按键按下后,再去执行相应的按键功能。

设计接线图:

程序流程图:

主程序

                    

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键)来控制时间的增加。

6、键时间位加1功能的设置

这里,我们再引进一个标志位:按键标志KEYMARK。其设置为逻辑值,初始设置为0,表示允许响应此次按键,并在响应过后,将其置1;KEMARK为1时,表示不响应此次按键。之所以要设置此标志位,是因为键盘扫描的速度非常快,假如我按下6键需要调整时间加1,我按下的时间再怎么短,计算机一定已经扫描了无数次,这样一来,我只按了一次,时间位就会响应无数次,实现了无数次的加1,从而无法实现6键的功能。

四、实验代码:

INTCSR_BYTE0   EQU 0D838AH

INTCSR_BYTE1   EQU 0D839BH

INTCSR_BYTE2   EQU 0D83AH

INTCSR_BYTE3   EQU 0D83BH

IMB4_BYTE3     EQU 0D81FH

MY8254_COUNT0 EQU 0E040H

MY8254_COUNT1 EQU 0E041H    

MY8254_COUNT2 EQU 0E042H    

MY8254_MODE    EQU 0E043H   

            

MY8255_A    EQU 0E060H      

MY8255_B    EQU 0E061H      

MY8255_C    EQU 0E062H

MY8255_MODE EQU 0E063H      

IRQ         EQU 01CCH

DATA        SEGMENT                       

CSBAK       DW     ?

IPBAK       DW     ?

MKBAK       DB     ?

ADJUST      DB    00H    ;调整位标志

FLASH       DB    00H    ;闪烁标志位

PAUSE       DB    0B      ;暂停标志位

KEYMARK     DB    0B    ;按键标志位

INKEY       DB    00H     ;按键

SECONDA     DB    00H    ;秒个位        

SECONDB     DB    00H    ;秒十位

MINUTEA     DB    00H ;分个位

MINUTEB     DB    00H ;分十位

LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;数码管0-9的编码

DATA       ENDS

CODE       SEGMENT                          

ASSUME CS:CODE,DS:DATA

START:                             

        CLI                                

       MOV AX,DATA                        

       MOV DS,AX                           

       MOV DX,INTCSR_BYTE0                

       MOV AL,00H

       OUT DX,AL

       MOV DX,INTCSR_BYTE1

       MOV AL,1FH

       OUT DX,AL

       MOV DX,INTCSR_BYTE2

       MOV AL,3FH

       OUT DX,AL

       MOV DX,INTCSR_BYTE3

       MOV AL,00H

       OUT DX,AL

         

       MOV AX,0000H                   

       MOV ES,AX

       MOV DI,01CCH     ;保存系统中断矢量                 

       MOV AX,ES:[DI]

       MOV IPBAK,AX                    

       MOV AX,OFFSET MYINT           

       CLD                              

         STOSW                              

       MOV AX,ES:[DI]        

       MOV CSBAK,AX                  

       MOV AX,SEG MYINT ;设置中断矢量

         STOSW                             

       IN AL,0A1H

       MOV MKBAK,AL

       AND AL,0F7H                                 

       OUT 0A1H,AL      

       STI       ;开中断  

       MOV DX,MY8254_MODE    ;8254初始化        

       MOV AL,15H    ; 00010101:计数器0,只读低八位,方式2分频器,十进制

       OUT DX,AL            

       MOV DX,MY8254_COUNT0         

       MOV AL,0                         

       OUT DX,AL

       MOV DX,MY8255_MODE ;8255初始化

        MOV AL,81H       ;10000001:A口:方式0,输出,B口:方式 0 ,

;输出,C口:低四位输入,高四位输出     

       OUT DX,AL

   

A1:     NOP           ;等待               

        MOV CX,32H    

A2:     MOV DX, MY8255_B                

        MOV AX,DATA

        MOV DS,AX

        MOV BX,OFFSET LED      

        MOV AL,SECONDA                 

        XLAT LED   

        CMP ADJUST,01H ;是否调整秒的个位

        JNE DIS_SECONDA

        CMP FLASH,0FFH ;是否闪烁

        JNE DIS_SECONDA

        AND AL,00H       ;熄灭数码管(若FLASH=1)        

DIS_SECONDA:              ;显示秒的个位

        OUT DX, AL

        MOV DX,MY8255_A                

        MOV AL,0111B                      

        OUT DX,AL

        CALL KEYCTR      ;调用按键处理程序

        CALL DELAY        ;调用延迟程序

        MOV DX,MY8255_B  

        MOV AX,DATA

        MOV DS,AX

        MOV BX,OFFSET LED

        MOV AL,SECONDB

        XLAT LED  

        CMP ADJUST,02H   ;是否调整秒的十位

        JNE DIS_SECONDB

        CMP FLASH,0FFH

        JNE DIS_SECONDB

        AND AL,00H

DIS_SECONDB:              ;显示秒的十位

        OUT DX,AL                          

        MOV DX,MY8255_A      

        MOV AL,1011B                     

        OUT DX,AL

        CALL KEYCTR

        CALL DELAY

      

        MOV DX,MY8255_B   

        MOV AX,DATA

        MOV DS,AX

        MOV BX,OFFSET LED

        MOV AL,MINUTEA

        XLAT LED

        CMP ADJUST,03H   ;是否调整分的个位

        JNE DIS_MINUTEA

        CMP FLASH,0FFH

        JNE DIS_MINUTEA

        AND AL,00H

DIS_MINUTEA:              ;显示分的个位

        ADD AL,80H       ;显示XX.XX中的点“.”

        OUT DX,AL                          

        MOV DX,MY8255_A      

        MOV AL,1101B                      

        OUT DX,AL

        CALL KEYCTR

        CALL   DELAY                       

        MOV    DX,MY8255_B  

        MOV    AX,DATA

        MOV    DS,AX

        MOV    BX , OFFSET LED

        MOV    AL, MINUTEB

        XLAT    LED

        CMP ADJUST,04H ;是否调整分的十位

        JNE DIS_MINUTEB

        CMP FLASH,0FFH

        JNE DIS_MINUTEB

        AND AL,00H

DIS_MINUTEB:               ;显示分的十位

        OUT DX,AL                           

        MOV DX,MY8255_A      

        MOV AL , 1110B

        OUT DX,AL

        CALL KEYCTR

        CALL DELAY

        LOOP SK1

        JMP SK2

SK1:    JMP A2

SK2:    JMP A1

MYINT: PUSH DS                          

       PUSH AX

       PUSH DX

       MOV       DX,IMB4_BYTE3

       IN        AL,DX

       MOV       DX,INTCSR_BYTE2

       MOV       AL,3FH

       OUT       DX,AL

      ;清8259中断标志

       MOV       AL,63H            ;根据中断号修改

       OUT       0A0H,AL

       MOV       AL,62H

       OUT       20H,AL

       MOV       AX,DATA

       MOV       DS,AX

       NOT   FLASH                ;中断处理程序

       MOV KEYMARK,0B

       CMP PAUSE,0B

       JNE L1

       INC SECONDA

       CMP SECONDA,0AH

       JC L1

       MOV SECONDA,00H

       INC SECONDB

       CMP SECONDB,06H

       JC L1

       MOV SECONDB,00H

       INC MINUTEA

       CMP MINUTEA,0AH

       JC L1

       INC MINUTEB

       MOV MINUTEA,00H

       CMP MINUTEB,06H

       JC L1

       MOV MINUTEB,00H

L1:    POP DS

       POP AX

       POP DX

       IRET

KEYCTR PROC NEAR

        MOV INKEY,AL

        MOV DX,MY8255_C

        IN   AL,DX    

        AND AL,03H    ;高六位清零

        CMP AL,10B    ;是否按下Y1行

        JNE INY2

        ADD INKEY,00H

        JMP JUDGKEY     

INY2:   CMP AL,01B    ;是否按下Y2行

        JNE   SKIP      

        ADD   INKEY,10000B

JUDGKEY:

        CMP INKEY,01110B ;是否按下1键

        JNE KEY2

        AND SECONDA,00H ;时间位清零

        AND SECONDB,00H

        AND MINUTEA,00H

        AND MINUTEB,00H

SKIP:   JMP BACK      

KEY2: CMP INKEY,01101B ;是否按下2键    

        JNE KEY3

        AND PAUSE,0B    ;启动计时         

        JMP BACK    

KEY3: CMP INKEY,01011B ;是否按下3键    

        JNE KEY4

        MOV PAUSE,1B   ;暂停计时          

        JMP BACK

KEY4: CMP INKEY,00111B   ;是否按下4键

        JNE KEY5

        MOV DX,MY8255_A

        MOV AL,0FFH    ;熄灭数码管,程序退出

        OUT DX,AL

        CALL DELAY

        MOV AX,4C00H                              

        INT 21H        

        JMP BACK

KEY5: CMP INKEY,11110B   ;是否按下5键

        JNE KEY6

        CMP KEYMARK,0B  

        JNE KEY6          

        MOV KEYMARK,1B

        MOV PAUSE,1B

        CMP ADJUST,04H     ;是否已调整完分的十位

        JE TL             

        INC ADJUST

        JMP BACK

TL:     AND ADJUST,00H

        JMP BACK

KEY6: CMP INKEY,11101B ;是否按下6键

        JNE BACK

        CMP KEYMARK,0B

        JNE BACK

        MOV KEYMARK,1B

        CMP ADJUST,01H ;是否调整秒的个位

        JNE AD1

        INC SECONDA    ;秒的个位加1

        CALL OUTCLEAR ;判断溢出

        JMP BACK

AD1:    CMP ADJUST,02H ;是否调整秒的十位

        JNE AD2

        INC SECONDB

        CALL OUTCLEAR

        JMP BACK

AD2:    CMP ADJUST,03H ;是否调整分的个位

        JNE AD3

        INC MINUTEA

         CALL OUTCLEAR

        JMP BACK

AD3:    CMP ADJUST,04H ;是否调整分的十位

        JNE BACK

        INC MINUTEB

        CALL OUTCLEAR      

BACK: RET

KEYCTR ENDP

OUTCLEAR PROC NEAR ;溢出清零程序

      CMP SECONDA,0AH

      JC Q1

      AND SECONDA,00H

Q1: CMP SECONDB,06H

      JC Q2

      AND SECONDB,00H

Q2: CMP MINUTEA,0AH

      JC Q3

      AND MINUTEA,00H

Q3: CMP MINUTEB,06H

      JC Q4

      AND MINUTEB,00H

Q4: RET

OUTCLEAR ENDP                          

DELAY: PUSH   CX           ;延迟程序               

       MOV    CX,1111H

DXMS: LOOP   DXMS

       POP    CX

       RET

CODE   ENDS

END    START

五、实验截图:

六、心得体会:

本次实验要求我们运用所学的微机接口知识做一个简单的电子钟,要求该电子钟能够由8254进行定时,由数码管显示时间,根据不同的按键,达到不同的功能。实验要求我们实现秒计时,即用试验箱上面的10KHZ信号(每一秒钟向中断IRQ发出一次中断请求),数据通过8255显示在数码管上。经过初步的分析,以及商讨结果,我们画出了基本电路连接图,根据该图来实现电子钟功能。编辑好代码之后,我们将进行初步检测,结果失败,但是我们仍是坚持不懈,最终皇天不负有心人,终于经过多次探讨和商量终于做了出来。

通过这次实验,我们认识到仅仅只学会理论的东西是不够的,应该学会如何将理论转化为实际。通过这次实验我们更近一步了解了实验的硬件环境,并且学会了怎样利用它来实现功能。

更多相关推荐:
数字电子时钟课程设计报告

数字电子钟课程设计报告题目数字电子钟的设计与仿真专业机械工程前言加入世贸组织以后中国会面临激烈的竞争这种竞争将是一场科技实力管理水平和人才素质的较量风险和机遇共存同时电子产品的研发日新月异不仅是在通信技术方面数...

51单片机电子时钟课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20xx级电工2班学号20xx401020xx2姓名王贞指导教师邹云峰提交日期20xx...

单片机电子时钟课程设计报告

基于单片机电子时钟的设计绪论单片机自20世纪70年代问世以来以其极高的性能价格比受到人们的重视和关注应用很广发展很快单片机体积小重量轻抗干扰能力强环境要求不高价格低廉可靠性高灵活性好开发较为容易由于具有上述优点...

数字电子时钟课程设计报告-4

数字电子钟课程设计报告题目数字电子钟的设计与仿真专业通信工程前言加入世贸组织以后中国会面临激烈的竞争这种竞争将是一场科技实力管理水平和人才素质的较量风险和机遇共存同时电子产品的研发日新月异不仅是在通信技术方面数...

数字电子时钟课程设计报告

华北科技学院课程设计数字时钟课程设计报告目录一设计的目的任务和要求2二设计的方案的选择与论证4三电路的设计5a设计内容5b数字时钟结构的设计5c设计步骤61时钟脉冲发生器的设计62时分秒计数电路的设计83计数器...

数字电子钟课程设计报告

目录摘要3关键词3一设计任务与要求4二方案设计与论证4方案一4方案二5三硬件单元电路设计与参数计算51电源电路52按键电路53时钟电路54驱动电路55LED显示电路56单片机电路6四软件设计与流程图10五总原电...

数字电子钟课程设计报告-数电

华东交通大学理工学院课程设计报告书所属课程名称数字电子技术课程设计题目数字电子钟课程设计分院电信分院专业班级10电信2班学号20xx0210410201学生姓名陈晓娟指导教师徐涢基2012年12月18日目录第1...

单片机电子时钟课程设计报告

课程设计报告20xx20xx学年第二学期题目系别电子与电气工程系专业电子信息工程班级学号姓名指导教师完成时间20xx年6月13日评定成绩目录一二三四五六设计的目的3设计的内容与要求3设计方案3硬件软件设计5设计...

LCD电子钟课程设计

课程设计论文课程名称题目名称微机原理与单片机综合设计与实践LCD显示的电子钟20xx年01月10日广东工业大学华立学院课程设计论文任务书一课程设计论文的内容以89C52单片机控制的时钟在LCD显示器上显示当前的...

[EDA]电子时钟设计及报告

基于VHDL的多功能数字钟设计报告题目多功能数字钟姓名程胜归学号0304811指导老师廖宇设计时间20xx78一VHDL的发展硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言利用这种语言数字电路系统...

电子时钟课程设计报告

目录1前言22题目要求与方案论证221题目要求222设计目的223方案论证3231思路3232程序设计原理3233用到的DOS系统功能4234用到的BIOS系统功能53方案设计631流程图632程序代码设计83...

数字电子时钟课程设计报告-3

目录1设计任务及要求22系统总体设计方案33器件选择44六十进制秒计数器设计41所需器件符号及说明842原理图介绍85六十进制分计数器设计51所需器件符号及说明952原理图介绍96二十四进制计数器设计61所需器...

电子时钟课程设计报告(29篇)