Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Программный код. //функции: программа для управления лазерным проектором






 

//********************************************************************

//имя файла: laser.с

//функции: программа для управления лазерным проектором

//контроллер: отладочная плата 68HC12B32 фирмы Motorola

//Выводы отладочной платы микроконтроллера 68HC12B32 фирмы Motorola:

//Port A: Конфигурирован как входной порт, активируемый нажатием

// бездребезговых переключателей на каждом входе

//Port B: Конфигурирован как выходной порт для управления светодиодным

// индикатором

//Port S: Конфигурирован как выходной порт, создающий двоичный код

// на канале X ЦАП

//Port T: Конфигурирован как выходной порт, создающий двоичный код

// на канале Y ЦАП

//Port P[0]: Конфигурирован как выходной порт, создающий TTL совместимый

// сигнал для управления затвором

//авторы: Steve Barrett and Daniel Pack

//создан: февраль 20, 2003

//последняя редакция: март 3, 2004

//********************************************************************

//включенные файлы

//********************************************************************

#include < 912b32.h>

 

//функции прототипов

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 в качестве выходного порта

PORTB=0x00; //включить красные светодиоды индикатора

DDRS=0xFF; //установить PORTT в качестве выходного порта

DDRP=0xFF; //установить PORTP в качестве выходного порта

}

//********************************************************************

/// /shutter(int action): открытие и закрытие затвора

//********************************************************************

void shutter(int action) {

if (action == open) PORTP = 0x01;

if (action == close) PORTP = 0x00;

}

 

//********************************************************************

//position_laser(unsigned char x_pos, unsigned char y_pos): посылает

//сигнал управления для каналов X и Y гальванометра из портов PORTS

//и PORTT соответственно.

//********************************************************************

void position_laser(char x_pos, char y_pos) {

PORTS = x_pos;

PORTT = y_pos;

}

 

//********************************************************************

//delay(void): создает задержку

//********************************************************************

void delay(void) {

int j;

for(j=0x0000; j< 0x1000; j=j+0x01) {

asm(" nop");

}

}

//********************************************************************

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.