Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 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 в качестве выходного порта

Поделиться с друзьями: