微机原理课程设计报告(电子时钟)

1. 设计目的

培养和锻炼在学习完本门课后综合应用所学理论知识,解决实际工程设计和应用问题的能力。通过课程设计,要求熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。

掌握8255、8259、8253等芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8086微处理器完成了电子秒表系统的独立设计。同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。

2.  设计内容

    

       设计一个可任意启动/停止的电子秒表,要求用6位LED数码显示,计时单位为1/100秒。利用功能键进行启/停控制。其功能为:上电后计时器清0,当第一次(或奇数次)按下启/停键时开始计数。第2次(或偶数次)按下该键时停止计时,再一次按启/停键时清零 后重新开始计时。可用开关控制,也可用按键控制。(开关控制 ☆ )(按键控制★)

3.     设计要求

一.基本要求

1)设计可以显示1~60秒的无存储功能的秒表,最小单位为毫秒。 

2)通过键盘按键控制秒表清零、暂停、继续,退出等。其中数字0控制清零,数字1控制继续和退出 

二.提高要求: 

1)秒表可以分组存储、批量显示、倒计时等。 

2)采用图像显示,界面精美,设置报警声等 

4.      设计原理与硬件电路

一.整体设计思想

使用8253工作在方式0计数,对 1/100S计数,并讲计数值写入bl中并与100比较若不相等,则将计数值装换为10进制后送8255控制端显示,如相等则1S计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则1min计数程序加1之后并与59比较若不相等则将计数值装换为10进制后送8255控制端显示,如相等则计数程序加1之后产生溢出,跳转清零程序将计数清零,同时数码管清零。

二. 使用各芯片的作用及工作原理

1、定时器/计数器8253

用系统8253定时器提供的55ms定时单位,设计秒表定时程序。

有关系统定时方法: 

PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号, 

频率:f=1.1931816MHz。 

定时器0输出方波的频率:fout=1.1931816/65536=18.2Hz。 

输出方波的周期Tout=1/18.2=54.945ms。8253A每隔55ms引起一次中断,作为定时信号。可用55945ms作基本计时单位。 

用BIOS调用INT 1AH可以取得该定时单位。例:1秒=18.2 (计时单位)

8253的引脚图及硬件连接图如下图示:

2、 用可编程并行接口芯片8255的PA口以及PB口实现数码管输出,PC口实现按键实现数据显示输出                   

  8255 可编程外围接口芯片是 Intel 公司生产的通用并行I/O 接口芯片,它具有A、B、C 三个并行接口,并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU 和接口之间 的数据传送总是并行的,即可以同时传递8 位、16 位、32 位等。用+5V 单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255  的内部结构及引脚如图2.1所示:

图2.1 内部结构及引脚

8255 工作方式控制字和C口按位置位/ 复位控制字格式如图3-7-2 所示:

图2.2 置位/ 复位控制字格式

3.  锁存器273

    74LS273是8位数据/地址锁存器,他是一种带清除功能的8D触发器,下面介绍一下他的管脚图功能表等资料。

(1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位;

(2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)上.

74ls273管脚功能:

1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。  

4. 数据收发器245

        当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)
*DIR=“1”,信号由 A 向 B 传输;(发送)当/CE为高电平时,A、B均为高阻态。

5.  译码器74ls154

  74ls154为4—16线制译码器其引脚图如下图所示

    6.  7段数码管

      数码管要正常显示,就要来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

静态显示驱动

  静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。

动态显示驱动

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。

5程序流程图

  

6程序代码

  a1 equ 0000h

  b1 equ 0002h

  c1 equ 0004h

  ctr1 equ 0006h   ;8255各端口地址

  a2 equ  0200h    ;8253计数器0端口地址

  ctr2 equ 0206h   ;8253控制端口地址

  a3 equ 0100h

  data segment

  ; keynum db 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H

   tab   db 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H

   buf   db 0,0,0,0

   buf1  db 0,0,0,0,0,0,0,0

   buf2  db 0,0;前为第一开关次数

   buf3  db 80 dup(?)

 data ends

    

 code segment  'code'

        assume ds:data,cs:code

  start: mov ax,data

         mov ds,ax

        ;设中断入口地址设置

       mov ax,0

       mov es,ax

       mov di,08

       mov ax,offset intr_key

       cld

       stosw

       mov ax,seg intr_key

       stosw

      

        mov ax,data

        mov es,ax

       ;8255写入控制字

        mov al,10001001b   ;A口B口输出显示,C口高四位低四位输入

        mov dx,ctr1

        out dx,al

 n3:       call jishu  

       jmp n3

n2:     lea si,buf2

        mov bh,00h

        mov bl,1h[si]

       lea di,buf3

       add di,bx

       add bl,8

       mov 1h[si],bl

        lea si,buf1

       cld

       mov cx,8

       rep movsb

    n4: call dis

        jmp n4

 n5:   lea si,buf2

       mov bh,00h

        mov bl,1h[si]

       cmp bl,0

       jz n1

       lea di,buf1

       sub bl,8

       mov 1h[si],bl

       lea si,buf3

       add si,bx

        cld

       mov cx,8

       rep movsb

n6:    call dis

       jmp n6

n1:     call qinlin

        jmp n1   

       ;jmp start

      

jishu  proc near  ;计数子程序

        lea si,buf

        mov bl,[si] 

        cmp bl,100

        jnz s6

    s1: mov bl,0

        mov [si],bl

       mov ah,1h[si]

        cmp ah,59

       jz s2

       inc ah

       mov 1h[si],ah

       jmp s6

    s2:  mov ah,0

         mov 1h[si],ah

        mov ah,2h[si]

       

         inc ah

         mov 2h[si],ah

        jmp s6

    

      s6:call chu

        mov cx,3

      s5:call dis

         loop s5

       call delay1s

        inc byte ptr[si]

       ret

jishu endp

chu  proc  ;rukou al ;数处理子程序

       push si

       push bx

       mov bl,4

       lea di,buf1

       lea si,buf

   next:lodsb

       mov ah,00

       mov cl,10

       div cl

       xchg ah,al

      stosb

      mov al,ah

      stosb

      dec bl

      jnz next

      pop bx

      pop si

      ret

    chu endp           

 dis proc  near               ;显示buf1中的值

       push bx

       push cx

        lea bx,tab

       lea di,buf1

        mov cx,8

        mov ah,7Fh

 loop1: mov al,[di]

        xlat            ;换码

        mov dx,a1

        out dx,al

        mov dx,b1

        mov al,ah

        out dx,al

       mov bh,1

        call delay

       call qp

       lea bx,tab

        ror ah,1

        inc di

        loop loop1

       pop cx

       pop bx

       ret

dis endp

delay1s proc near    ;8253延时子程序

      push dx

      push ax

      mov dx,ctr2  ;8253 控制

      mov al,00110000b 

      out dx,al         ;8253计数器0控制字 方式0 out端作为中断请求信号

      mov dx,a2

      mov al,01h

      out dx,al

      mov al,00h

      out dx,al

      mov dx,a3

  M1: in al,dx

      test al,01h

      jz  M1

      pop ax

      pop dx

      ret

  delay1s endp

 

qp proc near  ;清频子程序

    mov al,0ffh

    mov dx,b1

    out dx,al

    ret

 qp endp

 delay   PROC    NEAR ;内部延时之程序

        PUSH    bx      

        PUSH    CX

wait0:  MOV     CX,06h 

wait1:  LOOP    wait1      

        DEC     bh

        JNZ     wait0

        POP     CX

       POP     bx

       RET

delay   ENDP

intr_key proc near  ;中断服务子程序

         call key   

         test al,2h  

        jz n1

        test al,4h

        jz n5

        lea di,buf2

        mov bh,[di]

        inc bh

        mov [di],bh

        test bh,1h

        jnz n2

        jmp n3

         iret

    intr_key  endp

      

  qinlin proc     ;键盘清零子程序

         mov ax,0           

         lea di,buf

         mov cx,14

        cld

        rep stosb

        call dis

    qinlin endp

 key proc        ;读取键盘程序

     mov dx,c1

     in al,dx

     ret

     key endp

     

    code ends

    end start

 7.程序及硬件系统调试情况

  按下暂停键实现暂停功能

继续计数后按下清零键实现清零功能

8.设计心得

 经过这次课程设计,我觉得我有了很大的收获,:

1.我大大地锻炼了自己搞科研的能力,作为我们大学生,尤其是工科的大学生,对于科研能力,能够自主开发课题,项目有着很高的要求,而我们很多大学生动手研发的能力还不是很强。而通过这次课程设计,使自己的研发能力有了很大堤提高。

2.我对于工科设计的严谨性,仔细性有了更深地体会。我们本次设计的秒表仅仅是工科设计中非常简单的一个,思想并不是非常复杂,手头也有一定的资料,但是我们在研发,调试过程中还是出现了一些错误。简单的一些程序好检查,但是如果说是以后要设计的一些大型程序,出现故障就不是那么容易检查了。这就要求我们在以后的工程设计当中要更为细致仔细。

3我的专业知识得到了很好的巩固,对于本专业的一些问题有了更深的思考。原来有很多知识只是死学课本,而并没有与实际相结合,而这次课程设计使我的专业知识与实际有了很好的契合。

4.在程序设计中不能够想当然,许多程序,功能在脑子中想得很好,但是将其转变城实际程序就会出现许多问题。如何由脑子里的构想转变成实际的程序,这是我以后需要提高的一点。

5.掌握了一些检查与判断错误的经验与方法,对今后的专业学习与设计有着深刻的影响。

6.对专业设计的许多流程、原则、注意事项以及撰写专业报告的有关事项有了一定的了解。

7.学到了书本上没有的知识,掌握了一些程序设计的技巧,对以后的学习与设计有深远影响。

总之,经过这次课程设计,我对今后的专业学习所要注意的事项有了更深刻地了解,这对我以后的学习必将产生深远的影响。

9.参考文献

   [1] 顾晖等。微机原理与接口技术-基于8086和Proteus仿真[M].电子工业出版社陈继红等. 微机原理及应用[M].高等教育出版社,2010

[2]戴梅萼等.微型计算机技术及应用[M].清华大学

[3]沈美明等.IBM-PC汇编语言程序设计 [M]. 清华大学出版社

[4]彭虎等. 微机原理与接口技术(第2版) [M].电子工业出版社,2008

[5] 张弥左,王兆月,邢立军等.微型计算机接口技术.北京:机械工业出版社

   

      

相关推荐