All pastes #9445 Raw Edit

Something

public text v1 · immutable
#9445 ·published 2005-04-12 22:54 UTC
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;
	}
}