Проектирование микропроцессорной системы управления
Описание алгоритма работы и разработка структурной схемы МКС. Схема вывода аналогового управляющего сигнала, подключения ЖК-дисплея, клавиатуры и аварийного датчика. Разработка блок-схемы алгоритма главной программы работы МКС. Функция инициализации.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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