一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 8178|回复: 14

分享我的32*32全彩点阵

  [复制链接]
发表于 2010-7-15 01:59 | 显示全部楼层 |阅读模式
这是上个星期在二手市场淘的32*32全彩LED点阵板,经过一个星期的努力,终于能让它显示了,行用154,列用了24个595,现在只能显示简单的汉字,如果能让它显示时间就好了,但这对于一个初出茅庐的菜鸟来说是多么难实现的啊!现把资料贴出来,因为线路有点复杂没有画完整,不能仿真,只能当原理图,望大家谅解!

现在菜鸟正有个问题请教,这是个可以级联的595点阵程序,但我在程序上定义595的级联数却不能超过15个,哪位大哥可以帮帮忙???

#include "reg52.h"
#define BLKN 8          //列锁存器数(=LED显示字数*2)  就是这里,超过了15个程序就出错!!
#define TOTAL 4        //待显示字个数,本例共4个
#define CONIO P1        //显示控制口
sbit G=CONIO^7;         //CONIO.7为154译码器显示允许控制信号端口,0时输出,1时输出全为高阻态.
sbit CLK=CONIO^6;       //CONIO.6为595输出锁存器时钟信号端,1时输出数据,从1到0时锁存输出数据.
sbit SCLR=CONIO^5;      //CONIO.5为595移位寄存器清零口,平时为1,为0时,输出全为0.
unsigned char idata dispram[(BLKN/2)*32]={0}; //显示区缓存,四字共4*32单元
//**************字模表******************//
unsigned char code Bmp[][32]={
{0xEF,0xFF,0xEF,0x03,0x81,0xBB,0xDD,0xBB,0xDD,0xD7,0xEB,0xEF,0xF3,0xD7,0xCD,0xB9,
0x3E,0xFF,0xC0,0x07,0xFE,0xF7,0xFD,0xF7,0xFD,0xF7,0xFB,0xF7,0xF7,0xD7,0xEF,0xEF},/*--  文字:  努  --*/
{0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x80,0x03,0xFE,0xFB,0xFE,0xFB,0xFE,0xFB,
0xFE,0xFB,0xFD,0xFB,0xFD,0xFB,0xFB,0xFB,0xFB,0xFB,0xF7,0xFB,0xEF,0xD7,0xDF,0xEF},/*--  文字:  力  --*/
{0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF,
0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},/*--  文字:  学  --*/
{0xFF,0xFF,0xC0,0x03,0xFF,0xFB,0xF7,0xFB,0xFB,0xFB,0xFC,0xFB,0xFE,0xEB,0xFF,0x9B,
0xFE,0x7B,0xF9,0xFB,0xC7,0xFB,0xEF,0xFB,0xFF,0xFB,0xFF,0xDB,0xFF,0xEA,0xFF,0xF6},/*--  文字:  习  --*/
};
/***********延时函数(约1毫秒)************/
void delay(unsigned int dt)
{
register unsigned char bt;
for (; dt; dt--)
  for (bt=0; bt<255; bt++);
}
/*****************主函数 *********************/
void main(void)
{
register unsigned char i,j,k,l,q,w;
//初始化
SCON  = 0x00;              //串口工作模式0:移位寄存器方式
TMOD = 0x01;               //定时器T0工作方式1:16位方式
TR0 = 1;                   //启动定时器T0
CONIO = 0x3f;                 //CONIO端口初值
IE = 0x82;                 //允许定时器T0中断
//
while (1)
  {
delay(2000);             //2秒
//卷帘出显示文字,每次字数为BLKN/2,共显示TOTAL*2/BLKN次
for (w=0;w<TOTAL*2/BLKN;w++)
{
for (i=0;i<32;i++)      
    {
    for(q=0;q<BLKN/2;q++) {dispram[i+q*32]=Bmp[q+w*BLKN/2];}
      if (i%2) delay(120);
    }                     
delay(3000);
}
//第三种显示效果:左移出显示
  for (i=0; i<TOTAL; i++)   
    {
    for (j=0; j<2; j++)
      for (k=0; k<8; k++)
        {
        for (l=0; l<16; l++)
          {  
          for(q=0;q<BLKN/2;q++)
             {
              dispram[l*2+q*32] = dispram[l*2+q*32]<<1 | dispram[l*2+1+q*32]>>7;
              if(q==BLKN/2-1) dispram[l*2+1+q*32] = dispram[l*2+1+q*32]<<1 | Bmp[l*2+j]>>(7-k);
             else dispram[l*2+1+q*32] = dispram[l*2+1+q*32]<<1 | dispram[l*2+(q+1)*32]>>7;
          }
          }
        delay(100);
        }
    }
  delay(3000);
  }
}
//主函数结束
/**********显示屏扫描(定时器T0中断)函数**********/
void leddisplay(void) interrupt 1 using 1
{
register unsigned char m, n=BLKN;
TH0 = 0xFc;                //设定显示屏刷新率每秒62.5帧(16毫秒每帧)
TL0 = 0x18;
m = CONIO;                 //读取当前显示的行号
m = ++m & 0x0f;            //行号加1,屏蔽高4位
do {
   n--;
   SBUF = dispram[m*2+(n/2)*30 + n]; //送显示数据
   while (!TI); TI = 0;
   }while (n);             //完成一行数据的发送
G = 1;                     //消隐(关闭显示)
CONIO &= 0xf0;             //行号端口清○
CLK=1;                     //显示数据打入输出锁存器
CONIO |= m;                //写入行号
CLK=0;                     //锁存显示数据
G = 0;                     //打开显示
}
//
图像1.jpg
图像2.jpg
图像3.jpg
图像4.jpg
图像5.jpg
图像6.jpg
图像7.jpg
图像8.jpg

仿真图.rar

202.03 KB, 下载次数: 595, 下载积分: 一乐金币 -1

32 32点阵.rar

16.17 KB, 下载次数: 519, 下载积分: 一乐金币 -1

评分

参与人数 1一乐金币 +10 收起 理由
无锡风 + 10 正面漂亮! 反面杂乱。

查看全部评分

发表于 2010-7-15 06:34 | 显示全部楼层
漂亮!
回复

使用道具 举报

 楼主| 发表于 2010-7-15 07:50 | 显示全部楼层
回复 2# 无锡风


    谢谢夸奖!但能不能帮我解决一下程序问题啊?为什么595级联不能超过15个???
回复

使用道具 举报

发表于 2010-7-15 09:21 | 显示全部楼层
看这一句

unsigned char idata dispram[(BLKN/2)*32]={0}; //显示区缓存,四字共4*32单元

unsigned char为8位无符号字符变量,最大值为255,而BLKN变量为16的时候,[(BLKN/2)*32]=256,变量溢出了....
可以改为unsigned int型变量。
回复

使用道具 举报

发表于 2010-7-15 09:23 | 显示全部楼层
PS:看着那堆飞线俺腿有点软.....
回复

使用道具 举报

 楼主| 发表于 2010-7-15 18:39 | 显示全部楼层
回复 5# 199003326


    哦,我试试,非常感谢!!!
回复

使用道具 举报

 楼主| 发表于 2010-7-15 18:44 | 显示全部楼层
回复 4# 199003326


    不行啊,我改成了 int型变量但还是有错,大哥能说清楚点具体改哪里吗???
回复

使用道具 举报

发表于 2010-7-15 19:39 | 显示全部楼层
回复 7# panyusong


    这个俺就不知道了,俺也是菜鸟一个.....
回复

使用道具 举报

发表于 2010-8-13 21:53 | 显示全部楼层
记号,说实话,楼主运气来瞪喽,羡慕中
回复

使用道具 举报

发表于 2010-8-13 22:58 | 显示全部楼层
关注 不过平很漂亮
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-24 13:43 , Processed in 0.036232 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表