74LS164是串入并出转换芯片,可以借助串口来实现,也可以用普通IO口模拟实现。举例如下:
#include<reg51h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit keyup=P3^6;
sbit keydn=P3^7;
void delay()
{
int i=1000;
while(i--);
}
main()
{
uchar i;
i=0;
SCON=0x00;
TI=1;
while(1)
{
SBUF=table[i];
while(TI==0);
TI=0;
delay();
if(keyup==0)
{
i++;
while(keyup==0);
}
if(keydn==0)
{
if(i>0)i--;
while(keydn==0);
}
i%=10;
}
}
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R0,#0
MOV R1,#3
LOOP:
MOV DPTR,#TABLE
MOV A,R0
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY
MOV P1,#00H
LCALL DELAY
DJNZ R1,LOOP
INC R0
MOV R1,#3
CJNE R0,#10,LOOP
MOV R0,#0
SJMP LOOP
DELAY:
MOV R2,#200
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
END
8255参考程序
486
DATA SEGMENT AT 0 USE16
PORTA EQU 203H ;A口
PORTB EQU 207H ;B口
PORTC EQU 20BH ;C口
CONTROL EQU 20FH ;控制口
PORT1 EQU 340H ;七段码段地址
PORT2 EQU 360H ;七段码位地址
ORG 4200H
DATA1 DB 6 DUP () ;输入数据区
ORG 4210H
DATA2 DB 6 DUP (?) ;显示缓冲区
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA,ES:DATA
ORG 2000H
BEG: JMP START
TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
DB 67H,77H,7CH,39H,5EH,79H,71H ;段码表
START: MOV AX,DATA ;初始化
MOV DS,AX
MOV ES,AX
MOV AX,0
MOV SS,AX
MOV SP,1000H
LEA DX,CONTROL ;8255初始化
MOV AL,10001001B ;
OUT DX,AL ;清显示
MOV DX,PORTA ;
MOV AL,00H ;
OUT DX,AL ;
LP:
LEA DX,PORTC ; AL= 读数据
IN AL,DX ;
LEA SI,DATA1 ;存数据
MOV [SI],AL ;
CALL CZ ;调用拆字子程序
CALL DISP ;调用显示子程序
JMP LP ;循环取数显示
CZ PROC
PUSH CX
LEA SI,DATA1 ; SI= 拆字,取数
LEA DI,DATA2 ;DI= 显示缓冲区首址
CZ0:
MOV BL,[SI]
AND BL,0F0H ;BL=
MOV CL,4
ROL BL,CL
MOV [DI],BL ;(DI)=
INC DI
MOV BL,[SI]
AND BL,0FH ;BL=
MOV [DI],BL
INC SI
INC DI
CMP SI, 08H ;
JBE CZ0
POP CX
RET
CZ ENDP
DISP PROC ;显示子程序
PUSH CX
PUSH DX
LEA BX,TAB
LEA SI,DATA2
MOV AH,0C1H
DISP1:
MOV DX,PORT2
MOV AL,AH
OUT DX,AL ; AL= , AL= 位输出
MOV DX,PORT1
MOV AL,[SI]
XLAT
OUT DX,AL ;AL= ,AL= 段输出
MOV CX,0200H
LOOP $
INC SI
SAL AH,1
OR AH,0C0H
CMP AH,0C0H
JNZ DISP1
POP DX
POP CX
RET
DISP ENDP
CODE ENDS
END BEG
用8255扩展I/O口显示6位的显示码。希望对你有帮助,
七段共阳数码管接在P0口,显示从0到9, 按键接P32按一下加一, 按键P33 按一下减一。程序如下:
K1 BIT P32
K2 BIT P33
START:MOV DPTR,#TABLE
MOV R1,#0
MLOOP:MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
JB K1 ,TK2
CJNE R1,#9,CPM
CPM:JNC MLOOP
INC R1
JNB K1,$
SJMP MLOOP
TK2:JB K2,MLOOP
CJNE R1,#0,CPN
SJMP MLOOP
CPN:DEC R1
JNB K2,$
SJMP MLOOP
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END
仿真图及效果
SCANLED EQU 30H
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1ISR ;扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#10H
MOV TH1,#0ECH
MOV TL1,#078H
MOV SCANLED,#0
SETB ET1
SETB TR1
SETB EA
SJMP $
;--------------------
T1ISR:
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
MOV R2,SCANLED
MOV A,#01H
CJNE R2,#0,T1DIS0
SJMP T1DIS1
T1DIS0:
RL A
DJNZ R2,T1DIS0
T1DIS1:
MOV P2,A
MOV A,SCANLED
INC A
MOVC A,@A+DPTR
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#8,T1END
MOV SCANLED,#0
T1END:
RETI
;--------------------
LEDTAB:
DB 0C0H ;"0" 00H
DB 0F9H ;"1" 01H
DB 0A4H ;"2" 02H
DB 0B0H ;"3" 03H
DB 99H ;"4" 04H
DB 92H ;"5" 05H
DB 82H ;"6" 06H
DB 0F8H ;"7" 07H
DB 80H ;"8" 08H
DB 90H ;"9" 09H
DB 88H ;"A" 0AH
DB 83H ;"B" 0BH
DB 0C6H ;"C" 0CH
DB 0A1H ;"D" 0DH
DB 86H ;"E" 0EH
DB 8EH ;"F" 0FH
DB 0FFH ;" " 10H
;--------------------
END
以上就是关于单片机控制74LS164控制数码管显示怎么编程(汇编语言)全部的内容,包括:单片机控制74LS164控制数码管显示怎么编程(汇编语言)、汇编语言 数码管显示0-9.每个数字闪烁三次,再显示下一个数字,如此循环。求程序,,、8086单片机七段数码管显示8位16进制计数器的汇编语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)