你的仿真图中的两位数码的阴极同时接地了,就会同时显示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--)
}
看看吧,一个道理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)