需要NPN三极管。数码管又分为共阴极和共阳极两种类型,两个共阴极数码管显示88程序是需要NPN三极管进行驱动电路,三极管的集电极连接电源,发射极连接数码管的位选端,基极连接单片机进行控制。
将dispcode[]部分是数字显示的控制,输出时取反
将dispbitcode[]部分是数字显示的控制,输出时取反
还需要将电路中驱动的三极管由PNP改成NPN接地
你所说的“8” 0xff是共阴的,那么要是他点亮,8段数码管abcdefg都应该为1,h是小数点,没有用到,则是0
abcdefgh则为:11111110
把顺序倒过来就是01111111
把八为二进制分2组,四位一组
根据8421码:
8 4 2 1 8 4 2 1
-----------------------------------------------------
0 1 1 1 1 1 1 1
4+2+1=7 8+4+2+1=15 (分数下面是0的不用和上面相加的)
16进制中 10=a 11=b 12=c 13=d 14=e 15=f
即 0x7f
你上面说的8=0xff是把小数点也算上去了的!
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB ET0
SETB EA
MOV R0,#9
MOV R1,#9
MOV R2,#0
MOV R3,#9
CLR 00H
CLR 01H
LOOP:
JB P10,LP01
JNB P10,$
SETB TR0
CLR 01H
SJMP LOOP0
LP01:
JB P11,LP02
JNB P11,$
SETB 01H
SJMP LOOP0
LP02:
JB P12,LOOP0
JNB P11,$
CLR TR0
MOV P3,#0FDH
MOV P2,#0
MOV P3,#0FEH
MOV P2,#0
SJMP MAIN
LOOP0:
JB 00H,LOOP1
MOV A,R0
SJMP LOOP2
LOOP1:
MOV A,R1
LOOP2:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R3,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
JB 01H,T0C
INC R2
T0C:
CPL 00H
MOV A,R3
JB 00H,T001
MOV P3,#0FDH
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV P2,A
T002:
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
MOV A,R0
JZ T003
DEC R0
SJMP T0E
T003:
MOV A,R1
JZ T004
DEC R1
MOV R0,#9
T0E:
RETI
T004:
CLR TR0
RETI
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789
END
这程序很难写,简单给你分析一下原因。
数码管其实也是LED二极管,你的接法是数码管和LED灯的正负极刚好相反,是这样吧?那数码管亮,LED灯就灭。反之,数码管灭,LED灯就亮。在数码管动态扫描显示时,不亮的段所对应的LED灯就会亮,数码管扫描显示一遍,数码管是动态显示的,那LED灯也是动态点亮的,即都是在间断点亮,那效果就是全亮,与数码管显示的原理是相同的。
数码管可以控制显示数字,可LED灯却无法控制点亮几个,而是全亮,不能控制。
如果想特意控制LED灯几个亮,几个灭,那就有几个数码管的几段会亮,显示的肯定是乱码。
这数码管和LED灯互相影响,无法正常显示。你可以正常写一个数码管的程序,先不管LED灯,看实际效果是什么,是不是上述说的?
为什么要这么复用?是单片机I/O脚不够吗,那有很多扩展方法,也不能用这种方法,如果这种方法能行的话,早就有人这么做了,你以为,你很聪明能想到这种方法吗?
还是把电路改了吧,别自找麻烦,设计电路的时候也要考虑能不能写程序。
以上就是关于两个共阴极数码管显示88程序全部的内容,包括:两个共阴极数码管显示88程序、共阴极数码管替换成共阳极数码管如何改程序,希望高手帮忙..、单片机 共阴数码管。如何编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)