找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3272|回复: 0
打印 上一主题 下一主题
收起左侧

利用伟福LAB6000,设计8086数字电子钟 附电路和程序

[复制链接]
跳转到指定楼层
楼主
ID:563472 发表于 2019-6-16 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 综合运用学过的相关软、硬件知识,利用伟福LAB6000实验设备,设计具有实用功能的电子钟,实现电子时钟的准确运行、校时等功能。
2. 熟悉伟福LAB6000的功能,掌握数码管设计和键盘设计的要领及相关技术,能够利用实验设备实现电子钟系统的设计。
3.提高自己的硬件设计分析能力,同时培养软硬结合的系统设计思维,从而提高设计系统的可行性和准确性。
  • 设计正文
  • 设计题目:8086数字电子钟的设计:
    • 设计并完成LED七段数码管数字钟电路。
    • 数字钟显示格式为:HHMMSS
    • 具有通过键盘能够调整时、分、秒及设置闹铃的功能。
    • 具有暂停时间及复位功能。
  • 设计方案

本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在中断服务程序中对秒计数得到分和小时值并判断闹铃是否到时。编写键盘扫描和LED显示程序完成设置时间、定闹铃及数码管显示功能。

  • 硬件原理
  • 七段数码管显示和键盘扫描显示

图1.1七段数码管

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

实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。

实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。向列扫描码地址逐列输入低电平,然后从行码地址读回。如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键。在判断有键按下后,要有一定的时延,防止键盘抖动。

  • 硬件连接

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

8253用定时器/计数器1,8253片选接CS1,地址为09000H,8253时钟源CLK1接分频电路的F/64输出,频器的Fin接4MHz时钟,8253的GATE1接VCC;8259中断INT0接8253的OUT1,片选接CS2,地址为0A000H。显示电路的KEY/LED CS 接CS0,地址为08000H。如下图:

  • 运行界面


源程序如下:

  1. CONTROL EQU 09003H
  2.      COUNT1  EQU 09001H
  3.      IN_KEY   EQU 08001H  ; 键盘读入口
  4.      OUTBIT   EQU 08002H  ; 位控制口
  5.      OUTSEG   EQU 08004H  ; 段控制口
  6.      ICW1    EQU 00010011B     ; 单片8259, 上升沿中断, 要写ICW4
  7.      ICW2    EQU 00100000B     ; 中断号为20H
  8.      ICW4    EQU 00000001B     ; 工作在8086/88 方式
  9.      OCW1    EQU 11111110B     ; 只响应INT0 中断
  10.      CS8259A EQU 0A000H                     ; 8259地址
  11.      CS8259B EQU 0A001H
  12. DATA   SEGMENT
  13.      CNT     DB  0;闹铃显示
  14.      RHOUR   DB  1
  15.      RMINUTE DB  0
  16.      HOUR    DB              0
  17.      MINUTE  DB              0
  18.      SECOND  DB              0
  19.      NUM     DB              0;判断闹铃
  20.      LEDBUF  DB              6 DUP(?)    ; 显示缓冲
  21.      RINGBUF    DB  6 DUP(?)
  22.      SETBUF     DB  6 DUP(?)
  23.      LEDMAP:                                ; 八段管显示码
  24.                       DB              3FH, 06H, 5BH, 4FH, 66H, 6DH,              7DH, 07H
  25.                        DB              7FH, 6FH, 77H, 7CH, 39H, 5EH,              79H, 71H
  26.      KEYTABLE:                 ; 键码定义
  27.                        DB              16H, 15H, 14H, 0FFH
  28.                        DB              13H, 12H, 11H, 10H
  29.             DB   0DH, 0CH, 0BH, 0AH
  30. DB              0EH, 03H, 06H, 09H
  31.             DB              0FH, 02H, 05H, 08H
  32.                      DB              00H, 01H, 04H, 07H
  33.      SET:  DB 6DH, 79H, 07H, 01H, 00H, 00H;字符显示SET
  34.      BELL: DB 7FH, 79H, 38H, 38H, 00H, 00H;字符显示BELL
  35. DATA   ENDS

  36. CODE   SEGMENT
  37.        ASSUME CS:CODE, DS:DATA
  38.     DELAY  PROC  NEAR
  39.                    PUSH  AX                            ; 延时子程序
  40.                    PUSH  CX
  41.                    MOV   AL, 0
  42.                    MOV   CX,AX
  43.               LOOP  $
  44.                    POP   CX
  45.         POP   AX
  46.         RET
  47.     DELAY  ENDP

  48.     DISPLAYLED              PROC NEAR
  49.                    MOV   CL, 6                            ; 共6个八段管
  50.                    MOV   AH, 00100000B              ; 从左边开始显示
  51.                    DLOOP:
  52.                    MOV   DX, OUTBIT
  53.         MOV   AL, 0
  54.         OUT   DX,AL                            ; 关所有八段管
  55.         MOV   AL, [BX]
  56.         MOV   DX, OUTSEG
  57.         OUT   DX,AL
  58.         MOV   DX, OUTBIT
  59.         MOV   AL, AH
  60.         OUT   DX, AL       ; 显示一位八段管
  61.         PUSH  AX
  62.         MOV   AH, 01H
  63.         CALL  DELAY
  64.         POP   AX
  65.         SHR   AH, 1
  66.         INC   BX
  67.         DEC   CL
  68.         JNZ   DLOOP
  69.         MOV   DX, OUTBIT
  70.         MOV   AL, 0
  71.         OUT   DX,AL                     ; 关所有八段管
  72.         RET
  73.    DISPLAYLED              ENDP

  74.    TESTKEY PROC NEAR
  75.         MOV   DX, OUTBIT
  76.         MOV   AL, 0
  77.         OUT   DX, AL       ; 输出线置为0
  78.         MOV   DX, IN_KEY
  79.         IN    AL, DX       ; 读入键状态
  80.         NOT   AL
  81.         AND   AL, 0FH      ; 高四位不用
  82.         RET
  83.    TESTKEY ENDP

  84.    GETKEY PROC NEAR
  85.         MOV   CH, 00100000B
  86.        MOV   CL, 6
  87.         KLOOP:
  88.         MOV   DX, OUTBIT
  89.         MOV   AL, CH                 ; 找出键所在列
  90.         NOT   AL
  91.         OUT   DX, AL
  92.         SHR   CH, 1
  93.         MOV   DX, IN_KEY
  94.         IN    AL, DX
  95.         NOT   AL
  96.         AND   AL, 0FH
  97.         JNE   GOON_      ; 该列有键入
  98.         DEC   CL
  99.         JNZ   KLOOP
  100.         MOV   CL, 0FFH    ; 没有键按下, 返回 0FFH
  101.         JMP   EXIT1
  102.         GOON_:
  103.         DEC   CL
  104.         SHL   CL, 2                    ;              键值 = 列 * 4 +行
  105.         MOV   CH, 4
  106.         LOOPC:
  107.         TEST  AL, 1
  108.         JNZ   EXIT1
  109.        SHR   AL, 1
  110.         INC   CL
  111.         DEC  CH
  112.         JNZ   LOOPC
  113.         EXIT1:
  114.         MOV   DX, OUTBIT
  115.         MOV   AL, 0
  116.         OUT   DX, AL
  117.         MOV   CH, 0
  118.         MOV   BX, OFFSET KEYTABLE
  119.         ADD   BX, CX
  120.         MOV   AL, [BX]                  ; 取出键码
  121.         MOV   BL, AL
  122.         WAITRELEASE:
  123.         MOV   DX, OUTBIT
  124.         MOV   AL, 0
  125.         OUT   DX, AL                  ; 等键释放
  126.         MOV   AH, 10
  127.         CALL  DELAY
  128.         CALL  TESTKEY
  129.         JNE   WAITRELEASE
  130.         MOV   AL, BL
  131.         RET
  132.     GETKEY ENDP

  133.     IENTER PROC  NEAR
  134.         PUSH  AX
  135.         PUSH  DX
  136.         MOV   NUM,0
  137.         INC   SECOND
  138.         MOV   AL, SECOND
  139.         CMP   AL, 60
  140.         JNE   J0
  141.         MOV   SECOND, 0
  142.         INC   MINUTE
  143.         MOV   AL, MINUTE
  144.         CMP   AL, 60
  145.         JNE   J0
  146.         MOV   MINUTE, 0
  147.         INC   HOUR
  148.         MOV   AL, HOUR
  149.         CMP   AL, 24
  150.         JNE   J0
  151.         MOV   HOUR, 0
  152.         J0:   ;判断闹铃
  153.         MOV   AL,HOUR
  154.         CMP   AL, RHOUR
  155.         JNE   J1
  156.         INC   NUM
  157.         J1:
  158.         MOV   AL,MINUTE
  159.         CMP   AL, RMINUTE
  160.         JNE   J2
  161.         INC   NUM
  162.         J2:
  163.         CMP   NUM, 2
  164.         JNE   EXIT
  165.         MOV   CNT, 0EH
  166.         L33:
  167.         ;MOV   DX,0D000H
  168.         ;OUT   DX,AL
  169.         MOV   BX, OFFSET BELL
  170.         CALL  DISPLAYLED
  171.         DEC   CNT
  172.         JNE   L33
  173.         EXIT:
  174.         MOV   DX, CS8259A
  175.         MOV   AL, 20H                ; 中断服务程序结束指令
  176.         OUT   DX, AL
  177.         POP   DX
  178.         POP   AX
  179.         IRET
  180.     IENTER ENDP

  181.     IINIT  PROC
  182.         MOV                DX, CS8259A
  183.         MOV                AL, ICW1
  184.         OUT                DX, AL
  185.         MOV                DX, CS8259B
  186.         MOV                AL, ICW2
  187.         OUT                DX, AL
  188.         MOV                AL, ICW4
  189.         OUT                DX, AL
  190.         MOV                AL, OCW1
  191.         OUT                DX, AL
  192.         RET
  193.     IINIT  ENDP

  194.     START  PROC   NEAR
  195.         MOV                AX, DATA
  196.         MOV                DS, AX
  197.         MOV       NUM, 0
  198.         MOV                LEDBUF, 03FH                ; 显示 00.00.00
  199.         MOV                LEDBUF+1, 03FH
  200.         MOV                LEDBUF+2, 03FH
  201.         MOV                LEDBUF+3, 03FH
  202.         MOV                LEDBUF+4, 03FH
  203.         MOV                LEDBUF+5, 03FH
  204.         MOV                HOUR,                0
  205.         MOV                MINUTE, 0
  206.         MOV                SECOND, 0
  207.         CLI      ;关中断
  208.         MOV                AX, 0
  209.         MOV                DS, AX
  210.         MOV                AL, 76H; 01110110B  ;              计数器1,16位,方式3,二进制
  211.         MOV                DX, CONTROL
  212.         OUT                DX, AL
  213.         MOV                AX, 65500
  214.         MOV                DX, COUNT1
  215.         OUT                DX, AL                    ;              计数器低字节
  216.         MOV                AL, AH
  217.         OUT                DX, AL                    ;              计数器高字节
  218.         MOV                BX, 4*ICW2                    ;              中断号
  219.         MOV                AX, CODE
  220.         SHL                    AX, 4                                  ;              *16
  221.         ADD                AX, OFFSET IENTER   ;中断入口地址(段地址为0)
  222.         MOV                [BX],              AX
  223.         MOV                AX, 0
  224.         INC                    BX
  225.         INC                  BX
  226.         MOV                [BX],              AX                    ;              代码段地址为0
  227.         CALL      IINIT
  228.         MOV                AX, DATA
  229.         MOV                DS, AX
  230.         STI       ;开中断
  231.                   LOOP2:
  232.         MOV                AL, HOUR
  233.         MOV                AH, 0
  234.         MOV                CL, 10
  235.         DIV                  CL
  236.         MOV                CH, AH
  237.         MOV                AH, 0
  238.         MOV                BX, OFFSET LEDMAP
  239.         ADD                BX, AX
  240.         MOV                AL, [BX]
  241.         MOV                LEDBUF, AL
  242.         MOV                BX, OFFSET LEDMAP
  243.         MOV                AL, CH
  244.         MOV                AH, 0
  245.         ADD                BX, AX
  246.         MOV                AL, [BX]
  247.         OR                    AL, 80H
  248.         MOV                LEDBUF+1, AL
  249.         MOV                AL,              MINUTE
  250.         MOV                AH, 0
  251.         MOV                CL, 10
  252.         DIV                  CL
  253.         MOV                CH, AH
  254.         MOV                AH, 0
  255.         MOV                BX, OFFSET LEDMAP
  256.         ADD                BX, AX
  257.         MOV                AL, [BX]
  258.         MOV                LEDBUF+2, AL
  259.         MOV                BX, OFFSET LEDMAP
  260.         MOV                AL, CH
  261.         MOV                AH, 0
  262.         ADD                BX, AX
  263.         MOV                AL, [BX]
  264.         OR                    AL, 80H
  265.         MOV                LEDBUF+3, AL
  266.         JMP L3
  267.         LOOP1:
  268.         JMP      LOOP2
  269.         L3:
  270.         MOV                AL,              SECOND
  271.         MOV                AH, 0
  272.         MOV                CL, 10
  273.         DIV                  CL
  274.         MOV                CH, AH
  275.         MOV                AH, 0
  276.         MOV                BX, OFFSET LEDMAP
  277.         ADD                BX, AX
  278.         MOV                AL, [BX]
  279.         MOV                LEDBUF+4, AL
  280.         MOV                BX, OFFSET LEDMAP
  281.         MOV                AL, CH
  282.         MOV                AH, 0
  283.         ADD                BX, AX
  284.         MOV                AL, [BX]
  285.         OR                    AL, 80H
  286.         MOV                LEDBUF+5, AL
  287.         MOV                BX, OFFSET LEDBUF
  288.         CALL     DISPLAYLED
  289.         D0:
  290.         MOV      BX, OFFSET LEDBUF
  291.         CALL     DISPLAYLED                ; 显示
  292.         CALL     TESTKEY                 ; 有键入?
  293.         JE        LOOP1                               ; 无键入, 继续显示
  294.         CALL     GETKEY                 ; 读入键码
  295.         AND      AL, 0FH                 ; 显示键码
  296.         MOV      AH,0

  297.         CMP      AL,0AH
  298.         JE        SET0
  299.         CMP      AL,0BH
  300.         JE        BELL01
  301.         CMP      AL,0CH
  302.         JE    STOP1
  303.         CMP   AL,0DH
  304.         JE    CLEAR1
  305.         JMP   D0
  306.         STOP1:
  307.         CLI
  308.         STOP2:
  309.         MOV                BX, OFFSET LEDBUF
  310.         CALL  DISPLAYLED
  311.         CALL  TESTKEY
  312.         JE    STOP2
  313.         CALL  GETKEY
  314.         AND                AL, 0FH
  315.         MOV                AH, 0
  316.         CMP       AL, 0CH
  317.         JNE      STOP2
  318.         STI
  319.         JMP D0
  320.         CLEAR1:
  321.         MOV HOUR,0
  322.         MOV MINUTE,0
  323.         MOV SECOND,0
  324.         JMP D0
  325.         SET0:
  326.        MOV                BX, OFFSET SET
  327.         CALL  DISPLAYLED
  328.         CALL  TESTKEY
  329.         JE    SET0
  330.         CALL  GETKEY
  331.         AND                AL, 0FH
  332.         MOV                AH, 0
  333.         MOV       SETBUF[0],AL
  334. MOV                BX, OFFSET LEDMAP
  335. ADD                BX, AX
  336. MOV                AL, [BX]
  337. MOV                LEDBUF, AL

  338. SET1:
  339. MOV                BX, OFFSET LEDBUF
  340. CALL  DISPLAYLED
  341. CALL  TESTKEY
  342. JE    SET1
  343. CALL  GETKEY
  344. AND                AL, 0FH
  345. MOV                AH, 0
  346. MOV       SETBUF[1],AL
  347. MOV                BX, OFFSET LEDMAP
  348. ADD                BX, AX
  349. MOV                AL, [BX]
  350. MOV                LEDBUF+1, AL
  351. JMP SET2
  352. BELL01:
  353. JMP BELL02
  354. SET2:
  355. MOV                BX, OFFSET LEDBUF
  356. CALL  DISPLAYLED
  357. CALL  TESTKEY
  358. JE    SET2
  359. CALL  GETKEY
  360. AND                AL, 0FH
  361. MOV                AH, 0
  362. MOV       SETBUF[2],AL
  363. MOV                BX, OFFSET LEDMAP
  364. ADD                BX, AX
  365. MOV                AL, [BX]
  366. MOV                LEDBUF+2, AL

  367. SET3:
  368. MOV                BX, OFFSET LEDBUF
  369. CALL  DISPLAYLED
  370. CALL  TESTKEY
  371. JE    SET3
  372. CALL  GETKEY
  373. AND                AL, 0FH
  374. MOV                AH, 0
  375. MOV       SETBUF[3],AL
  376. MOV                BX, OFFSET LEDMAP
  377. ADD                BX, AX
  378. MOV                AL, [BX]
  379. MOV                LEDBUF+3, AL

  380. JMP SET6
  381. BELL02:
  382. JMP BELL03
  383. SET6:
  384. MOV                BX, OFFSET LEDBUF
  385. CALL  DISPLAYLED
  386. CALL  TESTKEY
  387. JE    SET6
  388. CALL  GETKEY
  389. AND                AL, 0FH
  390. CMP   AL,0AH
  391. JE TIMESET
  392. JMP D0
  393. TIMESET:

  394. MOV                AL , SETBUF[0]
  395. MOV                CL,10D
  396. MUL                CL
  397. MOV                BL,SETBUF[1]
  398. ADD                AL,BL
  399. MOV                HOUR,AL
  400. CMP                HOUR,24
  401. JL                LP1
  402. MOV                HOUR ,0
  403. LP1:
  404. MOV   AL ,SETBUF[2]
  405. MOV                CL,10D
  406. MUL                CL
  407. MOV                BL ,SETBUF[3]
  408. ADD                AL,BL
  409. MOV              MINUTE ,AL
  410. CMP                MINUTE ,60
  411. JL                LP2
  412. MOV                MINUTE ,0
  413. LP2:
  414. MOV   SECOND, 0

  415. JMP D0


  416. BELL03:
  417. MOV                BX, OFFSET BELL
  418. CALL  DISPLAYLED                 ; 显示
  419. CALL  TESTKEY                 ; 有键入?
  420. JE                BELL03                     ; 无键入, 继续显示
  421. CALL  GETKEY                 ; 读入键码
  422. AND                AL, 0FH                 ; 显示键码
  423. MOV                AH, 0
  424. MOV                RINGBUF[0],AL
  425. MOV                BX, OFFSET LEDMAP
  426. ADD                BX, AX
  427. MOV                AL, [BX]
  428. MOV                LEDBUF, AL

  429. BELL1:
  430. MOV                BX, OFFSET LEDBUF
  431. CALL  DISPLAYLED                 ; 显示
  432. CALL  TESTKEY                 ; 有键入?
  433. JE                BELL1                     ; 无键入, 继续显示
  434. CALL  GETKEY                 ; 读入键码
  435. AND                AL, 0FH                 ; 显示键码
  436. MOV                AH, 0
  437. MOV                RINGBUF[1],AL
  438. MOV                BX, OFFSET LEDMAP
  439. ADD                BX, AX
  440. MOV                AL, [BX]
  441. MOV                LEDBUF+1, AL

  442. BELL2:
  443. MOV                BX, OFFSET LEDBUF
  444. CALL  DISPLAYLED                 ; 显示
  445. CALL  TESTKEY                 ; 有键入?
  446. JE                BELL2                     ; 无键入, 继续显示
  447. CALL  GETKEY                 ; 读入键码
  448. AND                AL, 0FH                 ; 显示键码
  449. MOV                AH, 0
  450. MOV                RINGBUF[2],AL
  451. MOV                BX, OFFSET LEDMAP
  452. ADD                BX, AX
  453. MOV                AL, [BX]
  454. MOV                LEDBUF+2, AL

  455. BELL3:
  456. MOV                BX, OFFSET LEDBUF
  457. CALL  DISPLAYLED                 ; 显示
  458. CALL  TESTKEY                 ; 有键入?
  459. JE                BELL3       ; 无键入, 继续显示
  460. CALL  GETKEY                 ; 读入键码
  461. AND                AL, 0FH                 ; 显示键码
  462. MOV                AH, 0
  463. MOV                RINGBUF[3],AL
  464. MOV                BX, OFFSET LEDMAP
  465. ADD                BX, AX
  466. MOV                AL, [BX]
  467. MOV                LEDBUF+3, AL

  468. BELL4:
  469. MOV                BX, OFFSET LEDBUF
  470. CALL  DISPLAYLED
  471. CALL  TESTKEY
  472. JE    BELL4
  473. CALL  GETKEY
  474. AND                AL, 0FH
  475. CMP   AL,0BH
  476. JE BELLSET
  477. JMP D0

  478. BELLSET:
  479. MOV     NUM,0
  480. MOV                AL , RINGBUF[0]
  481. MOV                CL,10D
  482. MUL                CL
  483. MOV                BL,RINGBUF[1]
  484. ADD                AL,BL
  485. MOV                RHOUR,AL
  486. CMP                RHOUR,24
  487. JL                LP3
  488. MOV                RHOUR ,0
  489. LP3:
  490. MOV       AL ,RINGBUF[2]
  491. MOV                CL,10D
  492. MUL                CL
  493. MOV                BL ,RINGBUF[3]
  494. ADD                AL,BL
  495. MOV                RMINUTE ,AL
  496. CMP                RMINUTE ,60
  497. JL                LP4
  498. MOV                RMINUTE ,0
  499. LP4:

  500. JMP D0
  501. START  ENDP
  502.        CODE   ENDS
  503.        END              START
复制代码

完整的Word格式文档51黑下载地址:

8086数字电子钟的设计-附程序代码.rar (630.7 KB, 下载次数: 14)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表