1. 我用74LS595做行驅動,74LS154做列驅動做了一個16×32的雙色點陣,急需C語言程序,隨便顯示什麼字。謝謝大
/***************************************************** 
       16*128 LED點陣屏 C 程序 
****************************************************** 
聲明: 
     本程序供大家學習之用,用勿用於商業用途。尊重版權。 
       
     編寫:鄧椿薪 
     時間:2006年1月20日 晚 
     郵箱:[email protected] 
******************************************************* 
//595連級輸出數據,138行驅動。P0_1為移動速度高速/*點陣顯示漢字程串口輸出字元數據, 
//P2口輸出行掃描信號,P2_7輸出595鎖存信號。*/   
#define uchar unsigned char    
#define uint unsigned int    
   
#include <REG51.H>    
#include <CODESUB.H>    
   
uchar yid,h,d=12;              //YID為移動計數器,H為行段計數器。    
uint zimuo,zimuo1;                 //字模計數器    
   
uchar BUFF[18];            //緩存    
void in_data(void);         //調整數據    
void rxd_data(void);        //發送數據    
   
void in_data1(char h);         
void rxd_data1(void);          
void sbuf_out1(void);   
   
void sendsw(uchar k);       //發送段代碼    
void sbuf_out(void);            //16段掃描    
void key(void);   
                   
sbit AN1=P3^4;   
sbit AN2=P3^5;   
   
sbit clk=P3^3;   
   
unsigned code sw[16]={0x7f,0x6f,0x5f,0x4f,0x3f,0x2f,0x1f,0x0f,0xf7,   
                   0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0}; /*16行段碼*/   
   
/********************************************/   
void main(void)   
{ uchar i;   
zimuo1=sizeof(hanzi)-6*32;//(zishu+9)*32;    
yid=0;   
zimuo=0;                                 
while(1)   
{   
    while(yid<100)                      //數據移位。    
    {   
        for(i=0;i<D;I++) if(zimuo 後移一個字, zimuo="zimuo+32*5;//zimuo+32;" yid="0;" } 移動一步 yid++; sbuf_out1();key(); { 移動速度>zimuo1)                //總數減7個字。   
   zimuo=0;   
}   
}   
void sbuf_out1()   
{   
char i;   
for(h=0;h<32;h++)   
{   
   
    in_data1(h);   
    clk=1;   
    rxd_data1();   
if(h>=16){i=h-16;}   
else i=h;   
   sendsw(sw[i]);   
       
}   
      
}   
   
/******************************************************/   
void in_data1(char h)   
{   
char s,i;   
    if(h>=16)   
    {i=(h-16);   
   
    for(s=5;s>=0;s--)            //h為向後先擇位元組計數器,zimuoo為向後先字計數器    
        {   
//       if(zimuo%32)    
         BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*i];            //把第一個字模的第一個位元組放入BUFF1中,第二個字模和第一個位元組放入BUFF3中    
         BUFF[2*s]=hanzi[zimuo+0+32*s+2*i];     // 把第一個字模的第二個位元組放入BUFF0中,第二個字模的第二個位元組放入BUFF1中    
        }   
    }   
    else   
    {   
     i=h;   
    for(s=5;s>=0;s--)            //h為向後先擇位元組計數器,zimuoo為向後先字計數器    
        {   
//      if(zimuo%32)    
         BUFF[2*s+1]=hanzi[zimuo+1+32*s+2*i];            //把第一個字模的第一個位元組放入BUFF1中,第二個字模和第一個位元組放入BUFF3中    
         BUFF[2*s]=hanzi[zimuo+0+32*s+2*i];     // 把第一個字模的第二個位元組放入BUFF0中,第二個字模的第二個位元組放入BUFF1中    
        }   
    }   
       
}   
   
/*******************************************************/   
void rxd_data1(void)                    //串列發送數據    
{   
char s;   
for(s=0;s<10;s++)             //發送5位元組數據    
    {   
   
     SBUF=255-BUFF[s];//把BUFF中的位元組從大到小移位相或後發送輸出。    
     while(!TI);TI=0;                    //等待發送中斷    
    }   
}   
void sendsw(uchar k)   
{       
     TI=0;   
     SBUF=k;   
        while(!TI);TI=0;   
        clk=0;   
               
}   
   
void key(void)   
{   
uchar a,b;   
if(AN1==0)   
    {   
        for(a=0;a<10;a++)   
            {for(b=0;b<14;b++){}}   
        if(AN1==0)   
        {while(AN1==0)   
            {}   
         if(AN1)   
            {d++;   
            if(d>100)   
                d=100;   
            }   
        }   
    }   
if(AN2==0)   
    {for(a=0;a<10;a++)   
            {for(b=0;b<14;b++){}}   
     if(AN2==0)   
     {while(AN2==0)   
        {}   
        if(AN2)   
        {d--;   
         if(d==0)   
          d=1;   
          }   
        }   
        }   
}   
不是我寫的,但我想會對你有用。
2. LED點陣程序
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineoutdatP2
sbitld=P3^0;
sbitlw=P3^1;
//數碼管顯示代碼專
unsignedcharcodetab[]={
0x01,0x02,0x03,0x04,0xFF,0xFF,0xFF,0xFF};
voiddelay1ms(unsignedintcount)//延時屬1ms
{
unsignedcharj;
for(;count>0;count--)
for(j=0;j<120;j++);
}
voiddisplay(unsignedcharnum)
{
outdat=tab[num];
ld=0;ld=1;ld=0;
outdat=0x01<<num;
lw=0;lw=1;lw=0;
delay1ms(2);
}
voidmain()
{
unsignedchari;
while(1)
{
for(i=0;i<8;i++)
{
display(i);
}
}
}
