Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
void initialize_ports(void); //инициализация портов
void shutter(int); //открытие/закрытие створок
void position_laser(unsigned char, unsigned char); // положение лазера
void delay(void);
#define open 1
#define close 0
//main program*************************************************************
//global variables
unsigned char new_PORTA, old_PORTA = 0xFF;
int i;
int go;
void main(void) {
//инициализировать
вектор reset B32
asm(".area vectors(abs)\n"
".org 0xFFF8\n"
".word 0x8000, 0x8000, 0x8000, 0x8000\n"
".text");
go = 1; //начало цикла while
initialize_ports; //инициализировать порты
shutter(close); //закрыть створки
position_laser(0x80,0x80); //расположить луч в центре
while(go) { //продолжать, пока не нажмут кнопку Stop
new_PORTA = PORTA; //read PORTA input switches
if (new_PORTA != old_PORTA) switch(new_PORTA){ //формировать образ по значению
//нажатой клавиши
case 0x7F: //PA7 - Точка в центре экрана
PORTB = 0x80;// подсвечивает светодиод порта PORTE
position_laser(0x80,0x80);
shutter(open);
delay;
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xBF: //PA6- горизонтальная линия
position_laser(0x00,0x80);
shutter(open);
for{i=0; i<=255; i++) {
i = (unsigned char)(i);
position_laser(i, 0x80);
delay;
}
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xDF: //PA5 - Вертикальная линия
PORTB = 0x20; // подсвечивает светодиод порта PORTB
position_laser(0x80,0x00);
shutter(open);
for(i=0; i<=255;i++) {
i=(unsigned char)(i);
position_laser(0x80,i);
delay;
}
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xFF: //PA4 - Правая пила под углом 45
градусов
// с Юго-Запада на СВ
PORTB = 0x10; // подсвечивает светодиод порта PORTB
position_laser(0x00,0x00);
shutter(open);
for(i=0; i<=255; i++) {
i = (unsigned char)(i);
position_laser(i, i);
delay;
}
shutter(close);
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xF7: //PA3 - Левая пила под углом 45 градусов
//с ЮВ на СЗ
PORTB = 0x08; // подсвечивает светодиод порта PORTB
delay;
PORTB=0x00; // включает красные светодиоды индикатора
break;
case 0xFB: //PA2 Окружность
PORTB = 0x04; // подсвечивает светодиод порта PORTB
delay;
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xFD: //PA1 Синусоида
PORTB = 0x02; // подсвечивает светодиод порта PORTB
delay;
PORTB=0x00; // включает красные светодиоды индикатора
break;
case 0xFE: //PA0 Остановка
PORTB = 0x01; // подсвечивает светодиод порта PORTB
position_laser(0x00,0x00);
shutter(close);
delay;
PORTB=0x00; // включает красные светодиоды индикатора
go = 0;
break;
case 0xFF:
break;
default:
; //все остальные случаи
}//конец switch(new_PORTA)
old_PORTA = new_PORTA;
}//конец if(new_PORTA ! = old_PORTA)
}//конец while(go)
}//конец main
//********************************************************************
// initialize_ports: производится конфигурация портов в качестве
//входных/выходных
//********************************************************************
void initialize_ports(void)
{
DDRA=0x00; //установить PORTA в качестве входного порта
DDRB=0xFF; //установить PORTB в качестве выходного порта
Поделиться с друзьями: