#include "ioCC2530.h"
    #include "../lib/delay.h"
    unsigned char seg7table[16] =
    {
        /* 0       1       2       3       4       5       6      7*/
        0xc0,   0xf9,   0xa4,   0xb0,   0x99,   0x92,   0x82,   0xf8,
        /* 8       9      A        B       C       D       E      F*/
        0x80,   0x90,   0x88,   0x83,   0xc6,   0xa1,   0x86,   0x8e
    };
    
    unsigned char i;
    
    void SegInit()
    {
        P1INP &= ~( 0x1 << 2 );     //P1.2上拉
        P1SEL &= ~( ( 1 << 0 ) | ( 1 << 1 ) | ( 1 << 2 ) ); //P1.0,P1.1,P1.2为GPIO
        P1DIR |= ( 1 << 0 ) | ( 1 << 1 ) | ( 1 << 2 );      //P1.0,P1.1,P1.2为OUTPUT
        P0SEL &= ~( 1 << 4 );       //P0.4为GPIO
        P0DIR |= ( 1 << 4 );        //P0.4为OUTPUT
        //74HC595初始化
        P1 |= ( 0x1 << 0 );         //P1.0 CLR, 复位
        P1 |= ( 0x1 << 1 );         //P1.1 DATA,数据寄存器
        P1 |= ( 0x1 << 2 );         //P1.2 CLK,位移寄存器时钟输入
        P0 |= ( 0x1 << 4 );         //P0.4 LOCK,数据寄存器开始时钟
    }
    
    void SendSeg7( unsigned char value )
    {
        unsigned char i;
        P0 &= ~( 0x1 << 4 );        //P0.4 LOCK
        P1 &= ~( 0x1 << 2 );        //P1.2 CLK
        P1 &= ~( 0x1 << 1 );        //P1.1 DATA
        //将数据value的8个bit按串行方式分时赋值P1.1,P1.2控制时钟值高时读取P1.1
        for( i = 0; i < 8; i++ )
        {
            if( value & 0x80 )
            {
                P1 |= ( 0x1 << 1 );         //P1.1值1,DATA
            }
            else
            {
                P1 &= ~( 0x1 << 1 );        //P1.1值0,DATA
            }
            value <<= 1;
            P1 &= ~( 0x1 << 2 );    //P1.2 CLK
            P1 |= ( 0x1 << 2 );     //P1.2 CLK
        }
        P0 &= ~( 0x1 << 4 );        //P0.4 LOCK
        P0 |= ( 0x1 << 4 );         //P0.4 LOCK
    }
    
    void main( void )
    {
        SegInit();
    
        while( 1 )
        {
            for( int i = 0; i < 0x10; ++i )
            {
                SendSeg7( seg7table[i] ); //循环显示0-F
                delay( 2000 );
            }
            SendSeg7( 0xff );
            delay( 200 );
        }
    }