|
本帖最后由 Ultrady 于 2015-6-24 11:11 编辑
直接进入正题,视频说明一切~
【勘误!】先前的原理图是错误的!今天经过群友提醒才发现,马上做出更改!
本帖原理图已经替换,附件中的原理图文件也已经作出替换,请及时下载更新!
对受困惑的同学深表抱歉!2015年6月24日
其实很久以前就想要做个小光立方玩,但是一直懒。
后来看着同学做了个8x8x8的觉得不错,但是又觉得工程量太大成本太高,于是昨晚(15年5月8日)我就端着他的光立方看了十分钟,看透了原理之后回来当场就搭了这个2x2x2的,并且熬夜把程序写完(别说了,我现在也熬夜,四点半了(@﹏@)~ )。今天早上又加了呼吸灯模式,并且不停地调试呼吸速率以更接近我的深呼吸曲线。。重复下载了有一百多次,单片机都快爆了哈哈。第一次搭棚焊没经验,其实阳极引脚弯的方向错了,导致引脚在前面把灯挡住。不过一般来说也不会在正面看立方的,从右侧45°观看最佳,也没多大影响。
2片洞洞板用弯排针焊起来呈90°即可。电路连接是每一层共阴,给IO口低电平选通该层,然后每一列分别叫a,b,c,d,把这4个IO口模式设为推挽模式,强上拉输出点亮LED。我用的暖黄色LED八灯全亮时实测电流为34mA,STC12C单片机DIP20可以承受66mA的电流,所以不需要外围功率元件驱动。点击按键切换灯光花样,按钮接在外部中断0,所以任何时候按都灵光。总共有1个全亮状态和10个灯光花样,而且基于有限状态机,可以随时自己增加灯光花样。物料成本大概就十来块钱,非常适合新手入门制作玩,在STC单片机最小系统之外只需要1个开关2颗电阻8颗LED即可完成。扔掉你的排成一条线的跑马灯吧,同样的8个LED,立起来之后马上整个档次都不一样了~
这个电路还可以加个DS1302之类的时钟模块,做一个以8421码表示时间的钟,用4颗LED表示小时,分别是8,4,2,1,亮的灯加起来就是当前的小时。然后再用6颗LED表示分钟,分别是32,16,8,4,2,1,同理加起来就是当前的分钟~这个创意供各位参考,自己回去实现~只有自己看的懂也挺有意思。
看图说话。
接下来是说好的软件开源。
[pre lang="C" line="1"]/*————————————————————————————————————————
2x2x2光立方程序
Design by Radical
2015.5.9
CC-BY-NC
LOFTER:Ultrady.cn
————————————————————————————————————————*/
#include <STC12C2052AD.H>
int keysum = 0;
sbit layer1 = P1 ^ 6;
sbit layer2 = P1 ^ 7;
sbit a = P1 ^ 5;
sbit b= P1 ^ 4;
sbit c = P1 ^ 3;
sbit d = P1 ^ 2;
//呼吸灯部分的程序为杜洋《爱上单片机》例程基础上修改而成。
#define SPEED1 4 //变亮时间
#define SPEED2 5 //变暗时间
#define PWM 240 //亮度总级数
#define MAX 240 //设置最大亮度
unsigned int t = 1;
unsigned int i;
bit LOOP = 0; //循环切换标志
void delayms (unsigned int a){
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}
void delayus (unsigned int a){
unsigned char i;
while( --a != 0){
for(i = 0; i < 12; i++);
}
}
void delay(){
delayms(100);
}
void display (unsigned int a){
P1 = 0x3C;
delayus (a);
P1 = 0xFC;
delayus (PWM-a);
}
void xyround(){
a = 1;
delay();
a = 0;
b = 1 ;
delay();
b = 0;
c = 1;
delay();
c = 0;
d = 1;
delay();
d = 0;
}
void yzround(){
layer1 = 1;
a = 1;
b = 1;
delay();
layer2 = 1;
layer1 = 0;
delay();
a = 0;
b = 0;
c = 1;
d = 1;
delay();
layer1 = 1;
layer2 = 0;
delay();
}
void yzround_ad(){
layer1 = 1;
a = 1;
delay();
layer2 = 1;
layer1 = 0;
delay();
a = 0;
d = 1;
delay();
layer1 = 1;
layer2 = 0;
delay();
}
void yzround_bc(){
layer1 = 1;
b = 1;
delay();
layer2 = 1;
layer1 = 0;
delay();
b = 0;
c = 1;
delay();
layer1 = 1;
layer2 = 0;
delay();
}
//主程序采用有限状态机结构,可以随时增加灯光花样而不需要改动其他程序。
//增加花样时增加一个keysum的case即可,然后将下方的中断处理程序中最大的case号改动。
void main()
{
P1M0 = 0x00;
P1M1 = 0x3C;
EX0 = 1;//INT0中断允许
IT0 = 0;//INT0低电平中断
EA=1;//开总中断
P1=0x00;
while(1)//LOOP
{
switch (keysum){
case 0://Light
P1 = 0x3C;
break;
case 1://Blink
P1 = 0x3C;
delayms(500);
P1 = 0xFC;
delayms(500);
break;
case 2:
if(LOOP == 0){ //变亮循环
for(i = 0; i < SPEED1; i++){
display(t);
}
t++;
if(t>(MAX-2)){
LOOP = 1;
}
}
if(LOOP == 1){ //变暗循环
for(i = 0; i < SPEED2; i++){
display(t);
}
t--;
if(t<2){
delayms(750);
LOOP = 0;
}
}
break;
case 3://xy螺旋
P1=0x00;
layer1 = 1;
layer2 = 0;
xyround();
layer1 = 0;
layer2 = 1;
xyround();
break;
case 4://xy旋转
P1=0x00;
xyround();
break;
case 5://yz螺旋
P1=0x00;
yzround_ad();
P1=0x00;
yzround_bc();
break;
case 6://yz旋转
P1=0x00;
yzround();
break;
case 7://上下
P1 = 0x7C;
delayms(500);
P1 = 0xBC;
delayms(500);
break;
case 8://前后
P1 = 0x30;
delayms(500);
P1 = 0x0C;
delayms(500);
break;
break;
case 9://左右
P1 = 0x24;
delayms(500);
P1 = 0x18;
delayms(500);
break;
case 10://上下侧面
P1=0x00;
P1 = 0x24;
delayms(500);
P1=0x00;
P1 = 0x7C;
delayms(500);
P1=0x00;
P1 = 0x18;
delayms(500);
P1=0x00;
P1 = 0xBC;
delayms(500);
break;
case 11://上下前后
P1 = 0x7C;
delayms(500);
P1 = 0x30;
delayms(500);
P1 = 0xBC;
delayms(500);
P1 = 0x0C;
delayms(500);
break;
}
}
}
void ISR_Key(void) interrupt 0//中断处理程序
{
EX0 = 0;//INT0中断关闭
IE0=0;//清零外部中断0标志位
if (keysum < 11){//**********注意**********增加灯光花样后此处填写最大的case号。
keysum++;
}
else{
keysum = 0;
}
delayms(200);//延时一段时间
EX0=1;//恢复外部中断0
}[/code]
下面附件是开源文件,包括了12C2052AD的头文件和程序的.c文件还有原理图。
由于我本人也很讨厌在网上好不容易找到的资源又要注册又要回复有些还要给钱才能下(特别是某UDN网你们都懂得)
所以下载权限不设限制。不过还是希望大家喜欢的话顶一顶~
开源万岁!本项目基于CC协议开源,转发请署名注明出处,禁止商业用途。极客工坊首发。
本人是摄影摄像爱好者,也喜欢搞HIFI耳机,目前在校就读嵌入式专业,同时服务于国内2个音频产品厂商。
相同兴趣的同学欢迎找我聊天吹水~
个人LOFTER网站:Ultrady.cn
说实话做这个视频比做电路本身辛苦多了。。剪片剪了一晚上死多少脑细胞,腰散架了。
看看片场实拍。。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|