本帖最后由 yumuzi 于 2015-3-20 15:13 编辑
[导读] 本文把原有的立方光硬件升级,让电路更简单,程序更简洁,以前的设计是由16个IC驱动的,好处是有可切换的坐标系,但16个IC和128根连接线的工作量实在不小,虽然控制程序只有60多行,但硬件的复杂让很多初学者望而却步。
本文把原有的立方光硬件升级,让电路更简单,程序更简洁,以前的设计是由16个IC驱动的,好处是有可切换的坐标系,但16个IC和128根连接线的工作量实在不小,虽然控制程序只有60多行,但硬件的复杂让很多初学者望而却步。
一直以来,我都在思考做什么样的设计给大家,就拿立方光来说,为了程序的简洁、易于理解,我的硬件电路不同于美国的原版设计,也因为8位单片机的局限性,这也是当时我能想到最好的解决方案。程序的简化是硬件的复杂弥补的。可是工作室的这种设计行吗?
就效果而言是可行的,后来很多网友都仿做了出来,可我觉得不行。美国原版的设计电路要比我的简单,那么有没有硬件更简单且程序更短的?抱着这种想法,我在11月初开始了设计,一周的时间,竟然完成了。
现在的立方光,硬件更简单,只有5个IC控制,不想用245的可以去掉,改为4个IC控制。这样硬件电路焊接比起之前的设计,大为简化,连接线也由以前的128根改为72根(和美国原作一样)。控制端口也有以前的三组改为2组16个。程序不但没有加长,反而更加简短。也不需要外接电源,USB供电即可。我实物用的是手机充电器供电,5V500ma,效果很好。这次的改进,唯一的缺点就是失去了可切换的坐标系,程序虽然简单,但需要一段时间理解。接下来就是秉承工作室传统,开始图文解说。
因为改了硬件,动画代码应该也做修改的,以为工作繁忙,就没时间做这部分了,所以大家看到的图案是与之前比,是上下颠倒的,有耐心的同学自己可以修改动画字符,每行的动画字符左右对称调换位置即可。这次的视频里,我特意修改的动画切换时间,而且这次也用的是非增强型单片机,就是想证明下,8位非增强型单片机,一样可以有这种效果,之前有网友评论说速度不够快,估计是没看程序就这么说了。
先是原理图:
左边的64个电阻其实是底面板的64个共阳点,我用的是2P弯排针固定,所以就用电阻来表示了,之前的原理图是用二极管表示的,其实都一样,反正就两个点。最后出来8跟总线,我在做的时候,是加了245做驱动的,其实后来想想,也可以不加,改为其他端口控制,加上限流电阻就可以了,这样可以再节省一个IC。当然,如果想保留P1、P3端口的,还是用P0做输出吧,加个245而已。 右边的64个电阻是侧面板的共阴极节点,点的一端接就是接线了,一共64根,接到4个154的输出端口即可。
实物焊接图
侧面板图
这是我焊接的64根连接线,这64根还是必不可少的,材料用的是8P插座,一头是8P的座子,一头是镀锡导线,很便宜,用起来非常方便。
底面板图
底面板与之前的设计比起来,没有了64根线,改为8根总线输出。
驱动板图
就是4个154顺序排列,布局是就看你的心情了。
驱动板背面
觉得自己的焊接还凑合吧
完工图
最后就是上程序了,有文本文档和HEX下载文件。中文注释暂时没时间编写,发布消息请留意工作室qq空间或工作室微博。
控制代码如下:
LED_Y EQU P2
LED_X EQU P0
ORG 00H
sjmp start ;开始程序
org 000bh ;定时中断0地址
sjmp count
START:
MOV SP,#60H
MOV DPTR,#TAB
MOV R0,#79H
MOV R1,#00H
mov r4,#10
MOV TMOD,#01H
mov ie,#82h
MOV TH0,#0d8H
MOV TL0,#0f0H
SETB TR0
MAIN:
MOV DPL,R0
MOV DPH,R1
MOV R2,#11100000B
cjne r1,#5ah,LED1
sjmp start
LED1:
lcall play
CJNE R2,#11110000B,LED1
MOV R2,#11010000B
LED2:
lcall play
CJNE R2,#11100000B,LED2
MOV R2,#10110000B
LED3:
lcall play
CJNE R2,#11000000B,LED3
MOV R2,#01110000B
LED4:
lcall play
CJNE R2,#10000000B,LED4
SJMP MAIN
play:
MOV LED_Y,R2
CLR A
MOVC A,@A+DPTR
MOV LED_X,A
mov r7,#80
DJNZ R7,$
MOV LED_X,#00H
INC DPTR
INC R2
ret
count:
DJNZ R4,NEXT
MOV R4,#10
mov r6,a
mov a,r0
add a,#64
mov r0,a
mov a,r1
addc a,#0
mov r1,a
clr cy
mov a,r6
NEXT:
MOV TH0,#0d8H
MOV TL0,#0f0H
RETI
完整程序请下载ASM文件。
|