led 08 接口单元板试验成功(含Arduino源码,连线图)
一直想搞搞LED屏玩玩,呵,正好捡了块单元板,顺手玩了一把:http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_312842.JPG
(原文件名:DSCN1034.JPG) 用arduino驱动的,程序如下:
/*
显示流程:
1:传送595数据
2:关闭EN 1,关闭显示
3:切换行信息
4:刷新595,STB
5:开EN 0
6:延时 (刷新率调整)
*/
#define RowA 2 //行信号,驱动138
#define RowB 3
#define RowC 4
#define RowD 5
int hc138en=6; //138 使能
//使用了硬件SPI,以下脚不能更改
#define R1 11 //数据出 MOSI
#define CLK 13 //时钟 SCK
#define STB 10 //595 刷新显示SS
#define DATAIN12 //数据入,读FLASH时有用MISO
byte row=0;
byte hz[] =
{//智横排
0x20,0x00,0x22,0x04,0x3F,0x7E,0x48,0x44,
0x08,0x44,0xFF,0xC4,0x10,0x44,0x14,0x7C,
0x22,0x44,0x42,0x10,0x9F,0xF8,0x10,0x10,
0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,
//和横排
0x02,0x00,0x07,0x00,0x78,0x00,0x08,0x04,
0x0A,0xFE,0xFF,0x84,0x08,0x84,0x18,0x84,
0x1C,0x84,0x2A,0x84,0x2A,0x84,0x48,0x84,
0x88,0xFC,0x08,0x84,0x08,0x00,0x08,0x00,
//科横排
0x04,0x10,0x0E,0x10,0xF8,0x90,0x08,0x50,
0x08,0x10,0xFE,0x90,0x08,0x50,0x1C,0x14,
0x1A,0x1E,0x29,0xF0,0x28,0x10,0x48,0x10,
0x88,0x10,0x08,0x10,0x08,0x10,0x08,0x10,
//技横排
0x10,0x40,0x10,0x40,0x10,0x48,0x13,0xFC,
0xFC,0x40,0x10,0x40,0x10,0x40,0x13,0xF8,
0x1A,0x08,0x31,0x10,0xD1,0x10,0x10,0xA0,
0x10,0x40,0x10,0xB0,0x51,0x0E,0x26,0x04};
void spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
//return SPDR; // return the received byte
}
void hc138sacn(byte r){//输出行线状态ABCD (A低,D高)
digitalWrite(RowA,(r & 0x01));
digitalWrite(RowB,(r & 0x02));
digitalWrite(RowC,(r & 0x04));
digitalWrite(RowD,(r & 0x08));
}
void hc595senddata(byte data){// 高位在前反相(1亮0灭)
for (byte i=0; i<8;i++) {
digitalWrite(CLK,0);
if (data & 0x80) {
digitalWrite(R1, 0);
} else {
digitalWrite(R1, 1);
}
data=data<<1;
digitalWrite(CLK,1);
}
}
void setup () {
pinMode(RowA, OUTPUT);
pinMode(RowB, OUTPUT);
pinMode(RowC, OUTPUT);
pinMode(RowD, OUTPUT); //138片选
pinMode(hc138en, OUTPUT); //138 使能
pinMode(R1, OUTPUT);//595 数据
pinMode(CLK, OUTPUT); //595 时钟
pinMode(STB, OUTPUT); //595 使能
pinMode(DATAIN, INPUT); //595 使能
//digitalWrite(hc138d, HIGH);
Serial.begin(19200);
//SPI硬件设置
// SPCR = 01010000
//interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
//sample on leading edge of clk,system clock/4 rate (fastest)
SPCR = (1<<SPE)|(1<<MSTR);
delay(10);
}
void loop () {
if (Serial.available() > 0) {
// read the incoming byte:
row = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(row, DEC);
}
for(row=0;row<16;row++){
for (int i=0;i<4;i++){//8片595
//硬件SPI发送8字节耗时:22US
spi_transfer(~(hz));//硬件SPI
spi_transfer(~(hz));//硬件SPI
//软件SPI发送8字节耗时:770US
// hc595senddata(hz);
// hc595senddata(hz);
}
digitalWrite(hc138en, 1);//关闭显示
hc138sacn(row); //换行
digitalWrite(STB, 0); //595刷新
digitalWrite(STB, 1);
delayMicroseconds(500) ; //节电用,
digitalWrite(hc138en, 0);//开启显示
delayMicroseconds(500) ;//刷新频率调,差不多60HZ,1/16间隔
}
} 接线图:
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_312862.jpg
(原文件名:接线图.jpg) 没人理?
失败..... wxws,你好,不知道你手上还有没有 Arduino 的空白 PCB? 有原理图吗?另外问下:能左移吗?若能的话左移时字会斜吗? 4楼:有
5楼:左移右移正在写呢,上面程序中是固定的.
移动时不会斜,斜是因为速度问题而产生的.编程时可以尽量避免. 5楼:原理图没有,单元板大致都是一样的.
行是用两片138驱动,就是程序中的ABCD,2*8=16行
列是595,这个屏用了8片. 8*8=64列 wxws,太好了,我想买一块 PCB,你的 E-mail 是多少,我与你联系。
我的 E-mail 在我[资料]里可以看到。 到时候能贴出左移程序(不斜)借我参考一下吗? 你的Arduino pcb,我也想要一块,怎么和你联系购买?! 我的QQ:1103012
注明是OURAVR
9楼:斜是因为驱动速度问题而产生的.编程时可以尽量避免.
你看我程序中,为什么用硬件SPI? 就是这个道理
还没实测过,能驱动最大多少单元板,不过大致能算一下的.
程序写好了我再贴出来吧,这两天有点懒 ,
已经写了一个DEMO,不过感觉不好,用了一个大一倍的显存,刷新一次过若干秒再左移那个显存,然后再显示,,,,
再左移,,,,,
不斜,不过我只驱动了一块板. 在我的程序里如果左移时,移动一位的间隔速度大于0.5秒(估计值)时,移动的字是不会斜的,在移动时一切正常。
但当移动一位的间隔速度小于0.5秒或更低时,才会产生字斜的现象。稍后附原理图: 原理图:是SCH文件,下载后删除.JPG
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_319262.jpg
(原文件名:JAMSUN1.SCH.jpg) 12楼:
我试过,调得间隔太快,会有虚影,不过也不是斜呀. wxws:
呵呵,虚影倒没有,就是移动速度越快字斜的越厉害,用硬件SPI或IO口模拟SPI都试过了,算法也试了2种。。。
原理图见下:
点击此处下载 ourdev_319942.rar(文件大小:5K) (原文件名:595_138_.rar) 楼上
你控制多大点阵的屏还没说呢 16X64的 快凌晨3点你还上线啊!敬业,佩服! 呵,等儿子睡下才能上网呀
16*64,更不可能会斜了,肯定是你程序问题. 你的原理图看过了,啥问题地.你看注意一下程序的显示流程:
显存:HZ[]存放格式:字0-0,字0-1,字1-0,字1-1,..............
字0-2,字0-3,字1-2,字1-3...........
这样放,能有效提升显示速度
显示流程:
1:传送595数据 hz[行,列]
2:关闭EN 1,关闭显示
3:切换行信息
4:刷新595,STB
5:开EN 0
6:延时 (刷新率调整)
7:刷新间隔到了就向左移一位,(直接操作显存)
这样能提升速度. 前人的思路
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=851407&bbs_page_no=1&search_mode=1&search_text=led&bbs_id=9999 关注 楼主能不能给讲一下Arduino\arduino-0011\hardware文件夹下的目录结构,以及各个文件都实现什么功能?
另请amork给本贴置酷!
理由:1、代码齐全;
2、原创设计;
3、原理图也有
相比之下这个帖子都置酷了:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1000496&bbs_id=9999
楼主这个帖子不置酷,没道理,不符合本站的精神。
一点建议,见笑:-) 谢谢楼上,哈哈,
不过可能大家觉得这东东太小儿科了,所以没法酷了,呵呵
动手前我搜遍都没有找到直接驱动现成单元板的程序.只能自己瞎摸.
能找到的就是说一些原理,而且千篇一律,估计都认为是行业秘密,所以不开公开.
这两天正在驱动一个户外的单元板,1/4扫的,比这要复杂些.
不过原理差不多.
另:关于ARDUINO,你可以直接找我,QQ:1103012,
淘宝上也有的,不过我用了我老婆的号在拍.
http://auction1.taobao.com/auction/item_detail-0db1-58e3114f3b83ac45bc004215b18046eb.jhtml qq加不上,请另给个联系方式行吗 不可能吧?加不上???
mail:jyzhkj@163.com 我有这个屏的PCB啊
淘宝地址:http://auction1.taobao.com/auction/item_detail-0db1-9b9f5506550e43e113f513af2691a2bb.jhtml 关注. mark mark mark 上一次看了既然没马克, 这次马克上省的找了 mark 引用图片【13楼】sun4979
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_319262.jpg
(原文件名:JAMSUN1.SCH.jpg) mark 记号 学习了...... mark . 路过,看看
页:
[1]