www.pudn.com > ARM7_2114_iic.rar > LEDDISP.C


/**************************************************************************** 
* 文件名:LEDDISP.C 
* 功能:LED数码管显示。 
*      通过I/O模拟同步串口与74HC595进行连接,控制74HC595驱动LED数管显示。 
* 说明:将跳线器JP3短接。 
****************************************************************************/ 
#include  "config.h" 
 
#define   SPI_CS	0x20000000		/* P0.29 */ 
#define   SPI_DATA	0x00000040		/* P0.6 */ 
#define   SPI_CLK	0x00000010		/* P0.4 */ 
 
#define   SPI_IOCON	(SPI_CS|SPI_DATA|SPI_CLK)		/* SPI接口的I/O设置字 */ 
 
 
 
/**************************************************************************** 
* 名称:DelayNS() 
* 功能:长软件延时 
* 入口参数:dly		延时参数,值越大,延时越久 
* 出口参数:无 
****************************************************************************/ 
void  DelayNS(uint32  dly) 
{  uint32  i; 
 
   for(; dly>0; dly--)  
      for(i=0; i<50000; i++); 
} 
 
 
/**************************************************************************** 
* 名称:HC595_SendDat() 
* 功能:向74HC595发送一字节数据 
* 入口参数:dat		要发送的数据 
* 出口参数:无 
* 说明:发送数据时,高位先发送。 
****************************************************************************/ 
void  HC595_SendDat(uint8 dat) 
{  uint8  i; 
 
   IO0CLR = SPI_CS;			    // SPI_CS = 0 
   for(i=0; i<8; i++)			// 发送8位数据 
   {  IO0CLR = SPI_CLK;			// SPI_CLK = 0 
      /* 设置SPI的DATA输出值 */ 
      if( (dat&0x80)!=0 ) IO0SET = SPI_DATA; 
        else IO0CLR = SPI_DATA; 
      dat <<= 1; 
      IO0SET = SPI_CLK;			// SPI_CLK = 1 
   } 
    
   IO0SET = SPI_CS;			    // SPI_CS = 1,输出显示数据 
} 
 
 
/**************************************************************************** 
* 名称:main() 
* 功能:控制LED数码管显示。 
****************************************************************************/ 
int  main(void) 
{  const uint8  DISP_TAB[16] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,  
                                 0x88,0x83,0xC6,0xA1,0x86,0x8E }; 
   uint8  i; 		 
	 
   PINSEL0 = 0x00000000;		// 设置所有管脚连接GPIO 
   PINSEL1 = 0x00000000; 
    
   IO0DIR = SPI_IOCON;			// 设置SPI控制口为输出 
   while(1)	 
   {  for(i=0; i<16; i++) 
      {  HC595_SendDat(DISP_TAB[i]);	// 输出LED显示数据 
         DelayNS(1);			// 延时 
      }  
      
   } 
   return(0); 
}