注册 登录
编程论坛 单片机编程

怎样用1/8扫描方式在16*32的led显示屏控制行选信号?

cyy21021093 发布于 2011-06-14 11:12, 851 次点击
刚开始学习LED显示屏,现在想使用1/8扫描方式在16*128的led显示屏上显示16*16字模的汉字,程序运行上面8行可正确显示,下面8行处于全部点亮状态,请高手赐教!!谢谢!
显示程序如下:
    void _display()
   {
       int i,j,k,yu,cu;
     for(i=0; i<16; i++)
      {  
                IOSET = LED_EN;   
                        for(j=0; j<128; j++)
                        {   
                                yu = j%16;
                                cu = j/16;
   
   
                            if(yu>=8)
                            switch((DB[cu][2*i+1] >> (7-(yu-8))) & 0x01)
                            {
                                    case 1:
                                        IOCLR = LED_R1;
                                        break;
                                    case 0:
                                        IOSET = LED_R1;
                                        break;
                            }
                            else
                            switch((DB[cu][2*i] >> (7-yu)) & 0x01)
                            {
                                    case 1:
                                        IOCLR = LED_R1;
                                        break;
                                    case 0:
                                        IOSET = LED_R1;
                                        break;
                                    }
                                IOCLR = LED_SCK;
                                IOSET = LED_SCK; //移位脉冲        
                                       
                        }   
                        IOCLR = LED_EN;
                        IOCLR = LED_RCK;
                        IOSET = LED_RCK;    //锁存信号

                           IOPIN = (IOPIN & 0xff0fffff) |(i << 20); //行选择
                        nDelay(10000);
                    }
                    
                    
        }
2 回复
#2
CSharp_Go2011-07-01 16:02
写的真复杂,不想看
我正在教人写这类程序
有兴趣的
你先好好把硬件原理图SEND me
#include <reg52.h>
#include <intrins.H>
#include <stdlib.h>

sbit CLK=P3^2;    //clk

sbit R1=P1^2;     //Serial
sbit STB=P3^5;    //Load
sbit EN=P3^4;      //enable

int row_state=0;
int led_row=16;
int num=0;
char code table[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
,1,1,1,1,1,1,1,1,1};
void sendbyte_run_still()
{

          int i=0;


    for(i=0;i<64;i++)
    {
        CLK=0;
           P1=table[num+i];
        CLK=1;
    }

    num+=64;
}


void loadclk()
{
    nop_();
    STB=1;
    nop_();
    STB=0;
    nop_();
}
   //P0.0---P0.3 分别接LA,LB,LC,LD
void main()                                   
{
  EN=0;
while(1)
{
        if ( row_state==led_row ) {row_state=0;      num=0;}
        else row_state++;
        P0++;
        sendbyte_run_still();
        CLK=0;
        
        loadclk();
}
}



#3
CSharp_Go2011-07-01 16:03
这个程序属于删减版,很多冗余的,你参考参考吧
1