Проектирование микропроцессорной системы управления

Описание алгоритма работы и разработка структурной схемы МКС. Схема вывода аналогового управляющего сигнала, подключения ЖК-дисплея, клавиатуры и аварийного датчика. Разработка блок-схемы алгоритма главной программы работы МКС. Функция инициализации.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.06.2016
Размер файла 5,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

break;

}

case 2:

{

mvolts = ((long)W2*5000) / 0x03FF; //преобразование кода W2 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U2=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 3:

{

mvolts = ((long)W3*5000) / 0x03FF; //преобразование кода W3 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U3=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 4:

{

mvolts = ((long)W4*5000) / 0x03FF; //преобразование кода W4 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U4=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 5:

{

mvolts = ((long)W5*5000) / 0x03FF; //преобразование кода W5 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U5=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

}

}

3.7 Программа управления МКС

Программу управления для МКС назовем control.c. Ее текст может быть следующий.

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

Control.c - программа управления микроконтроллерной системой

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

/* Определения глобальных переменных */

//присоединение выводов ЖКД

sbit LCD_EN at RB3_bit;

sbit LCD_D4 at RB4_bit;

sbit LCD_D5 at RB5_bit;

sbit LCD_D6 at RB6_bit;

sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;

sbit LCD_EN_Direction at TRISB3_bit;

sbit LCD_D4_Direction at TRISB4_bit;

sbit LCD_D5_Direction at TRISB5_bit;

sbit LCD_D6_Direction at TRISB6_bit;

sbit LCD_D7_Direction at TRISB7_bit;

char keypadPort at PORTD;

char key;

char counter = 0;

char flag_T = 0;

sbit X1 at RC3_bit; //битовая переменная X1 на линии порта RC3

sbit X2 at RC4_bit; //битовая переменная X2 на линии порта RC4

sbit X3 at RC5_bit; //битовая переменная X3 на линии порта RC5

sbit X4 at RC6_bit; //битовая переменная X4 на линии порта RC6

sbit X5 at RC7_bit; //битовая переменная X5 на линии порта RC7

sbit Y1 at RE0_bit; //битовая переменная Y1 на линии порта RE0

sbit Y2 at RE1_bit; //битовая переменная Y2 на линии порта RE1

sbit Y3 at RE2_bit; //битовая переменная Y3 на линии порта RE2

unsigned int W1;

unsigned int W2;

unsigned int W3;

unsigned int W4;

unsigned int W5;

const code int K1 = 9;

const code int K2 = 79;

const code int K3 = 17;

const code int K4 = 21;

const code int K5 = 10;

const code int Q = 61;

int M;

int N;

void init();

void digit();

void analog();

void display();

void interrupt()

{

if(INTF == 1) //если запрос прерывания по INT

{

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,5,"ERROR");

Sound_Play(500,10000); //частоты 500Гц, 10секунд

while (1)

{

PORTB.B1 = 1; //включить светодиод

Delay_ms(500);

PORTB.B1 = 0;

Delay_ms(500);

}

}

//запрос прерывания от таймера TMR0

counter++;

if(counter == 100) //если прошло время опроса 1.6 с

{

flag_T = 1; //установить флаг окончания отсчета

//времени Топр = 1.6 с

counter = 0;

}

TMR0 = 12; //перезагрузить таймер

T0IF_bit = 0; //сбросить флаг запроса прерывания T0IF

}

void main ()

{

init();

again:

digit();

analog();

opros:

key = 0;

key = Keypad_Key_Click();

if (key !=0)

display();

if (flag_T == 0)

goto opros

else

{

flag_T = 0;

counter = 0;

TMR0 = 12;

goto again;

}

}

void init ()

{

TRISA = 0xFF;

TRISB = 0b11111101;

TRISC = 0b11111000;

TRISE = 0;

TRISD = 0xFF;

PORTE = 0;

PORTC.B0 = 0;

PORTC.B1 = 0;

PORTC.B2 = 0;

PORTB.B1 = 0;

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR);

Lcd_Cmd(_LCD_CURSOR_OFF);

Lcd_Out(1,4, "Work Mode");

ADC_Init();

Keypad_Init();

PWM1_Init(5000);

PWM2_Init(5000);

PWM1_Start();

PWM2_Start();

Sound_Init(&PORTC,0);

OPTION_REG = 0b11111111;

TMR0 = 12;

INTCON = 0xB0;

}

void digit()

{

bit f; //битовая переменная для хранения результата

//вычисления логической функции

f = X1||(!X2)||(!((!X3)&&X4||X5));

if(f==1) //если результат равен 1

{

Y1=1;

Delay_us(17);

Y1=0;

}

}

void analog()

{

int g; //двухбайтные переменные для хранения

int e; //результатов вычисления

int h; //функций g(), e(), h()

char DC; //переменная для рабочего цикла ШИМ

//чтение кодов АЦП

W1 = ADC_Read(0); //аналоговый канал 0 (сигнал U1)

W2 = ADC_Read(1); //аналоговый канал 0 (сигнал U2)

W3 = ADC_Read(2); //аналоговый канал 0 (сигнал U3)

W4 = ADC_Read(3); //аналоговый канал 0 (сигнал U4)

W5 = ADC_Read(4); //аналоговый канал 0 (сигнал U5)

M = 8*W1+K1-W3; //вычисление функции g()

N=2*K2+5W2;

if (M<N)

g = N;

else

g =M;

if(g>=Q)

{

Y3=1; //вывод сигнала Y3

Delay_ms(63);

Y3=0;

}

else

{

Y2 = 1;

Delay_ms(25);

Y2 = 0;

}

e=4*W4/K4; //вычисление функции e()

DC=e; //определить величину рабочего цикла

PWM1_Set_Duty(DC); //установить текущий рабочий цикл для //PWM1

h = 8*W5/K5; //вычисление функции h()

DC = h; //определить величину рабочего цикла

PWM2_Set_Duty(DC); //установить текущий рабочий цикл для //PWM2

}

void display()

{

int mvolts; //переменная для хранения величины напряжения в

//милливольтах

char num; //переменная для хранения цифр напряжения в

//вольтах

switch(key)

{

case 1:

{

mvolts = ((long)W1*5000) / 0x03FF; //преобразование

//кода W1 в /милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U1=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 2:

{

mvolts = ((long)W2*5000) / 0x03FF; //преобразование кода W2 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U2=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 3:

{

mvolts = ((long)W3*5000) / 0x03FF; //преобразование кода W3 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U3=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей

//вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 4:

{

mvolts = ((long)W4*5000) / 0x03FF; //преобразование кода W4 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U4=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

case 5:

{

mvolts = ((long)W5*5000) / 0x03FF; //преобразование кода W5 в милливольты

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "Work Mode");

Lcd_Out(2,4, "U5=");

num = mvolts / 1000;

Lcd_Chr_Cp(48+num); // вывод цифры в коде ASCII

Lcd_Chr_Cp('.'); //вывод на ЖКД десятичной точки

num = (mvolts / 100) % 10; //извлечение десятых долей вольта

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Chr_Cp(48+num);

num = (mvolts / 10) % 10;

Lcd_Out_Cp("V"); //в текущую позицию курсора

break;

}

}

}

Заключение

В курсовом проекте с поставленной задачей справились. Была разработана МКС управления некоторым технологическим объектом, а именно:

1. Структура МКС состоящая из объекта управления, микроконтроллера, пульта управления и аппаратуры их взаимной связи.

2. Структурная схема МКС.

3. Принципиальная схема МКС.

4. Программное обеспечение работы МКС.

Список литературы

Размещено на Allbest.ru


Подобные документы

  • Разработка структурной схемы и обобщенного алгоритма работы прибора. Оценка максимальной погрешности линейного датчика давления и нормирующего усилителя. Разработка элементов принципиальной электрической схемы микропроцессорной системы сбора данных.

    курсовая работа [2,1 M], добавлен 08.02.2015

  • Описание работы элементов программы в виде блок-схем. Анализ структурной схемы модели домофона. Блок-схема работы открытия двери ключом. Моделирование в Proteus: принцип динамического опроса и индикации, внешний вид жидкокристаллического дисплея.

    курсовая работа [1,4 M], добавлен 12.04.2019

  • Распределение функций между аппаратной и программной частями микропроцессорной системы. Выбор микроконтроллера, разработка и описание структурной, функциональной и принципиальной схемы. Выбор среды программирования, схема алгоритма и листинг программы.

    курсовая работа [304,4 K], добавлен 17.08.2013

  • Разработка алгоритма работы. Выбор и обоснование структурной схемы. Разработка функциональной схемы блока ввода и блока вывода. Проектирование принципиальной схемы блока ввода и блока вывода, расчет элементов. Разработка программного обеспечения.

    курсовая работа [1,7 M], добавлен 25.12.2011

  • История развития центрального процессора. Основные проблемы создания многоядерных процессоров. Проектирование микропроцессорной системы на базе процессора Intel 8080. Разработка принципиальной схемы и блок-схемы алгоритма работы микропроцессорной системы.

    курсовая работа [467,6 K], добавлен 11.05.2014

  • Виды терморегуляторов и их общее устройство. Разработка устройства для управления микроклиматом в теплице. Возможные варианты модернизации системы контроля температуры. Блок инициализации микроконтроллера. Разработка структурной схемы работы программы.

    курсовая работа [1,8 M], добавлен 27.05.2015

  • Разработка функциональной и принципиальной схемы. Выбор управляющего контроллера. Описание МК PIC16F626, МК AVR, МК 51. Выбор элементной базы. Разработка управляющей программы. Описание алгоритма работы программы. Схема устройства, листинг программы.

    курсовая работа [492,9 K], добавлен 28.12.2012

  • Общая характеристика и принцип работы электронных весов. Порядок преобразования аналогового сигнала веса в цифровую форму с участием микропроцессора. Составление блок-схемы алгоритма работы электронных весов. Описание интерфейсов ввода и вывода.

    курсовая работа [784,9 K], добавлен 28.06.2011

  • Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.

    курсовая работа [69,8 K], добавлен 13.02.2012

  • Процесс моделирования работы САПР: описание моделирующей системы, разработка структурной схемы и Q-схемы, построение временной диаграммы, построение укрупненного моделирующего алгоритма. Описание математической модели, машинной программы решения задачи.

    курсовая работа [291,6 K], добавлен 03.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.