【5字单色、10字双色LED点阵屏控制程序】(左移、上移、分屏、左移+停止、左覆盖、右
【过年了出点垃圾】5字、10字LED点阵屏(送ICCAVR程序),12864带背光液晶(附带程序)一帖中的5字LED、10字LED屏,程序环境为ICCAVR6.3,最初的程序修改自 qingwei_cui 阿伟的那个显示AVR的程序
里面用到的函数分别如下,用到哪个即调用哪个:
void fen(const unsigned char *p,unsigned int f); //静态显示
void fen_1(const unsigned char *p,unsigned int f,unsigned int num1); //静态显示调用的静止显示函数
void Left(const unsigned char *p,unsigned int f); //左移显示
void Left_S(const unsigned char *p,unsigned int f); //左移+Stop显示
void Up(const unsigned char *p,unsigned int f); //左移显示
void Left_C(const unsigned char *p,unsigned int f); //左覆盖显示
void Right_C(const unsigned char *p,unsigned int f); //右覆盖显示
其中main.c里面的595发送数据部分,是区别5字LED跟10字LED的地方,
5字LED驱动可以直接用程序里面的。
10字的需要修改
for (i=0x01;i>0;i=i<<1)
这一句为
for (i=0x80;i>0;i=i>>1)
即他们的区别是先发送最低字节还是最高字节,其他程序通用。
595发送子程序如下:
/*****************************************************************************
* 595发送一个字节数据(2字节输入的分别是红、绿数据的) *
*****************************************************************************/
void send_2byte(unsigned char byte1,unsigned char byte2)
{
unsigned char i;
lock_L();
for (i=0x01;i>0;i=i<<1)
{
if((byte1&i)==0)
R1_L();
else
R1_H();
if((byte2&i)==0)
G1_L();
else
G1_H();
clk_L();
clk_H();
}
}
5字的LED程序点击此处下载 ourdev_513095.rar(文件大小:112K) (原文件名:5LEDiccavr6.3.rar)
// M16+11.0592M+ICCAVR6.30
// 5字LED点阵屏控制板与LED 点阵屏接口定义
//PA口的01234顺序接138的A、B、C、OE1、OE2
//PB口的012345顺序接595的第一行红色、第一行绿色数据数据、Clk、Lock
10字的LED程序点击此处下载 ourdev_513096.rar(文件大小:102K) (原文件名:10字LED的ICCAVR程序.rar)
// M16+11.0592M+ICCAVR6.30
// 10字LED点阵屏控制板与LED 点阵屏接口定义
//PA口的01234顺序接138的A、B、C、OE1、OE2
//PB口的012345顺序接595的第一行红色、第一行绿色数据数据、
//第二行红色、第二行绿色数据数据、Clk、Lock
//但是 第二行数据在这里是与第一行同步的,送的数据相同
这两种屏的接口如下图所示:
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_512068.JPG
(原文件名:CIMG0001.JPG)
5字的显示效果如下:
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_513099.JPG
(原文件名:CIMG0005.JPG)
5字左移视频地址:http://www.tudou.com/v/SKkk_p9EydI
10字的显示效果如下:
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_512069.JPG
(原文件名:10字红色.JPG)
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_512070.JPG
(原文件名:10字绿色.JPG) 顶,买了2片 你速度真快啊,昨天买的吧?呵呵,我问了顺风快递,1.3公斤以内算1KG,以后2块屏的兄弟可以走顺丰快递了,呵呵。 买了的朋友可以参考一下。 你的左移算发太慢了;
其实驱动板的595就是一个很好的移位器, 用它做512长的屏也可以很快地移出来 呵呵,这个是笨办法做出来的,也是因为这个屏不适合顺序移动,因为它的595接法有点怪异,用过就知道了,我曾经头疼了很久,后来花350块买了一块控制卡,自己做了一个08接口转10脚的板子,在设置里面整了很多种组合,最后才搞定。
当然需要自己做转接板将ABCD+OE的信号先转换为ABC+OE1+OE2才可以使用市面上的控制卡控制。 买的还没驱动呢 恩,灌水,顶! mark 顶 ....................................... http://www.znmcu.cn/attachment/41_1_a59a431260fdee3.gif
(原文件名:复件 振南电子.PNG) 回复【4楼】polarbear 枫叶
----------------------------------------------------------------------
那最快的左移算法是什么样的?小弟不吝求教,忘成全!谢谢~ 还有卖不 还有啊,我昨天清理了一下,剩下最后4块了。都是有1-3个红色坏点的。 买了一片,刚刚按照jmpxwh 提供的电路和程序搭建了个驱动板
连接定义都没有问题
会显示http://cache.amobbs.com/bbs_upload782111/files_24/ourdev_523049.jpg
双斜 (原文件名:11.jpg)
双斜线和单斜线替换显示
拔掉ABC或者替换ACB斜线都会缺少或者混杂,应该能说明线是那样接是没错的
拔掉任何一根线都不能显示这样均匀的斜线
究竟是什么问题呢?高人解答下 原来是clk跟lock调换了。 足迹 今天有空,拿STM32F103VBT6 的小板点亮了,显示效果非常好,
等整理后上传。
另外买这块屏的朋友,使用3.3V的电源供电就不会烧行mos管了,也挺亮的,和5V比虽然差了些,但是避免了烧管子。
想亮的话适当调高电压。
先上部分代码
//屏幕大小 10字双色的只调试了上半屏
#define SCREEN_XSIZE80 LED屏幕宽度
#define SCREEN_YSIZE2 LED屏幕高度/8
INT8UDisplay_Buffer;//显示缓冲区,前一半数据为红色数据,后一半为绿色数据
//=============================================================================
//函 数 名: GUI_Refresh()
//功 能:显示刷新程序,每次刷新一行
//入口参数: 无
//出口参数: 无
//返 回 值: 无
//注 意:使用中断间隔1ms调用此函数一次,程序使用了数组缓存数据,
// 数据纵向倒序取模
//=============================================================================
void GUI_Refresh(void)
{
unsigned chari;
if(ScanCount==16)ScanCount=0;
if(ScanCount < 8)
{
for(i=SCREEN_XSIZE;i>0;)
{
if(Display_Buffer[--i] & Bit_Mask)
{ HC595_R_L;
}else{
HC595_R_H;
}
if(Display_Buffer & Bit_Mask)
{ HC595_G_L;
}else {
HC595_G_H;
}
HC595_CLK_L;
HC595_CLK_H;
}
}else{
for(i=SCREEN_XSIZE;i>0;)
{
if(Display_Buffer[--i] & Bit_Mask)
{ HC595_R_L;
}else{
HC595_R_H;
}
if(Display_Buffer & Bit_Mask)
{ HC595_G_H;
}else {
HC595_G_H;
}
HC595_CLK_L;
HC595_CLK_H;
}
}
LS138_OE1_H;
LS138_OE2_H;
HC595_LOCK_L;
HC595_LOCK_H;
switch(ScanCount)
{
case 0:LS138_C_L;LS138_B_L;LS138_A_L;LS138_OE1_L;break;
case 1:LS138_C_L;LS138_B_L;LS138_A_H;LS138_OE1_L;break; //如果端口是连续的
case 2:LS138_C_L;LS138_B_H;LS138_A_L;LS138_OE1_L;break; //此处分支可以优化为一条指令完成
case 3:LS138_C_L;LS138_B_H;LS138_A_H;LS138_OE1_L;break; //也可以用不用分支结构采取查表完成
case 4:LS138_C_H;LS138_B_L;LS138_A_L;LS138_OE1_L;break; //但是会影响到程序的移植性
case 5:LS138_C_H;LS138_B_L;LS138_A_H;LS138_OE1_L;break;
case 6:LS138_C_H;LS138_B_H;LS138_A_L;LS138_OE1_L;break;
case 7:LS138_C_H;LS138_B_H;LS138_A_H;LS138_OE1_L;break;
case 8:LS138_C_L;LS138_B_L;LS138_A_L;LS138_OE2_L;break;
case 9:LS138_C_L;LS138_B_L;LS138_A_H;LS138_OE2_L;break;
case 10: LS138_C_L;LS138_B_H;LS138_A_L;LS138_OE2_L;break;
case 11: LS138_C_L;LS138_B_H;LS138_A_H;LS138_OE2_L;break;
case 12: LS138_C_H;LS138_B_L;LS138_A_L;LS138_OE2_L;break;
case 13: LS138_C_H;LS138_B_L;LS138_A_H;LS138_OE2_L;break;
case 14: LS138_C_H;LS138_B_H;LS138_A_L;LS138_OE2_L;break;
case 15: LS138_C_H;LS138_B_H;LS138_A_H;LS138_OE2_L;break;
default: ScanCount=0;break;
}
ScanCount++;
} 发出去之后提示找不到网页,正郁闷着呢,没有先复制,刷新了一下,居然发出去了。
网络还没完全好啊。 使用STM32驱动成功,开的新帖
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3839001&bbs_page_no=1&search_mode=4&search_text=soulcoffee&bbs_id=9999 我也买了块。
现在才有空来驱动。
请问怎么样用51来驱动? 由于本人实在是菜鸟。
中间那3个插口,是电源插口吧,那个是电源,那个是地。 学习了 我的也驱动成功的。是用51来做的。
菜鸟编程,望高人能够有所指教!
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3923546&bbs_page_no=1&bbs_id=1006 make mark 我看了楼主的程序,怎么上移和左覆盖的内容一样的啊 mark mark 看来本坛另一个贴子,只是比较早的,左移算法,感觉写的真是麻烦,却置顶了,
本贴只热门,为LZ不F下 mark!~ mark 回复【18楼】soulcoffee CC
-----------------------------------------------------------------
大哥,你也是用ST的芯片啊,帮我看看好吗?
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5108219&bbs_page_no=1&search_mode=1&search_text=led点阵&bbs_id=9999
谢了! mark!~ mark
!{:smile:} 各位大侠谁能解释一下左移算法,一直没有想明白 标记一下!LED 强帖留名......
页:
[1]