Проектирование микропроцессорной системы управления (МКС)

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

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 26.06.2016
Размер файла 3,3 M

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

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

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;

sbitLCD_RS_Direction at TRISB2_bit;

sbitLCD_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;

charkeypadPort at PORTD;

char key;

char counter = 0;

charflag_T = 0;

sbitX1 atRC3_bit; //битовая переменная X1 на линии порта RC3

sbitX2 atRC4_bit; //битовая переменная X2 на линии порта RC4

sbitX3 atRC5_bit; //битовая переменная X3 на линии порта RC5

sbitX4 atRC6_bit; //битовая переменная X4 на линии порта RC6

sbitX5 atRC7_bit; //битовая переменная X5 на линии порта RC7

sbitY1 atRE0_bit; //битовая переменная Y1 на линии порта RE0

unsignedint W1;

unsignedint W2;

unsignedint W3;

unsignedint W4;

unsignedint W5;

const code int K1 = 5

const code int K2 = 7;

const code int K3 = 10;

const code int K4 = 5;

const code int K5 = 4;

const code int Q = 20;

int M;

int N;

voidinit();

void digit();

void analog();

void display();

voidinterrupt()

{

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 == 280) //если прошло время опроса 4.2 с

{

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

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

counter = 0;

}

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

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

}

voidmain ()

{

init();

again:

digit();

analog();

opros:

key = 0;

key = Keypad_Key_Click();

if (key !=0)

display();

if (flag_T == 0)

gotoopros

else

{

flag_T = 0;

counter = 0;

TMR0 = 22;

goto again;

}

}

voidinit ()

{

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 = 22;

INTCON = 0xB0;

}

voiddigit()

{

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

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

f() =X1 || (!X2) && (!(X3 || X4 || X5));//вычисление //логической функции

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

{

Y1=1;

Delay_us(40);

Y1=0;

}

}

voidanalog()

{

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

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

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

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

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

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)

N=K1+W2; //вычисление функции g()

M=(W3+K3)/8;

if (N>M)

g =9•W1+N;

else

g =9•W1+M;

if(g>=Q)

{

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

Delay_ms(58);

Y3=0;

}

else

{

Y2 = 1;

Delay_ms(16);

Y2 = 0;

}

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

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

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

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

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

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

}

voiddisplay()

{

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

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

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

//вольтах

switch(key)

{

case 1:

{

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

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

Lcd_Cmd(_LCD_CLEAR);

Lcd_Out(1,4, "WorkMode");

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


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

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