#include #include "tb386ex.h" #define BAR_LED 0x203 void main(void) { static const unsigned char M[] = { 0xBF,0xAF,0xA7,0xA3,0xA1, 0xA0,0xB0,0xB8,0xBC,0xBE, 0x41,0x88,0x8A,0x64,0x20, 0x82,0x66,0x80,0x40,0x87, 0x65,0x84,0x43,0x42,0x67, 0x86,0x8D,0x62,0x60,0x21, 0x61,0x81,0x63,0x89,0x8B, 0x8C}; unsigned int i,v = 450; unsigned char a,b,s; outportb(P2CFG, inportb(P2CFG) & 0xDF); outportb(P2DIR, inportb(P2DIR) | 0x20); LOOP1: b=0,s=0; LOOP: if(!(inportb(P2PIN) & 0x20)){ i=0; outportb(BAR_LED, 0); while (!(inportb(P2PIN)&0x20)){ for (a=99;a;a--); i++; } outportb(BAR_LED, 0xFF); if(i > v){ s = s << 1 | 1 ; v = (i / 3) << 1; } else { s = s << 1; v = i << 1; } b++; } i=0; while(inportb(P2PIN) & 0x20) { for(a=99;a;a--); i++; if(i > v && b != 0) { if(b == 8){ outportb(THR0DOS, 8); } if(b == 10){ outportb(P2CFG, inportb(P2CFG) | 0x20); return; } s |= b << 5; for(i = 0;i<36;i++){ if(s == M[i]) { outportb(THR0DOS, (i<10 )?(i+48):(i+55) ); } } goto LOOP1; } if (i > (v<<3) ){ outportb(THR0DOS, 32); while(inportb(P2PIN) & 0x20); } } goto LOOP; }