1、首先我们先打开keil。
2、接着,我们要定义好库函数,void main(){while(1)//不断循环显示{dispaly();}}void dispaly(){P0=smg[1];//选择显示数字几,P1=0x7f;//控制是否点亮数码管。
3、接着,我们加上一条循环语句。delay(5);//显示5毫秒P0=0XFF;//消影P0=smg[2];P1=0xbf;delay(5);P0=0XFF;P0=smg[3]。
4、最后,我们把先前定义的延时语句delayms写好。
5、最后,点击这里进行编译,生成一个hex文件。
6、如果这里无错误警告的话,就说明我们的程序写对了,那我们就可以点亮动态数码管了。
ORG 00H
AJMP MAIN
ORG 30H
MAIN: LCALL DISP
MOV 20H,#1
MOV 21H,#2
MOV 22H,#3
MOV 23H,#4
AJMP MAIN
DISP: MOV A,20H
ACALL SEG7
MOV P0,A
SETB P2.0
ACALL DLY
CLR P2.0
MOV A,21H
ACALL SEG7
MOV P0,A
SETB P2.1
ACALL DLY
CLR P2.1
MOV A,22H
ACALL SEG7
MOV P0,A
SETB P2.2
ACALL DLY
CLR P2.2
MOV A,23H
ACALL SEG7
MOV P0,A
SETB P2.3
ACALL DLY
CLR P2.3
RET
DLY: MOV R7,#2
D1: MOV R6,#40
DJNZ R6,$
DJNZ R7,D1
RET
SEG7: INC A
MOVC A,@A+PC
RET
DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END
注意事项
1、至少包括4个功能:时间清零,启动计时,暂定计时,继续计时。
2、计时最小单位0.1 秒,最大计时时间999.9秒,
3、用数码管显示时间,同时要求按下任何一个功能键必须有声音提示。
4、使用方法: 设有启动键K1和暂停/清零键K2。按k1启动计时,按k2则暂停计时,再按k2则清零。
5、数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起。
另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
本回答被网友采纳ORG 00H
AJMP MAIN
ORG 30H
MAIN: LCALL DISP
MOV 20H,#1
MOV 21H,#2
MOV 22H,#3
MOV 23H,#4
AJMP MAIN
DISP: MOV A,20H
ACALL SEG7
MOV P0,A
SETB P2.0
ACALL DLY
CLR P2.0
MOV A,21H
ACALL SEG7
MOV P0,A
SETB P2.1
ACALL DLY
CLR P2.1
MOV A,22H
ACALL SEG7
MOV P0,A
SETB P2.2
ACALL DLY
CLR P2.2
MOV A,23H
ACALL SEG7
MOV P0,A
SETB P2.3
ACALL DLY
CLR P2.3
RET
DLY: MOV R7,#2
D1: MOV R6,#40
DJNZ R6,$
DJNZ R7,D1
RET
SEG7: INC A
MOVC A,@A+PC
RET
DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 099H;4
DB 092H;5
DB 082H;6
DB 0F8H;7
DB 080H;8
DB 090H;9
END
本回答被提问者采纳