本項目是基于8086的點陣顯示,可以通過按鍵顯示所要顯示的內容
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
@M]7PW@]5`3HWS$`P0.png (38.48 KB, 下載次數: 29)
下載附件
2022-6-30 22:14 上傳
單片機源程序如下:
- IOY0 EQU 0C400H ;片選第一片8255的地址
- IOY1 EQU 0C440H ;片選第二片8255的地址
- O8255_A EQU IOY0+00*2 ;第一片8255的地址的A口
- O8255_B EQU IOY0+01*2 ;第一片8255的地址的B口
- O8255_C EQU IOY0+10*2 ;第一片8255的地址的C口
- O8255_MODE EQU IOY0+11*2 ;第一片8255的地址的控制字寄存器
- T8255_A EQU IOY1+00*2 ;第二片8255的地址的A口
- T8255_B EQU IOY1+01*2 ;第二片8255的地址的B口
- T8255_C EQU IOY1+10*2 ;第二片8255的地址的C口
- T8255_MODE EQU IOY1+11*2 ;第二片8255的地址的控制字寄存器
- DATAS SEGMENT
- ;此處輸入數據段代碼
- COUNT1 DB 00H
- COUNT2 DB 01H
- TAB DB 08H,02H,18H,02H,0C8H,3FH,14H,02H,32H,02H,11H,02H,0E8H,7FH,08H,08H
- DB 0CH,08H,0EAH,7FH,08H,08H,88H,08H,88H,08H,08H,08H,08H,0AH,08H,04H ;待
- DB 08H,00H,08H,1FH,08H,11H,7FH,11H,08H,11H,08H,11H,1CH,11H,2CH,11H
- DB 2AH,11H,0AH,11H,89H,10H,88H,50H,48H,50H,48H,50H,28H,60H,08H,00H ;機
- DB 00H,01H,00H,01H,3FH,01H,0A0H,7FH,0A1H,20H,52H,12H,14H,02H,08H,02H
- DB 18H,02H,18H,06H,24H,05H,24H,09H,82H,18H,61H,70H,1CH,20H,00H,00H ;歡
- DB 02H,00H,84H,01H,6CH,3EH,24H,22H,20H,22H,20H,22H,27H,22H,24H,22H
- DB 0A4H,22H,64H,2AH,24H,12H,04H,02H,04H,02H,0AH,00H,0F1H,7FH,00H,00H ;迎
- DB 80H,08H,82H,08H,84H,08H,0ECH,3FH,84H,08H,80H,08H,80H,08H,0EFH,7FH
- DB 88H,08H,88H,08H,48H,08H,48H,08H,28H,08H,14H,00H,0E2H,7FH,00H,00H ;進
- DB 30H,00H,60H,00H,40H,00H,80H,00H,0C0H,00H,40H,01H,40H,01H,20H,02H
- DB 20H,04H,10H,04H,10H,08H,08H,10H,04H,70H,02H,20H,01H,00H,00H,00H ;入
- DB 00H,3EH,0FCH,01H,40H,04H,20H,04H,10H,02H,0F8H,01H,0C0H,04H,30H,08H
- DB 0FCH,1FH,08H,31H,20H,05H,10H,09H,08H,11H,04H,21H,42H,21H,80H,00H ;系
- DB 08H,02H,08H,04H,0C4H,7FH,04H,02H,22H,02H,1FH,11H,90H,20H,0C8H,7FH
- DB 04H,29H,3EH,09H,00H,09H,00H,09H,0B8H,48H,87H,48H,40H,70H,20H,00H ;統
- DB 00H,00H,00H,00H,00H,00H,00H,00H,08H,00H,08H,00H,08H,00H,08H,00H
- DB 08H,00H,08H,00H,08H,00H,08H,00H,08H,00H,00H,00H,08H,00H,00H,00H ;!
- DB 0FEH,3FH,80H,00H,80H,00H,0F8H,0FH,88H,08H,88H,08H,0F8H,0FH,88H,08H
- DB 88H,08H,88H,08H,0FFH,7FH,08H,08H,08H,08H,08H,08H,08H,0AH,08H,04H ;再
- DB 0F8H,0FH,08H,08H,08H,08H,88H,08H,88H,08H,88H,08H,88H,08H,88H,08H
- DB 48H,09H,40H,01H,20H,01H,20H,21H,10H,21H,0CH,61H,03H,3EH,00H,00H ;見
- DATAS ENDS
- STACKS SEGMENT
- ;此處輸入堆棧段代碼
- N1 DB 100 DUP(?)
- STACKS ENDS
- CODES SEGMENT
- ASSUME CS:CODES,DS:DATAS,SS:STACKS
- START:
- MOV AX,DATAS
- MOV DS,AX
- MOV DX,O8255_MODE
- MOV AL,81H
- OUT DX,AL ;第一片8255方式選擇
- MOV DX,T8255_MODE
- MOV AL,80H
- OUT DX,AL ;第二片8255方式選擇
- MOV CX,0
- CALL C1
- X: CALL C2
- MOV SI,0000H ;指針賦值0
- MOV AH,2 ;顯示“待機”
- JMP X0
- Y: CALL C2
- MOV AH,7 ;顯示“歡迎進入系統”
- MOV SI,0040H
- MOV DI,SI
- JMP X0
- Z: CALL C2
- MOV AH,2 ;顯示“再見”
- MOV SI,0120H
- MOV DI,SI
- X0: PUSH CX
- MOV BX,1024 ;整體循環1024次
- X1: PUSH BX
- MOV BH,COUNT1 ;初始化
- MOV BL,COUNT2
- CLC ;CF位清零
- RER: MOV CX,16 ;循環次數
- MOV SI,DI ;指向原來的位置
- LOOP1:
- MOV DX,T8255_A ;清除列
- MOV AL,00H
- OUT DX,AL
- MOV DX,T8255_B
- MOV AL,00H
- OUT DX,AL
- CALL FI
- INC SI ;指針再次加1
- RCL BL,1 ;每次循環向左移動1位
- RCL BH,1 ;連帶CF位一同左移1位
- DEC CX ;循環次數減1
- CMP CX,0 ;循環次數大于0,就繼續循環
- JNZ LOOP1
- POP BX ;第二重循環計數
- DEC BX
- CMP BX,0
- JNZ X1
- LOOP3:
- POP CX ;第三重循環,控制顯示哪些字
- INC CX
- MOV DI,SI
- CMP CL,AH
- JNZ X0 ;顯示程序結束
- MOV DI,0000H
- MOV AH,0
- MOV CX,0
- CALL C1
- MOV AH,4CH
- INT 21H
- C1: MOV DX,O8255_C ;讀取C口狀態
- IN AL,DX
- CMP AL,0EH ;判斷按下的是第幾個按鍵,依次跳轉
- JZ X
- CMP AL,0DH
- JZ Y
- CMP AL,0BH
- JZ Z
- O: MOV DX,O8255_C ;初始化鍵盤掃描輸入
- PUSH AX
- MOV AL,0FH
- OUT DX,AL
- POP AX
- JMP C1
- RET
- C2: MOV DX,O8255_C ;對數碼管的輸出
- PUSH AX
- CALL C3
- OUT DX,AL
- POP AX
- RET
- C3: CMP AL,0EH ;數碼管輸出變量
- JZ M1
- CMP AL,0DH
- JZ M2
- CMP AL,0BH
- JZ M3
- M1: MOV AL,17H
- RET
- M2: MOV AL,27H
- RET
- M3: MOV AL,37H
- RET
- FI: MOV DX,O8255_A ;循環行掃描
- MOV AL,BL
- OUT DX,AL
- MOV DX,O8255_B
- MOV AL,BH
- OUT DX,AL
- LOOP2:
- MOV DX,T8255_A ;循環列掃描
- MOV AL,TAB[SI]
- OUT DX,AL
- INC SI ;指針加1,指向下一個數據
- MOV DX,T8255_B
- MOV AL,TAB[SI]
- OUT DX,AL
- RET
- CODES ENDS
- END START
復制代碼 以上是代碼
附件只包含1個文件 Proteus仿真文件下載:
基于8086點陣.zip
(109.44 KB, 下載次數: 42)
2022-6-30 22:12 上傳
點擊文件名下載附件
8086點陣
|