#include "myi2c.h" #include "keyboard.h" #include "delay.h" #define DRIVER 0x70 #define SCANNER 0x72 unsigned char keyboard_read_hardware(unsigned char scancode) { unsigned char ack,read; ack = StartI2C(DRIVER); WriteI2CByte( scancode ); StopI2C(); Delay10us(1); //I2C spec's siger min 4.7 uSec mellem stop og nęste start ack = ReStartI2C(SCANNER | 0x01); //read-mode read = ReadI2CByte(0); //Lastbyte StopI2C(); Delay10us(1); read &= 0x0F; //clear upper 4 bit if (ack) return read; else return 0; } unsigned char keyboard_read(void) { unsigned char read; read = keyboard_read_hardware(0x0E); switch(read) { case 0x0e: return 'C'; case 0x0D: return 'D'; case 0x0B: return 'E'; case 0x07: return 'F'; } read = keyboard_read_hardware(0x0D); switch(read) { case 0x0e: return 'B'; case 0x0d: return '9'; case 0x0B: return '6'; case 0x07: return '3'; } read = keyboard_read_hardware(0x0b); switch(read) { case 0x0e: return '0'; case 0x0d: return '8'; case 0x0B: return '5'; case 0x07: return '2'; } read = keyboard_read_hardware(0x07); switch(read) { case 0x0e: return 'A'; case 0x0d: return '7'; case 0x0B: return '4'; case 0x07: return '1'; } return 0; } unsigned char keyboard_read_safe(void) { static unsigned char last_read; unsigned char key,returnkey; returnkey = 0; key = keyboard_read(); if (last_read == 0 && key != 0) { returnkey = key; } last_read = key; return returnkey; }