单片机控制74LS164控制数码管显示怎么编程(汇编语言)

单片机控制74LS164控制数码管显示怎么编程(汇编语言),第1张

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进制计数器的汇编语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9271289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存