汇编语言共阴极8位数码管计数 程序如下 ​

汇编语言共阴极8位数码管计数 程序如下 ​,第1张

你的仿真图中的两位数码的阴极同时接地了,就会同时显示11,22,33,44........

必须要采用两位动态扫描的方式来显示才行的。

所以,你的仿真图和程序都要修改。

仿真图如下:

程序如下:

DAT0 EQU 30H30H地址命名为DAT0

ORG  0000H

LJMP MAIN 主程序入口

ORG  0003H

LJMP EXINT0 中断0子程序

MAIN:

MOV  SP,#6FH设定堆栈地址

SETB IT0T0采用负缘触发信号

SETB EX0开中断0

SETB EA开中断总开关

MOV  DAT0,#0DAT0地址赋初始值0

LOOP:

CALL SEG7

SJMP LOOP循环等待

EXINT0:

MOV A,DAT0

ADD A,#1按十进制数加1

DA  A

MOV DAT0,A

RETI

SEG7: 显示子程序

MOV  DPTR,#DISPLAYTAB

MOV  A,DAT0

ANL  A,#0F0H取十位数

SWAP A

MOVC A,@A+DPTR

MOV  P0,#0FEH

MOV  P2,A   显示十位

ACALL DELAY 显示一位要延时

MOV  A,DAT0

ANL  A,#0FH

MOVC A,@A+DPTR

MOV  P0,#0FDH

MOV  P2,A   显示个位

ACALL DELAY 显示一位要延时

RET

DELAY: 延时子程序

MOV R7,#50

DER7:

MOV R6,#100

DJNZ R6,$

DJNZ R7,DER7

RET

DISPLAYTAB:

DB 3FH0 共阴

DB 06H 1

DB 5BH 2

DB 4FH 3

DB 66H 4

DB 6DH 5

DB 7DH 6

DB 07H 7

DB 7FH 8

DB 6FH 9

END

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]=

{

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,

}

sbit key1=P3^4

uchar num=0

void delay(uint z)

void main()

{

while(1)

{

P2=0xfe

P0=table[num]

delay(50)

if(key1==0)

{

while(!key1)

num++

}

if(num==10)

{

num=0

}

}

}

void delay(uint z)

{

while(z--)

}

看看吧,一个道理。


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

原文地址: https://outofmemory.cn/yw/7786947.html

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

发表评论

登录后才能评论

评论列表(0条)

保存