1、新建项目,做好准备。
2、数码管段选表。
3、延时函数。
4、uchar i变量i;wk = 1打开位选,P0 = 0xf71111 0111第4位数码管显示,wk = 0关闭位选。
5、while(1) //死循环效果{} 。
6、dk = 1 //打开段选,P0 = leddata[i],dk = 0 //关闭段选,delay(100)//延时效果。
7、选择效果,限制i值的循环范围。
一位数码管循环显示1-9的汇编程序ORG
00H
:单片机启动地址
START:MOV
R2,#0
;要显示的第一个数为0
MOV
R5,#10
;要循环显示的次数10次
MAIN:
MOV
DPTR,#TAB
;显示编码表格首地址
MOV
A,R2
;
取要显示的数在R2种
MOVC
A,@A+DPTR
;查表
求要显示的数的编码
MOV
P3,A
;送P3口驱动7段数码管显示
INC
R2
;修改要显示的下一个数
LCALL
DELAY
;
调用延时子程序(稳定显示)
DJNZ
R5,MAIN
;循环显示次数减1
不等于0
继续显示
JMP
START
;从新转主程序
开始新一轮的显示
DELAY:MOV
R0,#5
;延时子程序
DELAY0:MOV
R7,#200
DELAY1:MOV
R6,#250
DJNZ
R6,$
DJNZ
R7,DELAY1
DJNZ
R0,DELAY0
RET
TAB:DB
DB
0C0H,
0F9H,
0A4H,0B0H,99H,92H,82H,0F8H,
DB
80H,
90H,;0~9的显示编码表格
END
;结束汇编、
ORG0000H
SJMP
MAIN
ORG
030H
MAIN:
MOV
R1,#00H
MOV
A,R1
D1:
ANL
A,#0FH
MOV
DPTR,#TAB
MOVC
A,@A+DPTR
查表
MOV
P0,A
P0口输出,显示数字
ACALL
DELAY
INC
R1
MOV
A,R1
A加1
CJNE
A,#10,D1
判断A是否到达10
LJMP
MAIN
当A达到10跳回主函数,重新赋值为0
DELAY:
MOV
R2,#05H
延时
D2:
MOV
R3,#0FFH
D3:
MOV
R4,#0FFH
DJNZ
R4,$
DJNZ
R3,D3
DJNZ
R2,D2
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
数值1到9的共阳极编码
END
补充说明两点:
1、程序下载到目标板之后,注意一下晶振频率,如果显示效果不佳,可以通过修改延时参数,调节刷新频率。
2、这里采用的是共阳极编码二极管(公共端已经接VCC了),下载程序前,请注意自己到网上找编码,代替倒数第二行代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)