前不久刚弄的类似显示程序,调整了下给你,看看有用不。电路图是4位显示的,程序已经改成了2位显示。
;单片机内存分配申明!
TEMPER_L EQU 28H ;用于保存计数值
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
ORG 0000H
LJMP MAIN
ORG 0040H
MAIN:
MOV SP,60H
MOV A,#00H
MOV P2,A
STAR:
MOV TEMPER_L,#0 ;初始化计数器,从0开始
stlop:
ACALL DISPLAY;调用显示子程序
INC TEMPER_L;对计数器加1
MOV A,TEMPER_L
CJNE A,#100,NEXT ;判断计数器是否满100?
MOV TEMPER_L,#0;满100就清零
NEXT: LJMP stlop;不满就循环执行
DISPLAY:
MOV A,TEMPER_L
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在a
MOV A_BIT,B ;个位在b
MOV DPTR,#NUMTAB ;指定查表启始地址
DPL1: MOV R7,#250 ;显示250次,数越小,显示频率越高,递增的越快。
DPLOP: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
SETB P2.3 ;开个位显示
ACALL D1MS ;显示1ms
CLR P2.3
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
SETB P2.2 ;开十位显示
ACALL D1MS ;显示1ms
CLR P2.2
DJNZ R7,DPLOP ;250次没完循环
RET
;1MS延时(按12MHZ算)
D1MS: MOV R5,#80
DJNZ R5,$
RET
;7段数码管0~9数字的共阳显示代码
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
END
2024-12-24 广告
剑魂列特 16:04:48
你好在线吗
yibunihao 16:09:08
恩 你好
剑魂列特 16:09:33
我是那个关于单片机提问的人想再请教你一点问题可以吗
yibunihao 16:09:46
呵呵 你好 说吧
剑魂列特 16:10:47
其实如果是一个显示器我会编程,但是两个显示器我就不知道怎么编了。我就想让第一个显示器一直显示“0”,第二个显示器从9开始倒数
yibunihao 16:11:10
是用数码管显示吗
剑魂列特 16:11:21
对的
剑魂列特 16:11:39
共阴逆序
yibunihao 16:11:48
那你可以了解下数码管的动态显示和静态显示
剑魂列特 16:12:05
我就是这个没懂
yibunihao 16:12:15
那我就按这个说吧
剑魂列特 16:12:17
我如果要让第一个显示器一直显示0是不是属于静态
yibunihao 16:12:22
先说静态
剑魂列特 16:12:27
好
yibunihao 16:13:02
动态静态不是从你看到的现象来区分的 你看到的都是一直亮
yibunihao 16:13:38
静态显示是说每一个数码管都接上单独的段选线
yibunihao 16:14:03
这样的话你操作其中一个的时候就不会对另外一个有影响
剑魂列特 16:14:17
这个是硬件决定的吗
yibunihao 16:15:38
对 是硬件决定 比如说 把P1口8条线接给数码管1的8个段选脚,P2口的8条线接给数码管2的8个段选脚,这时候你操作P1就是改变了数码管1的显示值,对数码管2没任何影响
yibunihao 16:16:06
同样 操作P2是改变了数码管2的值,对1也没影响
剑魂列特 16:16:35
哦我先问问同学我们是属于哪种
yibunihao 16:17:42
呵呵 你应该是了解之后自己去分析下你们用的哪种 静态的好处是软件控制很方便,相互之间没影响,可以随便显示都可以
剑魂列特 16:18:15
我们硬件是焊好的好像是动态的
yibunihao 16:18:30
但是很明显 它占用IO资源太多了 所以就这一条就让大部分人都不用它
yibunihao 16:18:41
下面说动态
剑魂列特 16:18:46
好
yibunihao 16:20:59
动态显示的硬件连接跟静态完全不一样 它是把所有数码管的段选都接在一起送给一组IO,然后每个数码管引出一个公共端,也就是位选端单独送给单片机的IO
yibunihao 16:21:51
这样就决定了如果说位选全部有效 那么你更改了段选值所有的数码管显示都跟着改变了
yibunihao 16:21:58
这个能理解不
剑魂列特 16:22:20
稍等理解ING
剑魂列特 16:22:55
对就这个问题
剑魂列特 16:23:03
所以我两个显示器编不来了
剑魂列特 16:23:55
能不能加下你的QQ我把硬件图给你看看吧帮忙分析下吧
yibunihao 16:24:04
呵呵 所以动态显示的原理就是这一时刻让数码管1显示5,关闭数码管2的显示,下一时刻让数码管2显示6,关闭数码管1的显示。如此循环,当它们之间相隔的时间短到一定程度的时候你的眼睛就分辨不出来了,看到就是两个数码管同时在显示 一个5,一个6
剑魂列特 16:24:29
对
剑魂列特 16:24:34
就是这句话
剑魂列特 16:24:38
我们老师说过
剑魂列特 16:26:11
那这种该怎么编程呢能不能举个列子
剑魂列特 16:29:25
这位大哥能不能加下QQ帮我看下程序啊
yibunihao 17:49:37
不好意思 我在公司 刚有点急事