一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 2656|回复: 8

刚接触LED,学习过程中遇到问题,求高手!付源码!

[复制链接]
发表于 2012-7-18 09:03 | 显示全部楼层 |阅读模式
本帖最后由 bison 于 2012-7-18 09:26 编辑

最近一个产品准备上LED显示,买了现成的控制卡!发现用单片机控制实在麻烦,准备自己做控制卡
CPU选用的STC12C5A60S2  
LED为08标准接口:
sbit LED_OE = P0^4;
sbit LED_R1 = P0^5;
sbit LED_R2 = P0^6;
sbit LED_A = P0^7;
sbit LED_B = P2^7;
sbit LED_C = P2^6;
sbit LED_D = P2^5;
sbit LED_STB = P2^4;   //锁存
sbit LED_CLK = P2^3;   //移位
//因为是自己做的一块控制板!所以连线很乱!
//非常奇怪  我这个LED是低位有效 高位在前
void R1_input(uchar dat)    //R1送数据
{
  uint data i;
  for(i=0;i<8;i++)
  {
    LED_CLK=0;
    if((dat & 0x80)  == 0)
      LED_R1=1;
    else
      LED_R1=0;
    LED_CLK=1;  //上升沿送数据
    dat=dat<<1;
  }
}

void R2_input(uchar dat)    //R2送数据
{
  uint data i;
  for(i=0;i<8;i++)
  {
    LED_CLK=0;
    if((dat & 0x80) == 0)
      LED_R2=1;
    else
      LED_R2=0;
    LED_CLK=1;  
    dat=dat<<1;
  }
}
void LED_output(void)  // 锁存数据
{
  LED_STB = 1;
  NOP;
  NOP;
  LED_STB = 0;
}
void ABCD_dec(uchar dat) //确定行参数
{
  LED_OE = 0;   //显示
  if(dat&0x01)
    LED_A = 1;
  else
    LED_A = 0;
  if(dat&0x02)
    LED_B = 1;
  else
    LED_B = 0;
  if(dat&0x04)
    LED_C = 1;
  else
    LED_C = 0;
  if(dat&0x08)
    LED_D = 1;
  else
    LED_D = 0;
}
void show_R1(void)
{
  uint data i , j;
  LED_OE = 1;   //显示
  for(j=0;j<16;j++)
  {
    for(i=1;i<=24;i++)
    {
   R1_input(i);
  }
    ABCD_dec(j);
    LED_output();  //锁存输出
  }
}



显示R2部分没写出来!上面是我研究两天LED的程序,基本可以实现显示,为什么说基本,下面我说我遇到的问题!


真心求教:
我用的是32*64点阵的3块板子!
输出程序:修改为送8个数据,即64位数据的时候第一块板正常显示1到8的二进制编码!
当程序如上面一段,一次送192个点的数据的时候,第一块板没有显示,第三块板显示1到8,第二块板显示9到16,第一块板无显示!
一次送128个点的数据的时候跟送192个点显示一样的!
求高手帮忙!为什么第一块没有显示!
 楼主| 发表于 2012-7-18 10:01 | 显示全部楼层
论坛看到的多时一块板子做的!我现在三块板子连接的时候发现有问题!求帮忙
回复

使用道具 举报

 楼主| 发表于 2012-7-20 12:03 | 显示全部楼层
失望啊!一个回复都没有!问题还没有解决!
回复

使用道具 举报

发表于 2012-7-20 14:05 | 显示全部楼层
我不会写程序,但是别人给我的一个程序,【现在是修改部分的程序】在用这个程序时候,注明了在显示一块屏和2块屏的时候,有些地方需要修改,不知道你是不是这个意思。

uchar BUFF[18];//2字是6,4字是10,8字应该18
void loadoneline(void);
void delay(uchar t);
void sendoneline(void);
void send(uint k);
/********************************************/
uchar two_onebyte(uchar h1,uchar h2)
{uchar temp,tempcol;
if(col<8) tempcol=col;
else tempcol=col-8;
temp=(h1<<tempcol)|(h2>>(8-tempcol));
return temp;
}
/*******************************************************/
void main(void)
{uchar i;
col=0;word=0;
SCON  = 0x00;       //串口工作方式0
V_RCK = 1;          //先拉低V_RCK///V_RCK = 0;
V_OER  = 0;          //关闭显示

   
hang=0x0002;        //行选信号初始化
while(1)
   {while(col<16)
      {for(i=0;i<SPEED;i++)
         {for(disrow=0;disrow<16;disrow++)
        {    loadoneline();
                    sendoneline();
            
   
                                         V_RCK = 1;          //锁存已发送的整一行的数据V_RCK = 1;
         V_RCK = 0;
         V_OER  = 0;          //关闭显示
         
        send(hang);         //发送行选择数据
       if(col<7)
                                          
                                            V_OER  = 1,
                                          

      delay(light);            //延时   
      hang=_irol_(hang,1);//行选信号调整,选中下一行
                                               
        
       }
               
       }
        col++;
  
      }
    col=0;word=word+32;
    if(word>=1024)word=0;//字数*32
   }
}
/****************把字模移入数组的子函数********************/
void loadoneline(void)
{uchar s;
for(s=0;s<9;s++)    //s为要显示的数字+1//4字是《5,8字应该《9    //s为要显示的数字+1
   {BUFF[2*s]=HZ[word+32*s+2*disrow];
    BUFF[2*s+1]=HZ[word+1+32*s+2*disrow];
   }
}
/*******************发送一行的子函数************************/
void sendoneline(void)
{char s;uchar inc;
if(col<8)inc=0;else inc=1;
for(s=0+inc;s<=15+inc;s++)  //s=2*要显示的数字-1//<15       //s=2*要显示的数字-1
回复

使用道具 举报

发表于 2012-7-21 16:38 | 显示全部楼层
回复 1# bison


   只有一个移位信号。R1,R2数据要同时发,不能分开的!
回复

使用道具 举报

 楼主| 发表于 2012-7-23 11:35 | 显示全部楼层
回复 5# xshisatc


    找到毛病了!硬件的问题!驱动一个屏的时候没问题!驱动多个屏的时候一定A上拉要2K!
回复

使用道具 举报

发表于 2012-7-23 23:37 | 显示全部楼层
回复 6# bison

A要上拉。。。不是吧。我的没有这个问题诶。
回复

使用道具 举报

 楼主| 发表于 2012-7-28 09:48 | 显示全部楼层
回复 7# xshisatc


    驱动一块屏的时候不需要!驱动多块屏的时候A要上啦!我也一直没弄明白为什么!但事实就是我A上啦了一个2K的电阻后正常了!上啦一个5K的电阻都不行!
回复

使用道具 举报

发表于 2012-7-28 20:48 | 显示全部楼层
端口输出电流不够的话,B、C、D应该也会有类似问题吖。。。为何只有A?
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-3-14 02:08 , Processed in 0.032061 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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