/* Display funktion: ML15 emulation: Programming the ML15 interface is straightforward. The interface has two 8-bit registers: Display Mode Register, BASE Mode select. Bit 7-1, 0, Not used Bit 0 M; Mode 1 = Control Mode. 0 = Data Mode Display Data Register, BASE+1 This register is only accessible in 'Control Mode'. Bit 7 D; 1 = Turn display dot on 0 = Turn display dot off Bit 6-4 0; Not used Bit 3-0 B3-B0; Data. Hexadecimal form The following algorithm illustrates initiation of ML15 // Initiate controller 1 -> Display Mode Register 0x90 -> Display Data Register 0 -> Display Mode register The following algorithm illustrates how to show the ASCII characters '0','1'...'6' at the display assuming initialization as above // Write (always 8 bytes) to controller for( i = 0 ; i < 8; i++ ) -> Display Data Register */ #define DisplayModeRegister *(unsigned char*)0x9c2 #define DisplayDataRegister *(unsigned char*)0x9c3 #define DisplayControlRegister *(unsigned char*)0x9c3 extern unsigned char KNAPP; unsigned char TimeVector[8]={1,5,0,0,3,0,0,0}; extern unsigned short ClockScale; enum TimeFormat {HH,LH,HM,LM,HS,LS}; void DisplayData( void) { DisplayModeRegister=1; //Select Display Control Reg DisplayControlRegister=0x90;// DisplayModeRegister=0; //Select Display Data Reg TimeVector[4]=(KNAPP&0xF0)>>4; TimeVector[5]=KNAPP&0x0F; DisplayDataRegister=TimeVector[0]; // Data to be dislpayed DisplayDataRegister=TimeVector[1]; // Data to be dislpayed DisplayDataRegister=TimeVector[2]; // Data to be dislpayed DisplayDataRegister=TimeVector[3]; // Data to be dislpayed DisplayDataRegister=TimeVector[4]; // Data to be dislpayed DisplayDataRegister=TimeVector[5]; // Data to be dislpayed DisplayDataRegister=TimeVector[6]; // Data to be dislpayed//Dummy char DisplayDataRegister=TimeVector[7]; // Data to be dislpayed//Dummy } __interrupt void IRQCRGHandler( void ) { KNAPP++; DisplayData(); *(unsigned char*)0x0037|= 0x80;// Clear crg irq request } void CRGInit(void) { *(unsigned short*)0x3ff0=(unsigned short)IRQCRGHandler; *(unsigned char*)0x0038|= 0x80;// Clear crg irq request *(unsigned char*)0x003B= 0x1f;// Set Time base //div 8000 }