8255控制四个双色灯C语言,汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮...
最后改進代碼:
.MODELTINY
.STACK100
.DATA
ledshow DB 11111110B ;數據段定義變量按“變量名 數據類型 數據”;DB為字節型
seven DB 07h
zero DB 00h
.CODE
START:A equ 0270H;數碼管端口地址
B equ 0271H;0-1開關端口地址
C equ 0272H;控制數碼管顯示內容
movax,@DATA ;獲得當前程序的數據段地址,并傳送給數據段DS寄存器保存。
mov ds,ax ;這樣,程序中訪問存儲器操作數時,默認情況下就會從DS指定的數據段進行存取
movdx,273h
moval,10000010H
outdx,al
function:
call delay
movdx,B
inal,dx ;從dx端口地址中將數據讀入到al中
andal,00001111B
cmpal,00000001B
jefun1
cmpal,00000010B
jefun2
cmpal,00000100B
jefun3
cmpal,00001000B
jefun4
fun1:movdx,A
moval,00H
outdx,al ;將al中的值讀出到dx端口地址中
jmpfunction
fun2:movdx,A
moval,0FFH
outdx,al
movdx,C
moval,01011011B
outdx,al
jmpfunction
fun3:movdx,C
moval,01001111B
outdx,al
movdx,A
fun3xh:mov cx,8
leabx,ledshow
rol ledshow
mov al,seven
dec seven
xlat
outdx,al
call delay
loop fun3xh
jmpfunction
fun4:movdx,C
moval,01100110B
outdx,al
movdx,A
fun4xh: mov cx,8
leabx,ledshow
ror ledshow
moval,zero
inc zero
xlat
outdx,al
call delay
loop fun4xh
jmpfunction
delayproc near ;proc為子程序起點; 調用程序和子程序在同一code segment中時用near, 只能被相同code segment的其它程序調用; 不在同一code segment中時用far,可以被相同或不同的代碼段程序調用。
push cx
movcx,30000
delay1: loop delay1
pop cx
ret ;子程序結束時調用, 用于實現相應地址參數從該子程序到下一步程序的轉移的轉移
delayendp
ENDSTART
改進前匯編代碼:
.MODELTINY
COM_ADDEQU0273H
PA_ADDEQU0270H
PB_ADDEQU0271H
PC_ADDEQU0272H
.STACK100
.DATA
LED_DataDB11111110B
DB11111101B
DB11111011B
DB11110111B
DB11101111B
DB11011111B
DB10111111B
DB01111111B
.CODE
START:MOVAX,@DATA
MOVDS,AX
NOP
MOVDX,COM_ADD
MOVAL,82H;PA、PB、PC為基本輸出模式
OUTDX,AL
LOOP1:CALLDL500ms
CALLDL500ms
MOVDX,PB_ADD
INAL,DX
ANDAL,00001111B
CMPAL,00000001B
JEf1
cmpal,00000010B
jef2
cmpal,00000100B
jef3
cmpal,00001000B
jef4
f1:
movdx,PA_ADD
MOVal,00H
OUTdx,al
jmpLOOP1
f2:movdx,PA_ADD
MOVal,0FFH
OUTdx,al
movdx,PC_ADD
moval,01011011B
outdx,al
jmpLOOP1
f4:
movdx,PC_ADD
moval,01100110B
outdx,al
movdx,PA_ADD
leabx,LED_DATA
moval,0
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,1
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,2
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,3
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,4
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,5
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,6
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,7
xlat
outdx,al
callDL500ms
jmpLOOP1
f3:
movdx,PC_ADD
moval,01001111B
outdx,al
movdx,PA_ADD
leabx,LED_DATA
moval,7
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,6
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,5
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,4
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,3
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,2
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,1
xlat
outdx,al
callDL500ms
leabx,LED_DATA
moval,0
xlat
outdx,al
callDL500ms
jmpLOOP1
DL500msPROCNEAR
PUSHCX
MOVCX,30000
DL500ms1:LOOPDL500ms1
POPCX
RET
DL500msENDP
ENDSTART
前導題目:
LEDdt db 8 dup(0)
mov si, offset LEDdt
call LEDdisp
LEDdisp proc
push ax
push bx
push dx
mov bx, offset LEDtb
mov ah, 0feh
LED1:lodsb
xlat cs:LEDtb
mov dx, segport
out dx, al
mov al, ah
mov dx, bitport
out dx, al
call delay
rol ah, 1
cmp ah, 0feh
jnz LED1
pop dx
pop bx
pop ax
ret
LEDtbdb 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h
db 80h, 90h, 88h, 83h, 0c6h, 0c1h, 86h, 8eh
LEDdispendp
timer=10
delayproc
push bx
push cx
mov bx, timer
delay1:xor cx, cx
delay2: loop delay2
dec bx
jnz delay1
pop cx
pop bx
ret
delayendp
標簽:8255A,al,mov,跑馬燈,call,dx,全滅,bx,out
來源: https://www.cnblogs.com/CongG/p/11951066.html
總結
以上是生活随笔為你收集整理的8255控制四个双色灯C语言,汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言编程思维训练50题,c语言逻辑思维
- 下一篇: 求最大素数的c语言,for语句计算输出1