Помощь в написании студенческих работ
Антистрессовый сервис

Разработка игры на микроконтроллере C8051F043

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Функция int rand_d () Возвращает псевдослучайные целые числа в диапазоне от 0 до 10. Возвращаемое значение считается следующим образом. Стандартная функция rand () языка С вызывается 2 раза, суммируется попарно с квадратами значений передаваемыми функциями get_adc (1) и get_adc (2). Полученные суммы перемножаются между собой и вызываемой в третий раз функцией rand (). Остаток от деления на 11… Читать ещё >

Разработка игры на микроконтроллере C8051F043 (реферат, курсовая, диплом, контрольная)

1. Составление алгоритма работы

2. Составление программы работы системы управления с использованием языка С

3. Описание элементной базы, выбранной для реализации схемы

4. Описание принципиальной схемы микропроцессорного блока системы управления Заключение Список литературы Приложение

В настоящее время все современные системы автоматизации и контроля обязательно содержат средства вычислительной техники (интегральные микросхемы микропроцессоров, микроконтроллеров, сигнальных процессоров и т. п.), которые служат мозговым центром и базовыми элементами любой интеллектуальной системы управления.

Системы сбора данных и управления технологическими процессами, интеллектуальные датчики, счетчики расхода электрической энергии и воды, средства телекоммуникаций, контроллеры систем электропитания, интеллектуальный электропривод и преобразователи частоты, измерительные приборы разного назначения, контроллеры бытовых приборов, источники бесперебойного питания — вот лишь начало бесконечного перечня примеров применения средств вычислительной техники.

Сегодня в мире производится несколько десятков тысяч типов различных микроконтроллеров. Среди них особое место занимают так называемые х51-совместимые микроконтроллеры, т. е. микроконтроллеры, совместимые с одним из первых типов микроконтроллеров — i8051.

Не смотря на почти двадцатилетнюю историю своего существования, эти микроконтроллеры и сегодня занимают лидирующее место и являются «defacto» всемирным промышленным стандартом. х51 -совместимые микроконтроллеры выпускаются практически всеми известными мировыми производителями, такими как Intel, Atmel, Maxim-Dallas, GoalSemicondactor, Hyundai, Philips, Infineon, Temic, Winbond, ICSI, ISSI, OkiSemicondactor, Sharp, STT, Cypress, TexasInstruments, STM, TDK, SiLabs (Cygnal) и многими другими.

1. Составление алгоритма работы

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

xo, yo — координаты окружности, от которых начинается ее построение.

po — позиция окружности. Всего возможны 4 варианта изначального расположения окружности (верх-лево, верх-право, низ-лево, низ-право), из которых, собственно, и начинается движение шариков. Изначальное расположение выбирается случайным образом. Номер позиции передается в переменную-флаг — fl_okr.

lvl_spd — переменная которая определяет скорость движения шариков.

fl_h_r, fl_h_l — переменные флаги, в которых фиксируется положение рук.

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

Функция int rand_d () Возвращает псевдослучайные целые числа в диапазоне от 0 до 10. Возвращаемое значение считается следующим образом. Стандартная функция rand () языка С вызывается 2 раза, суммируется попарно с квадратами значений передаваемыми функциями get_adc (1) и get_adc (2). Полученные суммы перемножаются между собой и вызываемой в третий раз функцией rand (). Остаток от деления на 11 полученного произведения и есть и есть наше возвращаемое значение.

Функция void put_line () выводит отрезок по двум заданным конечным точкам. В основе функции лежит формула прямой y=kx, где k равен тангенсу угла наклона прямой относительно оси ох декартовой системы координат. Изначально передаваемы координаты точек передаваемые в функцию приводятся к стандартному виду x1

Функция select_hand () включает в себя целое дерево используемых функций. Сама функция select_hand () лишь поочередно вызывает функции left_hand () и right_hand (), предварительно очистив рабочую область. Функции left_hand () и right_hand () отвечают за выбор положения левой и правой рук соответственно. Обе функции считывают значения аналого-цифрового преобразователей: с первого считывает функция отвечающая за левую руку, со второго соответственно — правая. В зависимости от полученных значений возвращается значение флага положения рук и вызывается функция прорисовки положения рук.

2. Составление программы работы системы управления с использованием языка С

Для составления программы работы микропроцессорного модуля был применён язык высокого уровня С, который по сравнению с другими языками работает напрямую с ассемблером контроллера управления. Для разработки и компиляции была выбрана интегрированная среда разработки Silicon Laboratories IDE и комплект программного обеспечения фирмы Keil (макроассемблер, линкер, библиотеки и эволюционная версия компилятора языка С).

Для начала работы необходимо создать новый проект и добавить в него необходимые файлы.

Следующим этапом является непосредственное написание программы, согласно которой будет работать контроллер. В программу необходимо включить необходимый заголовочный файл «c8051F040.h», в котором происходит инициализация всех глобальных переменных и констант. Любая программа непосредственно начинает выполняться в главной функции void main (). Внутри этой функции выполняется инициализация необходимых регистров и функций.

#include // SFR declarations

#include

#include

extern void config (void);

extern void external_osc (void);

sbit RWpin = P15;

sbit Epin = P16;

sbit DIpin = P14;

sbit CS1pin = P31;

sbit CS2pin = P30;

sbit RSTpin = P17;

sfr b_dat = 0xA0; //P2

Для реализации режима реального времени запускаем бесконечный цикл «while (l)» который выполняется до тех пор, пока в скобках содержится значение «true».

Вложенный цикл while (score≠99) обеспечивает процесс самой игры, внутри него последовательно вызываются функции После составления всей программы необходимо произвести компиляцию программы и её преобразование в двоичный код для загрузки в память контроллера.

3. Описание элементной базы, выбранной для реализации схемы

игра микроконтроллер микропроцессорный модуль Для реализации микропроцессорного блока управления был выбран микроконтроллер C8051F043 следующие характеристики:

Параметр

Условия

Мин.

Норма

Макс.

Напряжение питания аналоговой части. В

Напряжение питания аналоговой части должно быть больше 1 В для работы супервизора питания

2,7

3,0

3,6

Ток потребления аналоговой части, мА

VREF, ADC, DACs и компараторы включены

1,7

Ток потребления при выключенной аналоговой части, мА

VREF, ADC, DACs, компараторы и генератор выключены

Допустимая разница напряжений питания аналоговой и цифровой частей, В

| VDD — VA+ |

0,5*

Напряжение питания цифровой части, В

2,7

3,0

3,6

Ток потребления цифровой части в активном режиме, мА

VDD = 2,7 В, Clock = 25 МГц

VDD = 2,7 В. Clock = 1 МГц

VDD = 2,7 В, Clock = 32 кГц

0,5

10 мкА

Ток потребления цифровой части в пассивном режиме, мкА

Генератор выключен

Напряжения сохранения данных в RAM, В

1.5

Рабочий температурный диапазон, °С

— 40

+85

Состоит из трех функциональных групп: аналоговой периферии (Analog Peripherals), цифровой периферии (Digital Peripheralsor DigitalI/O) и высокопроизводительного контроллерного ядра (High-Speed Controller Core).

В состав группы аналоговой периферии входят: первый аналого-цифровой преобразователь ADC0 с разрядностью 10 бит; первый аналоговый входной мультиплексор AMUX0 на 13 входов, которые могут быть запрограммированы как однополярные или дифференциальные входы; первый программируемый входной предварительный усилитель PGA0, который может быть запрограммирован на один из шести коэффициентов усиления (16, 8, 4, 2, 1, 0.5); второй аналого-цифровой преобразователь ADC2 с разрядностью 8 бит; второй аналоговый входной мультиплексор * AMUX2 на 8 входов; второй программируемый входной предварительный усилитель PGA2, который может быть запрограммирован на один из шести коэффициентов усиления (4, 2, 1, 0.5); источник опорного напряжения VREF на 2,4 В (15 ppv/C°); встроенный датчик температуры с точностью ±3С°; два двенадцатиразрядных цифро-аналоговых преобразователя DAC0(1), два аналоговых компаратора с программируемым гистерезисом, конфигурируемые при прерывании или сбросе и прецизионный монитор питания.

Группа узлов цифровой периферии содержит: программируемый массив PCА с шестью режимами; интерфейсы: SMBus, SPI, два быстродействующих последовательных порта UART0 и UART1, CAN2.0В; пять шестнадцатиразрядных таймера/счетчика общего назначения; четыре байтовых порта ввода/вывода, совместимых с внешней пятивольтовой логикой; мультиплексированный и не мультиплексированный интерфейсы внешней памяти программ/данных EMIF.

Функциональная группа ядра микроконтроллера содержит:

— высокоскоростное ядро, работающее при частотах до 25МГц, обеспечивающее пиковую производительность до 25MIPS;

— встроенный программируемый калибруемый генератор тактовой частоты (от 2 до 25МГц);

— тактовый генератор с внешним кварцевым резонатором (RC — цепочкой, конденсатором или входом внешнего генератора);

— узел отладки — JTAG;

— 256 + 4096 байт оперативной памяти;

— 64К встроенной Flash памяти программ с внутрисистемным программированием ISP (In-System Programmable);

— охранный таймер WDT (Watchdog Timer);

— контроллер прерывания на 20 векторов.

4. Описание принципиальной схемы микропроцессорного блока системы управления

Принципиальная схема микропроцессорного модуля изображена на чертеже 2. Его основу составляет микропроцессор C8051F043 фирмы Silicon Laboratories (Cygnal), который осуществляет основные функции обработки цифровых и аналоговых сигналов. Число в двоичном коде без знака поступает на линии порта РО, который установлен для работы как цифровой вход с открытым стоком. В микропроцессоре число анализируется и в соответствии с программой на линиях Р1.3 и Р3.1 портов Р1 и РЗ, настроенных программно как цифровые выходы, вырабатываются' соответствующие уровни напряжения. В тоже время на выходе DAC0 первого 12-тиразрядного ЦАП вырабатывается напряжение, которое зависит от величины напряжения на входе AIN0.2 первого 10-тиразрядного АЦП.

Напряжение питания микропроцессора 3,3 В поступает с узла стабилизатора напряжения выполненного на микросхеме D2 (LM2937), который со стороны входа защищен диодом VD1 (MBR0520), если случайно будут перепутана полярность. Конденсаторы фильтра С10, С9 защищают контроллер от высокочастотных пульсаций возникающих при работе, а С8, С6 — сглаживают низкочастотные пульсации.

Для внешнего сброса микропроцессора имеется кнопка сброса SW1, сопротивление R4и конденсаторы С5 и С4 служат для задания постоянной времени и защиты от дребезга контактов кнопки.

Для тактирования микроконтроллера служит кварцевый резонатор ZQ1 с частотой 24,500 МГц с конденсаторами С1 и С3 которые служат для запуска внутреннего генератора.

Заключение

В данном курсовом проекте представлена схема реализаций функций для реализации игры на микроконтроллере C8051F043 фирмы SiliconLabs'. Были разработаны программные модули инициализации входов/выходов портов, функции для работы с АЦП, функции для работы с дисплеем.

1) О. Николайчук «х51 — совместимые микроконтроллеры фирмы Silicon Laboratories (Cygnal)». — М.: ООО «ИД СКИМЕН», 2004. — 628с, ил.

2) Шилдт, Герберт. Полный справочник по С, 4-е издание.: Пер. С англ. — М.: Издательский дом «Вильяме», 2002. — 704с.: ил.

3) «Мікропроцесорна техніка»: Підручник / Ю. Л. Якименко, Т. О. Терещенко — К. ЛВЦ «Видавництво «Полiтехнiка»; «Кондор», 2004. — 440с.

4) Леонов Г. А, Шумафов М. М. Методы стабилизации линейных управляемых систем. — СПб.: Изд-во С.-Петерб. ун-та, 2005. — 421с, 25 ил.

Приложение

void put_line (int x1, y1,x2,y2, bit b)

{

int temp1, temp2, i;

double tang;

if (x1==x2)

{

if (y1>y2)

{

temp1=y2;

y2=y1;

y1=temp1;

};

for (i=y1; i<=y2; i++)

put_point (x1,i, b);

return;

};

if (x1>x2)

{

temp1=x2;

temp2=y2;

y2=y1;

x2=x1;

x1=temp1;

y1=temp2;

};

tang=(double)(y2-y1)/(x2-x1);

if (tang>=-1&&tang<=1)

{

for (i=0;i<=(x2-x1);i++)

put_point (x1+i, i*tang+y1,b);

}

else

{

if (y1>y2)

{

for (i=0;i<=(y1-y2);i++)

put_point (x1-i/tang, y1-i, b);

}

else

{

for (i=0;i<=(y2-y1);i++)

put_point (x1+i/tang, y1+i, b);

};

};

}

void left_hand_down ()

{

put_line (16,16,16,25,1);

put_line (16,25,25,34,1);

out_command (0x4d);

out_command (0xbe);

out_byte (0×18);

out_byte (0×28);

out_byte (0x4F);

out_byte (0×49);

out_byte (0x4F);

out_byte (0×28);

out_byte (0×18);

}

void left_hand_up ()

{

put_line (25,34,16,40,1);

//2

out_command (0x4d);

out_command (0xba);

out_byte (0×18);

out_byte (0×28);

out_byte (0x4F);

out_byte (0×49);

out_byte (0x4F);

out_byte (0×28);

out_byte (0×18);

}

void left_hand ()

{

unsigned int f1;

f1=get_adc (1);

if (f1<=512)

{

left_hand_down ();

fl_h_l=1;

}

else

{

left_hand_up ();

fl_h_l=2;

}

}

void right_hand ()

{

unsigned int f1;

f1=get_adc (2);

if (f1<=512)

{

right_hand_down ();

fl_h_r=4;

}

else

{

right_hand_up ();

fl_h_r=3;

}

}

void select_hand ()

{

ochist ();

left_hand ();

right_hand ();

}

int rand_d ()

{

int a, b;

a=get_adc (1);

b=get_adc (2);

r=rand ();

r=r*(b*b+rand ());

r=r*(a*a+rand ());

r=r%11;

return r;

}

Показать весь текст
Заполнить форму текущей работой