久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3808|回復: 0
打印 上一主題 下一主題
收起左側

8086微機課設程序

[復制鏈接]
跳轉到指定樓層
樓主
中南大學微機課程設計


8086源程序如下:
  1. INCLUDE ZUOZHE.INC
  2. INCLUDE HUANYING.inc
  3. INCLUDE ZAIJIAN.inc
  4. INCLUDE DAIJI.inc
  5. .386P
  6. IOY0 EQU 3000H ;片選 IOY0 對應的端口始地址
  7. IOY1 EQU 3040H
  8. IOY2 EQU 3080H
  9. IOY3 EQU 30C0H
  10. MY8251_DATA  EQU IOY2+00H*4 ;8251 數據寄存器
  11. MY8251_MODE  EQU IOY2+01H*4 ;8251 方式控制寄存器
  12. MY8254_COUNT2 EQU IOY3+02H*4 ;8254 計數器 2 端口地址
  13. MY8254_MODE EQU IOY3+03H*4 ;8254 控制寄存器端口地址
  14. MY8255_A EQU IOY0+00H*4 ;8255 的 A 口地址
  15. MY8255_B EQU IOY0+01H*4 ;8255 的 B 口地址
  16. MY8255_C EQU IOY0+02H*4 ;8255 的 C 口地址
  17. MY8255_MODE EQU IOY0+03H*4 ;8255 的控制寄存器地址
  18. STACK1 SEGMENT  STACK
  19.          DW 256 DUP(?)
  20. STACK1 ENDS
  21. DATA SEGMENT USE16
  22.      ADDR DW ?
  23. DTABLE DB   3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H  
  24. STR2 DB '          1         

  25. STR3 DB '          2         

  26. STR4 DB '          3         


  27. STR5 DB '        BYE-BYE      

  28. DATA ENDS
  29. CODE SEGMENT USE16
  30. ASSUME CS:CODE,DS:DATA
  31. START: MOV AX,DATA
  32.        MOV DS,AX
  33. A2: MOV ADDR,OFFSET ZUOZHE
  34.        MOV SI,ADDR
  35. A1:    MOV  CX,20H
  36. LOOP2: CALL DISPHZ
  37.        SUB  SI,32
  38.        LOOP LOOP2
  39.        CALL CCSCAN
  40.        JNZ BEGIN
  41.        ADD  SI,2  
  42.        MOV  AX,SI      
  43.        SUB  AX,ADDR
  44.        CMP  AX,96               ;比較文字是否顯示完畢
  45.        JNB  A2                  
  46.        JMP  A1      
  47. BEGIN: MOV  SI,3000H               ;建立緩沖區,存放要顯示的鍵值
  48.            MOV  AL,00H                 ;先初始化鍵值為0
  49.            MOV  [SI],AL
  50.            MOV  [SI+1],AL
  51.            MOV  [SI+2],AL
  52.            MOV  [SI+3],AL
  53.            MOV  [SI+4],AL
  54.            MOV  [SI+5],AL
  55.            MOV  DI,3005H
  56.        MOV DX,MY8255_MODE ;初始化 8255 工作方式
  57.        MOV AL,81H ;方式 0,A 口、B 口輸出,C 口低 4 位輸入
  58.        OUT DX,AL
  59.        CALL DIS                    ;顯示刷新                     
  60.            CALL CLEAR                  ;清屏
  61.        CALL CCSCAN ;掃描按鍵
  62.        JNZ GETKEY1 ;有鍵按下則跳置 GETKEY1
  63.        JMP BEGIN ;無按鍵則跳回繼續循環,有則退出
  64. QUIT:  MOV AX,4C00H ;返回到 DOS
  65.        INT 21H
  66. GETKEY1:MOV CH,0FEH
  67.         MOV CL,00H ;設置當前檢測的是第幾列
  68. COLUM: MOV AL,CH ;選取一列,將 X1~X4 中一個置 0
  69.        MOV DX,MY8255_A
  70.        OUT DX,AL
  71.        MOV DX,MY8255_C ;讀 Y1~Y4,用于判斷是哪一行按鍵閉合
  72.        IN AL,DX
  73.    L1: TEST AL,01H ;是否為第 1 行
  74.        JNZ L2 ;不是則繼續判斷
  75.        MOV  AL,01H
  76.        CALL PUTBUF
  77.        JMP KEY1
  78.    L2: TEST AL,02H ;是否為第 2 行
  79.        JNZ L3 ;不是則繼續判斷
  80.        MOV  AL,02H
  81.        CALL PUTBUF
  82.        JMP KEY2
  83.    L3: TEST AL,04H ;是否為第 3 行
  84.        JNZ L4 ;不是則繼續判斷
  85.        MOV  AL,03H
  86.        CALL PUTBUF
  87.        JMP KEY3
  88.    L4: TEST AL,08H ;是否為第 4 行
  89.        JNZ COLUM ;不是則繼續判斷
  90.        MOV  AL,04H
  91.        CALL PUTBUF
  92.        JMP KEY4
  93. KEY1:      CALL FINSH
  94.            PUSH AX
  95.            CALL DIS                    ;顯示刷新
  96.                POP  AX
  97.                PUSH BX
  98.                MOV BX,OFFSET STR2
  99.                CALL STRING
  100.                POP BX
  101.    A21:    MOV ADDR,OFFSET HUANYING
  102.            MOV SI,ADDR
  103.    A11:    MOV  CX,20H
  104.    LOOP21: CALL DISPHZ
  105.            SUB  SI,32
  106.            LOOP LOOP21
  107.            CALL CCSCAN
  108.            JNZ BEGIN
  109.            ADD  SI,2  
  110.            MOV  AX,SI      
  111.            SUB  AX,ADDR
  112.            CMP  AX,96               ;比較文字是否顯示完畢
  113.            JNB  A21                  
  114.            JMP  A11      
  115. KEY2:      CALL FINSH
  116.            PUSH AX
  117.            CALL DIS                    ;顯示刷新
  118.                POP  AX
  119.                MOV BX,OFFSET STR3
  120.                CALL STRING
  121.    A22:    MOV ADDR,OFFSET DAIJI
  122.            MOV SI,ADDR
  123.    A12:    MOV  CX,20H
  124.    LOOP22: CALL DISPHZ
  125.            SUB  SI,32
  126.            LOOP LOOP22
  127.            CALL CCSCAN
  128.            JNZ BEGIN
  129.            ADD  SI,2  
  130.            MOV  AX,SI      
  131.            SUB  AX,ADDR
  132.            CMP  AX,256               ;比較文字是否顯示完畢
  133.            JNB  A22                  
  134.            JMP  A12      
  135. KEY3:      CALL FINSH
  136.            PUSH AX
  137.            CALL DIS                    ;顯示刷新
  138.                POP  AX
  139.                MOV BX,OFFSET STR4
  140.                CALL STRING
  141.    A23:    MOV ADDR,OFFSET ZAIJIAN
  142.            MOV SI,ADDR
  143.    A13:    MOV  CX,20H
  144.    LOOP23: CALL DISPHZ
  145.            SUB  SI,32
  146.            LOOP LOOP23
  147.            CALL CCSCAN
  148.            JNZ BEGIN
  149.            ADD  SI,2  
  150.            MOV  AX,SI      
  151.            SUB  AX,ADDR
  152.            CMP  AX,96               ;比較文字是否顯示完畢
  153.            JNB  A23                  
  154.            JMP  A13      
  155. KEY4:      CALL FINSH
  156.            PUSH AX
  157.            MOV BX,OFFSET STR5
  158.                CALL STRING
  159.            CALL DIS                    ;顯示刷新
  160.                POP  AX
  161.                CALL CLEAR
  162.        MOV AX,4C00H ;結束程序退出
  163.        INT 21H
  164. CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序
  165.        MOV AL,00H
  166.        MOV DX,MY8255_A ;將 4 列全選通,X1~X4 置 0
  167.        OUT DX,AL
  168.        MOV DX,MY8255_C
  169.        IN AL,DX ;讀 Y1~Y4
  170.        NOT AL
  171.        AND AL,0FH ;取出 Y1~Y4 的反值
  172.        RET
  173. CCSCAN ENDP
  174. DISPHZ PROC NEAR ;顯示 1 屏漢字子程序
  175.        PUSH CX
  176.        MOV CX,16
  177.        MOV BX,0FFFEH
  178. LOOP1: MOV AL,BYTE PTR[SI]
  179.        MOV AH,BYTE PTR[SI+1]
  180.        ROL EAX,16
  181.        MOV AX,BX
  182.        ADD SI,2
  183.        ROL BX,1
  184.        NOT EAX
  185.        MOV DX,IOY1
  186.        OUT DX,EAX
  187.        CALL DALLY
  188.        LOOP LOOP1
  189.        POP CX
  190.        RET
  191.        DISPHZ ENDP
  192. DALLY PROC NEAR ;軟件延時子程序
  193.        PUSH CX
  194.        PUSH AX
  195.        MOV CX,09H
  196.        D1: MOV AX,0F000H
  197.        D2: DEC AX
  198.        JNZ D2
  199.        LOOP D1
  200.        POP AX
  201.        POP CX
  202.        RET
  203. DALLY ENDP
  204. FINSH PROC NEAR
  205.        MOV  EAX,0                ;滅燈
  206.        MOV  DX,IOY1
  207.        OUT  DX,EAX
  208.        RET
  209. FINSH ENDP
  210. DIS PROC NEAR                      ;顯示鍵值子程序
  211.        PUSH AX                     ;以緩沖區存放的鍵值為鍵值表偏移找到鍵值并顯示
  212.            MOV  SI,3000H                              
  213.            MOV  DL,0DFH
  214.            MOV  AL,DL
  215. AGAIN: PUSH DX
  216.        MOV  DX,MY8255_A
  217.        OUT  DX,AL                  ;設置X1~X4,選通一個數碼管   
  218.        MOV  AL,[SI]                ;取出緩沖區中存放鍵值                  
  219.        MOV  BX,OFFSET DTABLE
  220.            AND  AX,00FFH
  221.            ADD  BX,AX                  
  222.            MOV  AL,[BX]                ;將鍵值作為偏移和鍵值基地址相加得到相應的鍵值
  223.        MOV  DX,MY8255_B
  224.            OUT  DX,AL                  ;寫入數碼管A~Dp
  225.            CALL DALLY
  226.            INC  SI                     ;取下一個鍵值
  227.        POP  DX
  228.        MOV  AL,DL
  229.            TEST AL,01H                 ;判斷是否顯示完?
  230.        JZ   OUT1                   ;顯示完,返回
  231.            ROR  AL,1            
  232.            MOV  DL,AL
  233.            JMP  AGAIN                  ;未顯示完,跳回繼續
  234. OUT1:  POP  AX                     
  235.            RET
  236. DIS ENDP
  237. CLEAR PROC NEAR                    ;清除數碼管顯示子程序
  238.        MOV  DX,MY8255_B            ;段位置0即可清除數碼管顯示   
  239.        MOV  AL,00H
  240.        OUT  DX,AL
  241.            RET
  242. CLEAR ENDP
  243. PUTBUF PROC NEAR                   ;保存鍵值子程序
  244.        MOV  SI,DI
  245.        MOV  [SI],AL
  246.            DEC  DI
  247.            CMP  DI,2FFFH
  248.            JNZ  GOBACK
  249.            MOV  DI,3005H
  250. GOBACK: RET
  251. PUTBUF ENDP
  252. STRING PROC NEAR
  253.        MOV AL, 0B6H ;初始化 8254,得到收發時鐘
  254.        MOV DX, MY8254_MODE
  255.        OUT DX, AL
  256.        MOV AL, 0CH
  257.        MOV DX, MY8254_COUNT2
  258.        OUT DX, AL
  259.        MOV AL, 00H
  260.        OUT DX, AL
  261.        CALL INIT ;初始化 8251
  262.        CALL DALLY1
  263.        MOV AL,7EH
  264.        MOV DX, MY8251_MODE
  265.        OUT DX, AL  ;8251 方式字
  266.        CALL DALLY1
  267.        MOV AL, 34H
  268.        OUT DX, AL  ;8251 控制字
  269.        CALL DALLY1
  270.        MOV CX, 0016H ;10 個數
  271. A111: MOV AL, 37H
  272.        MOV DX, MY8251_MODE
  273.        OUT DX, AL
  274.        MOV AL, [BX]
  275.        MOV DX, MY8251_DATA
  276.        OUT DX, AL  ;發送數據
  277.        MOV DX, MY8251_MODE
  278. A222: IN AL, DX ;判斷發送緩沖是否為空
  279.        AND AL, 01H
  280.        JZ A222
  281.        CALL DALLY
  282. A333: IN AL, DX ;判斷是否接收到數據
  283.        AND AL, 02H
  284.        JZ A333
  285.        MOV DX, MY8251_DATA
  286.        IN AL, DX ;讀取接收到的數據并顯示
  287.        MOV DL,AL
  288.        MOV AH,02H
  289.        INT 21H
  290.        INC BX
  291.        LOOP A111
  292.        RET
  293. STRING ENDP
  294. INIT  PROC NEAR
  295.       MOV AL, 00H  ;復位 8251 子程序
  296.       MOV DX, MY8251_MODE
  297.       OUT DX, AL


  298. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼



所有資料51hei提供下載:
微機課程設計.zip (5.55 KB, 下載次數: 33)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 羞羞网站在线观看 | 色男人的天堂 | 久久精品色欧美aⅴ一区二区 | 国产一级片免费看 | h视频免费观看 | 成人久久久久久久久 | 国产精品一区二区三区在线播放 | 久久亚洲欧美日韩精品专区 | а天堂中文最新一区二区三区 | 久久国产精品一区二区三区 | 久久精品一区二区三区四区 | 韩日精品在线观看 | 91精品国产综合久久香蕉麻豆 | 亚洲精品视频久久 | 久久日韩精品一区二区三区 | 最新中文字幕 | 免费看一级毛片 | 国产精品污www一区二区三区 | 日韩一区二区av | 欧美日韩福利视频 | 国产激情小视频 | 国产欧美一区二区精品久导航 | 日日骚av| 日韩影音 | 亚洲a网 | 在线观看黄色电影 | 日韩国产欧美视频 | 国产一区二区三区精品久久久 | 国产黄色大片 | 午夜黄色 | 久久一区二区三区四区 | 日本中出视频 | 久久99精品久久久久久国产越南 | 伊人网站在线 | 成人妇女免费播放久久久 | 亚洲一区二区三区四区五区午夜 | 中文字幕国产精品 | 91精品国模一区二区三区 | 成人免费三级电影 | 色综合天天天天做夜夜夜夜做 | 日韩一区二区三区在线 |