rendered paste body#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;
}
}