
	
	//=================================================================================
	MAX7219.DATA_IN = DATA_IN; MAX7219.DATA_OUT = DATA_OUT; MAX7219.DATA_DIR = DATA_DIR;
	MAX7219.LOCK_IN = LOCK_IN; MAX7219.LOCK_OUT = LOCK_OUT; MAX7219.LOCK_DIR = LOCK_DIR;
	MAX7219.SHIFT_IN = SHIFT_IN; MAX7219.SHIFT_OUT = SHIFT_OUT; MAX7219.SHIFT_DIR = SHIFT_DIR;
	
	unit MAX7219
	{
		public link bit DATA_IN; public link bit DATA_OUT; public link bit DATA_DIR;
		public link bit LOCK_IN; public link bit LOCK_OUT; public link bit LOCK_DIR;
		public link bit SHIFT_IN; public link bit SHIFT_OUT; public link bit SHIFT_DIR;
		
		//---------------------------------------------------
		//ʼ
		public void init()
		{
			DATA_DIR = 1;
			DATA_OUT = 0;
			SHIFT_DIR = 1;
			SHIFT_OUT = 1;
			LOCK_DIR = 1;
			LOCK_OUT = 1;
			
			//ʽΪBCD
			send_byte( 0b0000_1001, 0x00 );
			
			//Ϊ
			send_byte( 0b0000_1010, 0x0F );
			
			//ɨĿΪ8
			send_byte( 0b0000_1011, 0x07 );
			
			//ǵģʽ - λ 0 ض, 1 
			send_byte( 0b0000_1100, 0x01 );
			
			//ǲģʽ - λ 0 ض, 1 
			send_byte( 0b0000_1111, 0x00 );
		}
		//---------------------------------------------------
		//
		public void set_light( uint8 d )
		{
			send_byte( 0b0000_1010, d );
		}
		//---------------------------------------------------
		//һ, 1-  0-Ϩ
		public void send( [uint8*?] data )
		{
			for( uint8 i = 0; i < 8; i + 1 ) {
				uint8 d = data[i];
				send_byte( i + 1, d );
			}
		}
		//==============================================
		void send_byte( uint8 addr, uint8 data )
		{
			uint16 d = data;
			d.8(uint8) = addr;
			LOCK_OUT = 0;
			loop( 16 ) {
				DATA_OUT = d.15(bit);
				d << 1;
				SHIFT_OUT = 0;
				SHIFT_OUT = 1;
			}
			LOCK_OUT = 1;
		}
	}
	
	
	
