/*------------------------------------------------------------
FILE NAME : SPI_LED.C
DEscrīptION : LED数码管显示。
通过I/O模同步串口与74HC164进行连接,控制74HC164驱动LED数管显示。
--------------------------------------------------------------*/
//--------------------Include files-------------------------//
#include <lpc2103.h>
//--------------------Variable ----------------------------//
//-------------------Function prototype-------------------//
//-------------------Function ----------------------------//
//-------------------Define-------------------------------//
#define SPI_MOSI 0x00000040 /* P0.6 */
#define SPI_MISO 0x00000020 /* P0.5 */
#define SPI_SCK 0x00000010 /* P0.4 */
#define BEEP 0x00000080 /* P0.7为蜂鸣器控制 */
#define SPI_IOCON 0x000000D0 /* SPI接口的I/O设置字,蜂鸣器设置 */
/*--------------------------------------------------------
NAME : delay()
FUNCTION : 长软件延时
ENTRY TYPE : unsigned int
RETURN TYPE : void
PURPOSE :
VERSION : 0.0.0
DEscrīptION :
CREATE DATE : 12.07.2006
LOGS :--\
- 1.create;
---------------------------------------------------------*/
void delay(unsigned int dly)
{ unsigned int i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
/*--------------------------------------------------------
NAME : hc164_send
FUNCTION : 向74HC164发送一字节数据,发送数据时,高位先发送
ENTRY TYPE : unsigned char
RETURN TYPE : void
PURPOSE :
VERSION : 0.0.0
DEscrīptION :
CREATE DATE : 12.07.2006 HC164_SendDat
LOGS :--\
- 1.create;
---------------------------------------------------------*/
void hc164_send(unsigned char dat)
{ unsigned char i;
IOCLR = SPI_MISO; // SPI_MISO = 0
for(i=0; i<8; i++) // 发送8位数据
{ IOCLR = SPI_SCK; // SPI_SCK = 0
/* 设置SPI的MOSI输出值 */
if( (dat&0x80)!=0 ) IOSET = SPI_MOSI;
else IOCLR = SPI_MOSI;
dat <<= 1;
IOSET = SPI_SCK; // SPI_SCK = 1
}
IOSET = SPI_MISO; // SPI_MISO = 1,输出显示数据
}
/*--------------------------------------------------------
NAME : main()
FUNCTION : 控制LED数码管显示。
ENTRY TYPE : void
RETURN TYPE : int
PURPOSE :
VERSION : 0.0.0
DEscrīptION :
CREATE DATE : 12.07.2006
LOGS :--\
- 1.create;
---------------------------------------------------------*/
int main(void)
{ const unsigned char DISP_TAB[16] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,0x8E };
unsigned char i;
PINSEL0 = 0x00000000; // 设置所有管脚连接GPIO
PINSEL1 = 0x00000000;
IODIR = SPI_IOCON; // 设置SPI控制口为输出
IOCLR = BEEP; // 打开蜂鸣器响一声
delay(100);
IOSET = BEEP;
while(1)
{ for(i=0; i<16; i++)
{ hc164_send(DISP_TAB[i]); // 输出LED显示数据
delay(50); // 延时
}
}
return(0);
}
//------------------ End of file ----------------------------//