LED点阵设计

硬件部分:

软件部分:

 

#include<reg52.h> 
#define uchar unsigned char 
#define uint unsigned int 
#define speed   150    //移动速度
sbit RCLK1
=P3^0;
sbit SCLK
=P3^1;        //A--P1.0    B--P1.1   C--P1.2
sbit SDA=P3^2;
uchar idata disbuf1[
8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};      //显示缓冲
uchar idata disbuf2[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
uchar movbuf[
8];   //用于移动的缓冲区
uchar code numdata[10][8]=0xff,0xe7,0xdb,0xdb,0xdb,0xdb,0xe7,0xff,      /* 0 */
         
0xff,0xf7,0xe7,0xf7,0xf7,0xf7,0xe3,0xff,      /* 1 */
         
0xff,0xe7,0xdb,0xfb,0xf7,0xef,0xc3,0xff,      /* 2 */
         
0xff,0xe7,0xdb,0xf7,0xf7,0xdb,0xe7,0xff,      /* 3 */
         
0xff,0xf7,0xe7,0xd7,0xd7,0xc3,0xf7,0xff,      /* 4 */
         
0xff,0xc3,0xdf,0xe7,0xfb,0xdb,0xe7,0xff,      /* 5 */
         
0xff,0xe7,0xdf,0xc7,0xdb,0xdb,0xe7,0xff,      /* 6 */
         
0xff,0xc3,0xfb,0xf7,0xef,0xef,0xef,0xff,      /* 7 */
        
0xff,0xe7,0xdb,0xe7,0xdb,0xdb,0xe7,0xff,      /* 8 */
         
0xff,0xe7,0xdb,0xdb,0xe3,0xfb,0xe7,0xff };       /* 9 */

/****************************************************************
      延时子程序
***************************************************************
*/
void delay(uchar t)  
{
  
for(t;t<0;t--);
}   
/****************************************************************
      发送子程序
***************************************************************
*/
void Send_Byte(uchar d)
{
    uchar i 
= 8;
    
while( i-- )
 {
        SCLK 
= 0;
        SDA 
= (bit)(d&0x80); 
        d 
= d<<1
        SCLK 
= 1
    }
}
/****************************************************************
      显示子程序
***************************************************************
*/
void displed()
{
 uchar i,j;
   
for(i=0;i<speed;i++)
 {
  
for(j=0;j<8;j++)
  {
    Send_Byte(disbuf1[j]);
   Send_Byte(disbuf2[j]);     
   RCLK1
=0;
   P1
=7-j;
   RCLK1
=1;
   delay(
5);
  }
 }
}   

/****************************************************************
      左移子程序
***************************************************************
*/
void leftmove()

 uchar bitA
=0
 uchar i,j;
 
for(i=0;i<8;i++)  //每个数字移8次
 {
  
for(j=0;j<8;j++)
  {
    disbuf1[j]
<<=1;
   bitA
=disbuf2[j]&0x80//取高位,即最左边位
   if(bitA)disbuf1[j]|=0x01;    //移入
   disbuf2[j]<<=1;
   bitA
=movbuf[j]&0x80;
   
if(bitA)disbuf2[j]|=0x01;   //移入
   movbuf[j]<<=1;    
  }
  displed();  
 } 
}
/****************************************************************
      主程序
***************************************************************
*/
void main (void)
{
 uchar i,j;
 
while(1)
 { 
  
for(i=0;i<10;i++)
  { 
   
for(j=0;j<8;j++)
   {
    movbuf[j]
=numdata[i][j];
   }
   leftmove();    
//调用左移子程序  (一个字符送出显示)
  }
 } 
}

posted on 2008-09-13 21:34  hanfigo  阅读(898)  评论(2)    收藏  举报

导航