实现在led数码管上显示数字

 

#include<reg52.h> #define uint unsigned int

//#define uchar unsigned char #define DecodeMode 0x09            // 译码模式寄存器

#define Intensity 0x0a                 // 亮度寄存器

#define ScanLimit 0x0b              // 扫描位数寄存器

#define ShutDown 0x0c               // 低功耗模式寄存器

#define DisplayTest 0x0f #define ShutdownMode 0x00            // 低功耗方式

#define NormalOperation 0x01         // 正常操作方式

 

#define ScanDigit 0x07                 // 扫描位数设置,显示8位数码管

#define DecodeDigit 0xff           // 译码设置,8位均为BCD码

#define IntensityGrade 0x0a          // 亮度级别设置

 

#define TestMode 0x01         // 显示测试模式 #define Testend 0x00                

 

sbit  din=P3^0;

sbit  load=P3^1;

sbit  clk=P3^2;

uint a,b,c,d=0;

uint table[]= {  

0x3f,0x06,0x5b,0x4f,0x66,0x6d,  

0x7d,0x07,0x7f,0x6f,0x77,0x7c,

 0x39,0x5e,0x79,0x71,0x00 };

uint table1[]= {   

0xfe, 0xfd,0xfb, 0xf7, 0xef,0xdf,0xbf,0x7f

};

void delay(uint t)

{    

for(a=0;a<t;a++)   

for(b=0;b<120;b++);

}

void  spi_write(uint bety,uint bet)

{  

din=1;

  load=1;

  clk=1;

  load=0;

  for(c=0;c<8;c++)  

{

   if(bety&0x80)     

   din=1;    
else       din=0;
    bety<<=1;   
  clk=0;
    delay(5);
    clk=1;
  }    
for(c=0;c<8;c++)  
{  
  if(bet&0x80)  
      din=1;    
else      
din=0;    
bet<<=1;    
clk=0;    
delay(5);    
clk=1;  
}    
load=1;  
}  
void spi_init()
{     spi_write(ScanLimit,ScanDigit);         // 设置扫描界限

   spi_write(DecodeMode,DecodeDigit);      // 设置译码模式

    spi_write(Intensity,IntensityGrade);    // 设置亮度

    spi_write(ShutDown,NormalOperation);    // 设置为正常工作模式

}

void main()

{
 spi_init();  
delay(2000);  
while(1) 
 {     
     for(d=0;d<8;d++)    

{      
  spi_write(table1[d],table[d]);            

}    

}

}