;假设条件:
;A 采用共阳极数码管
;B P2口控制LED的段码,p20接A段,负输出有效
;C P1口控制位码,P10接最高位,P13接最高位,负输出有效。
;D 晶振采用12M
;E 数码管显示05S后自动加1
;程序:
ORG 0000H
LJMP 0080H
ORG 0030H
VAR1:DS 1 ;高位数据
VAR2:DS 1 ;低位数据
VAR3:DS 1 ;数码管位状态
VAR4:DS 1 ;暂存
VAR5:DS 1 ;周期
ORG 0080H
MOV SP, #60H
;初始状态为0000
MOV VAR1, #00H
MOV VAR2, #00H
MOV VAR3, #01H
;==关闭数码管====
MOV P1, #0FFH
MOV P2, #0FFH
MOV VAR5, #12
INT:
;==================================================
ACALL AJTDATA ;将两位数据调整成按每位输出的单独数据
ACALL OUTSIM ;数码管显示程序
;===================================================
;==以上两个小程序执行的时间约为40MS,
;所以,当延时12次以后,程序运行了480ms,
;子程序ADDONE就是等待约05秒后,显示数据自动加1
ACALL ADDONE
LJMP INT
ADDONE:
DJNZ VAR5, EXITADD
MOV VAR5, #12
MOV A, VAR2
CLR C
ADDC A, #01H
DA A
MOV VAR2, A
MOV A, VAR1
ADDC A, #00H
DA A
MOV VAR1, A
EXITADD:
RET
AJTDATA:
MOV R0, #VAR4
;最高位
MOV A, VAR1
SWAP A
ANL A, #0FH
MOV @R0, A
;第二位
INC R0
MOV A, VAR1
ANL A, #0FH
MOV @R0, A
;第三位
INC R0
MOV A, VAR2
SWAP A
ANL A, #0FH
MOV @R0, A
;第四位
INC R0
MOV A, VAR2
ANL A, #0FH
MOV @R0, A
RET
OUTSIM:
MOV R0, #VAR4
;送第一位
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV P2, A
MOV P1, #01H
ACALL DEL10 ;延时10MS,以保证数码管显示时的视觉延缓时间
;送第二位
INC R0
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
ANL A, #7FH ;将最高位,即小数点位清零,让其亮
MOV P2, A
MOV P1, #02H
ACALL DEL10
;送第三位
INC R0
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV P2, A
MOV P1, #04H
ACALL DEL10
;送第二位
INC R0
MOV A, @R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV P2, A
MOV P1, #08H
ACALL DEL10
RET
DEL10: ;10MS延时程序
MOV R6, #20
DEL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6, DEL1
RET
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,32H,82H,0F8H,80H,90H
END
>
这么简单的要求,不用大动干戈。
看看下面的程序,是不是最简单:
ORG 0000H
SETB TR0 ;启动T0
MOV R2, #250 ;定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 ;定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ ;等待8ms
CLR TF0
DJNZ R2, LOOP ;每隔8ms,R2减一次一
CPL P10 ;R2为0则LED亮灭转换
LJMP 0000H
END
本程序,已经实验成功。
以上就是关于51单片机倒计数编程全部的内容,包括:51单片机倒计数编程、怎么编写51单片机C程序让智能循迹小车,无论是否遇到障碍物都朝着目标走啊跪求大神解答。。、51单片机定时器的汇编语言程序编程,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)