假如按键是一个开个,接在P1.0,八个灯在P0,低电平灯亮
程序是这样的
MOV 30H ,#00
LOP :
SETB P1.0
JNB P1.0, PRESS
AJMP LOP
PRESS:
INC 30H
MOV A,30H
CJNE A,#9,L_NEXT
MOV 30H,#1
L_NEXT:
JNB P1.0,$
MOV A,30H
CJNE A,#1 ,LED1_ON
CJNE A,#2, LED2_ON
CJNE A,#3, LED3_ON
CJNE A,#4, LED4_ON
CJNE A,#5, LED5_ON
CJNE A,#6, LED6_ON
CJNE A,#7, LED7_ON
CJNE A,#8, LED8_ON
LJMP LOP
LED1_ON: MOV P0,#0FEH //亮一个灯
LJMP LOP
LED2_ON: MOV P0,#0FDH //亮一个灯
LJMP LOP
LED3_ON: MOV P0,#0F8H //亮一个灯
LJMP LOP
LED4_ON: MOV P0,#0F0H //亮一个灯
LJMP LOP
LED5_ON: MOV P0,#0E0H //亮一个灯
LJMP LOP
LED6_ON: MOV P0,#0D0H //亮一个灯
LJMP LOP
LED7_ON: MOV P0,#080H //亮一个灯
LJMP LOP
LED8_ON: MOV P0,#00H //亮一个灯
LJMP LOP
8*8*8那就用8+8+8=24个IO口控制了,通过循环扫描的方式显示。分成8个平面,每个平面8行8列,8行用8个IO口 如P0,8列用8个IO口 ;
8个平面的行都用P0控制,P1口通过8个锁存器构成8组分别控制8个平面的列;
P2口则用来控制8个锁存器,控制其是否高阻。
这样每次显示一个LED,按照30HZ的频率,每秒需要扫描8*8*8*30=15360次,也就是65us一次。
若P0口的灌电流达到LED的要求,则直接连接LED,否则需要加驱动了,一般用三极管驱动,或者驱动芯片也行。
是不是时间不够?二极管质量不过关时有可能发生时间不够时会看不到光。建议单独点亮这个二极管测试,一定是脉冲点亮时间要和正常显示的时候一样,如果可以亮就看电源供电电流,如果不能亮但是常亮时能亮的话就换个管子吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)