If you want it faster, change this to use SPI.transfer:
[color=#222222]void output(byte address, byte data)[/color][color=#222222][/color]
[color=#222222]{[/color][color=#222222][/color]
[color=#222222] digitalWrite(MAX7219_CS, LOW);[/color][color=#222222][/color]
[color=#222222] shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, address);[/color][color=#222222][/color]
[color=#222222] shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, data);[/color][color=#222222][/color]
[color=#222222] digitalWrite(MAX7219_CS, HIGH);[/color][color=#222222][/color]
[color=#222222] [/color][color=#222222][/color]
[color=#222222]}
clock from D13, data from D11, assume cs from 10:
[color=#222222]PORTB = PORTB & 0b11111011; // d10 low[/color]
[color=#222222]SPI.transfer(address);[/color]
[color=#222222]SPI.transfer(data);[/color]
[color=#222222]PORTB = PORTB | 0b00000100; // d10 high[/color]
[color=#222222]
With SPI defaults - MSBFIRST, Mode 0 and SPI clock at 4 MHz - will be a big time difference.
Import the SPI library. Sketch:Import Library:SPI
And fix all these
if (m9=0)
as has been pointed out.
You don't need all this in loop.
[color=#222222] initialise();[/color][color=#222222][/color]
[color=#222222] output(0x0f, 0x00); //display test register - test mode off[/color][color=#222222][/color]
[color=#222222] output(0x0a, 0x0f); //intensity register - max brightness[/color][color=#222222][/color]
[color=#222222] output(0x09, 0xff); //decode mode register - CodeB decode all digi[/color][color=#222222]ts[/color][color=#222222]
[/color]
[color=#222222] output(0x06, h2);[/color][color=#222222][/color]
[color=#222222] output(0x05, h4);[/color][color=#222222][/color]
[color=#222222] output(0x04, m5);[/color][color=#222222][/color]
[color=#222222] output(0x03, m9);[/color][color=#222222][/color]
[color=#222222] output(0x02, s5);[/color][color=#222222][/color]
[color=#222222] output(0x01, s9); //digit 0 (rightmost digit) data[/color][color=#222222][/color]
[color=#222222] delay (1);[/color]
[color=#222222]