#include "hc11_regs.h" #include "lcddisplay.h" #include "delay.h" void beep1(); void keypad(int&); void iloop(int&); void make(int&); bool flag = false; void display(int&); void brk(int&, int); int main() { volatile unsigned char *LED = (unsigned char*)0x1404; volatile unsigned char *DIP = (unsigned char*)0x1403; volatile unsigned char DipValue; volatile unsigned char holder; hc11_regs[PACTL] = 0x88; hc11_regs[DDRD] = 0xFF; hc11_regs[PORTD] = 0xFF; while((hc11_regs[PORTA] & 0x01) == 0x01) { *LED = *DIP; } *LED = 0x00; beep1(); while(true) { *LED = *DIP; DelayXms(500); holder = *DIP; holder = ~holder; *LED = holder; DelayXms(500); } while(true) { int number = 0x00; keypad(number); } return 0; } void make(int &number, int test) { int one, two; switch(test) { case 1: one = hc11_regs[PORTE] & 0x01; break; case 2: one = hc11_regs[PORTE] & 0x02; break; case 4: one = hc11_regs[PORTE] & 0x04; break; case 8: one = hc11_regs[PORTE] & 0x08; break; } Delay100us(); switch(test) { case 1: two = hc11_regs[PORTE] & 0x01; break; case 2: two = hc11_regs[PORTE] & 0x02; break; case 4: two = hc11_regs[PORTE] & 0x04; break; case 8: two = hc11_regs[PORTE] & 0x08; break; } if(one == two) { display(number); hc11_regs[PORTA] = number*16; brk(number,test); } } void brk(int &number, int test) { int one, two; switch(test) { case 1: one = hc11_regs[PORTE] & 0x01; break; case 2: one = hc11_regs[PORTE] & 0x02; break; case 4: one = hc11_regs[PORTE] & 0x04; break; case 8: one = hc11_regs[PORTE] & 0x08; break; } while(true) { Delay100us(); switch(test) { case 1: two = hc11_regs[PORTE] & 0x01; break; case 2: two = hc11_regs[PORTE] & 0x02; break; case 4: two = hc11_regs[PORTE] & 0x04; break; case 8: two = hc11_regs[PORTE] & 0x08; break; } if(one != two) return; } } void display(int &number) { volatile unsigned char *LED = (unsigned char*)0x1404; *LED = number; } void iloop(int &number) { if((hc11_regs[PORTE] & 0x01) == 0) make(number,1); number = number + 0x04; if((hc11_regs[PORTE] & 0x02) == 0) make(number,2); number = number + 0x04; if((hc11_regs[PORTE] & 0x04) == 0) make(number,4); number = number + 0x04; if((hc11_regs[PORTE] & 0x08) == 0) make(number,8); hc11_regs[PORTD] = 0x3F; return; } void keypad(int &number) { hc11_regs[PORTD] = 0x3B; iloop(number); hc11_regs[PORTD] = 0x3F; number = 0x01; hc11_regs[PORTD] = 0x37; iloop(number); hc11_regs[PORTD] = 0x3F; number = 0x02; hc11_regs[PORTD] = 0x2F; iloop(number); hc11_regs[PORTD] = 0x3F; number = 0x03; hc11_regs[PORTD] = 0x1F; iloop(number); hc11_regs[PORTD] = 0x3F; return; } void beep1() { int count = 0; while(count < 600) { hc11_regs[PORTA] = 0x20; Delay100us(); Delay100us(); hc11_regs[PORTA] = 0x00; Delay100us(); Delay100us(); count = count + 1; } }