Примеры решения лабораторных работ / Программирование 8535 на СИ
.pdfПриложение 4. Семестровое задание по программированию
микроконтроллеров AVR
Для заданного варианта составить программу на языке Си. По каждой задаче отчет должен содержать: исходное задание, листинг программы, алгоритм и функциональную схему. Все задержки времени реализовывать только с помощью таймеров.
|
|
Вариант 1 |
|
1. |
«Реверсивный счетчик». |
Реализовать 4-х разрядный |
реверсивный счетчик: |
PA1 - вход T (подать через фильтр), PA0 - вход R (сброс счетчика), PA7 - вход |
|||
направления |
(суммирование или |
вычитание), PС0...PС3 - |
выходы, начиная с |
младшего разряда. |
|
|
2.«ШИМ». Скважность работы таймера Т2 в режиме ШИМ задается 8-ми
разрядным кодом двоичным кодом на входах PA0...PA7. Начальное |
значение 7=0,5. |
На 7-ми сегментные индикаторы выводится текущее значение |
скважности в |
десятичном формате. |
|
Вариант 2
1.«Светофор пешехода». Выходы PD0, PD1 имитируют красный и зеленый
сигналы светофора для пешеходов. При включении зеленого света выводится индикация оставшегося времени: от 9 до 0 секунд.
2.Реализовать 4-х разрядное АЛУ: входы первого числа задаются на входах
PA0...PA3, |
второго - |
на входах |
PB0..PB3, |
выходы |
- |
биты PD0...PD7. Код |
различных |
8 операций |
задается |
на входах |
PC0...PC2 |
и |
выводится на 7-ми |
сегментный индикатор. Выполняемые арифметические операции: суммирование, вычитание, умножение, целочисленное деление первого на второе. Выполняемые поразрядные логические операции: конъюнкция, дизъюнкция, исключающее ИЛИ, инверсия первого числа.
Вариант 3
1.«Сдвиговый регистр». Реализовать 4-х разрядный сдвиговый регистр: на
входах PA0...PA3 задается параллельный код. |
При |
подаче логической |
«1» |
на вход |
||||
PB0 начинается последовательная |
передача |
на |
выходе PD0, |
длительность |
передачи |
|||
каждого бита - 1 сек. |
|
|
|
|
|
|
|
|
2. |
Составить программу, |
которая |
выводит |
двоичное |
число, |
задаваемое на |
входах PA0...PA7, на 7-ми сегментные индикаторы в десятичном коде.
Вариант 4
1.Реализовать 4-х разрядный цифровой компаратор: входы PA0...PA3 - 4
разряда числа а, входы PB0...PB3 - 4 разряда числа b, выход PD0 устанавливается в
«1» при a < b, выход PD1 - при a = b, выход PD2 - при a > b.
2.Программа «Секунды». Вывести на 7-ми сегментный индикатор цифры
единиц секунд: при включении появляется цифра «0», через секунду «1» и т.д. до «9», далее «0» и процесс повторяется.
|
|
|
|
Вариант 5 |
|
|
|
|
|
1. |
Реализовать 5-ми разрядную |
асинхронную |
передачу |
данных: |
на |
входах |
|||
PA0...PA4 задается 5-ми разрядное число. При подаче «1» на вход PB0 начинается |
|||||||||
последовательная |
передача |
на выходе PC0 - стартовый бит, 8 информационных |
|||||||
разрядов, бит паритета, 1 |
стоповый |
бит. |
Длительность |
передачи |
каждого |
бита - 1 |
|||
сек. |
|
|
|
|
|
|
|
|
|
2. |
«Будильник». |
Исходное значение цифр на семисегментном |
индикаторе |
||||||
«9». Нажатием |
кнопки на |
входе РА0 |
запускается таймер с обратным счетом: |
через |
1 секунду индицируется цифра «8» и т.д. до «0». При достижении «0» включается светодиод на выходе PB0.
Вариант 6
1.Составить программу, выполняющую операцию «сдвиг вправо». На входах
PA0...PA7 задается 8-ми разрядное |
двоичное |
число, |
на |
входах |
PB0...PB2 |
|||||
количество |
разрядов, |
на |
которое |
число |
сдвигается. |
Результат |
выводится |
|||
непрерывно на выходах PD0...PD7. |
|
|
|
|
|
|
|
|||
2. |
«Аналоговый |
|
вольтметр». |
Индикация |
изменение |
напряжения |
с |
|||
потенциометра выполняется в двоичном коде на светодиодах. |
|
|
|
|
Вариант 7
1.«Код Грея». На входах PA0...PA7 задается двоичное число, на выходах PD0...PD7 видим это число в коде Грея.
2.«Светофор дневной и ночной». Выходы PD0, PD1 и PD2 имитируют
красный, желтый и зеленый сигналы светофора. Светофор работает в |
дневном |
и |
|||||||||
ночном режимах |
(вход РА0). |
В дневном режиме |
красный |
и |
зеленый свет |
горит |
по |
3 |
|||
с, желтый |
- 1 с. |
В ночном |
периоде включается |
только |
мигающий |
желтый |
свет: |
1 |
с |
||
- горит, 1 с - не горит. |
|
|
|
|
|
|
|
|
|
||
|
|
|
Вариант 8 |
|
|
|
|
|
|
|
|
1. |
Битовые логические операции. Первое |
целое двоичное число «a» |
вводится |
||||||||
на входах PA0...PA3, второе «Ь» - на входах PA4...PA7. Код операции |
вводится |
на |
|||||||||
входах PB0...PB2. Реализовать все битовые |
операции |
языка |
Си: |
|
сложение, |
||||||
умножение, |
исключающее ИЛИ, инверсия «a», |
инверсия |
«Ь», |
сдвиг |
влево |
«a», |
сдвиг вправо «a», сдвиг влево «Ь». Результат выводится в двоичной форме на 7-ми сегментных индикаторах.
2. Вывести на 7-ми сегментных индикаторах восьмеричное число от 0 до 377. Двоичный код цифры задается в порт А.
Вариант 9
1.«Бегущий огонь с таймером». При запуске программы возникает «бегущий
огонь» на |
выходах |
PC7 ^ PC6 ^ ... |
^ PC0 и далее повтор |
PC7 ^ |
PC6 ... |
||||
Промежуток |
времени |
между |
включением |
выходов задается в порт |
А: |
от |
0,1 |
с |
до |
25,5 с. |
|
|
|
|
|
|
|
|
|
2. |
Вывести |
на 7-ми |
сегментных |
индикаторах шестнадцатеричное |
число |
от |
00 |
до FF, соответствующее коду порта А.
Вариант 10
1.Двоичный счетчик импульсов. Счетный вход - вход PA0, выход счетчика -
разряды PD0...PD7. В исходном состоянии |
не включен ни |
один |
выход |
PD0...PD7. |
||
При переполнении счетчика счет начинается с нуля. |
|
|
|
|
||
2. |
«Программируемый светофор». |
Выходы |
P^, |
Pd и |
PС2 |
имитируют |
сигналы |
светофора. Биты PA0...PA1 порта |
А задают |
режим |
работы |
светофора: «00» |
|
- светофор отключен, «01» - зеленый и красный свет включены 10 |
с, желтый - 3 с, |
|||||
«10» - зеленый включен 20 с, красный свет включены 10 с, желтый - 3 |
с, «11» - |
|||||
ночной режим (только мигающий желтый свет). |
|
|
|
|
|
Вариант 11
1.«Счетчик до 10». На вход PA7 подаются импульсы с кнопки, выход
счетчика |
семисегментный индикатор. В исходном состоянии |
показывает |
«0», при |
нажатии |
кнопки появляется цифра «1», при новом нажатии «2» и т.д. После |
||
достижения «9» счет начинается с «0». |
|
|
|
2. |
«Настройка ШИМ». С помощью двух кнопок «+» и «-» изменяется |
||
скважность ШИМ. Начальное значение скважности ШИМ равно 50%. |
|
|
|
|
Вариант 12 |
|
|
1. |
«Светофор». PD0 - «красный свет», PD1 - «желтый |
свет», PD2 - |
«зеленый |
свет». Красный и зеленый цвета горят по 10 с, желтый - 3 с. Перед появлением зеленого света горят вместе красный и желтый. Одновременно с изменением света
работают 7-ми сегментные индикаторы |
- они |
показывают |
оставшееся время |
|
включения света. |
|
|
|
|
2. |
Вывести на 7-ми сегментном |
индикаторе |
16 букв |
латинского алфавита. |
Двоичный код буквы задается в четырех битах PA0...PA3.
Вариант 13
1.«Светофор». PD0 - «красный свет», PD1 - «желтый свет», PD2 - «зеленый
свет». Красный и зеленый цвета горят по 5 с, желтый - 2 с. Перед появлением зеленого света горят вместе красный и желтый. Одновременно с изменением света
работают 7-ми сегментные |
индикаторы: при включении |
красного |
света выводится |
||||
«г», зеленого - «G», желтого - «Y», желтого и зеленого - «YG». |
|
|
|
|
|||
2. |
Битовые логические операции. Первое |
целое двоичное число «a» вводится |
|||||
на входах PA0...PA3, второе «b»- на входах PA4...PA7. Код операции |
вводится |
на |
|||||
входах PB0...PB2. Реализовать все битовые операции |
языка |
Си: |
сложение, |
||||
умножение, |
исключающее |
ИЛИ, инверсия «a», |
инверсия |
«b», |
сдвиг |
влево |
«a», |
сдвиг вправо «a», сдвиг влево «b». Результат выводится в двоичной форме на 7-ми сегментных индикаторах.
Вариант 14
1. «Инверсия». На входах PA0...PA3 порта А задается значение 4-х разрядное двоичного число, на 7-ми сегментном индикаторе выводится его инверсное значение в шестнадцатеричном коде.
2. Составить программу «бегущий огонь» |
на |
7-ми |
сегментных |
индикаторах |
||
HG1...HG4: Поочередно загораются сегменты |
A, B, ... F и далее процесс |
|||||
повторяется. Продолжительность включения сегмента - 1 секунда. |
|
|
|
|||
|
Вариант 15 |
|
|
|
|
|
1. |
Битовые логические операции. Первое |
целое двоичное число «a» вводится |
||||
на входах PA0...PA3, второе «Ь» - на входах PB0...PB3. Код операции |
вводится на |
|||||
входах PC0...PC2. Реализовать все битовые |
операции языка Си: сложение, |
|||||
умножение, |
исключающее ИЛИ, инверсия «a», |
инверсия «Ь», сдвиг |
влево |
«a», |
||
сдвиг вправо «a». Результат выводится на выходах PD0...PD3. |
|
|
|
|||
2. |
Поочередно загораются сегменты |
А |
индикаторов HG1...HG4, |
затем |
||
сегменты B и так далее до сегментов |
F. |
После |
процесс |
повторяется. |
||
Продолжительность включения сегмента - 0,5 секунды. |
|
|
|
|
|
Вариант 16
1. Поочередно загораются цифры от 0 до 9 на 7-ми индикаторе HG1 и далее процесс повторяется. Продолжительность включения цифры - 2 секунды.
2. Светодиод горит в течение Т секунд, и далее столько же погашен. Период Т задается входами PA0...PA3 соответственно от 1 до 16 секунд.
Вариант 17
1. Зашифровать на 7-ми сегментном индикаторе все буквы русского алфавита, какие возможно. Код буквы вводится на входах порта A.
2.«Тик-так». Поочередно включаются разряды PD0 и PD1.
Продолжительность включения разрядов регулируется битами порта PA от 0,5 до
10 с.
Вариант 18
1. Поочередно загораются по одному сегменту индикатора A, B, C, D, E и F индикатора HG1, после этого те же сегменты индикатора HG2 и далее процесс повторяется. Продолжительность включения сегмента задается битами PA0 и PA1, при значении 00 составляет 0,25 сек, 01 - 0,5 сек, 10 - 1 сек, 11 - 2 сек.
2.Составить программу, рассчитывающую разность двух двоичных 4-х
разрядных чисел. |
Ввод |
чисел |
выполняется при |
PB0=0. Первое число вводится на |
|
входах PA0...PA3, |
второе |
- |
на |
входах PC0...PC3. |
Результат выводится при PB0=1 на |
7-ми сегментные индикаторы. |
|
|
|
Вариант 19
1.На 7-ми сегментных индикаторах поочередно загорается цифра 0 в каждом
положении |
HG1, |
HG2, |
HG3 |
и |
HG4 |
и |
далее |
процесс |
повторяется. |
Продолжительность включения цифры - 1 секунда. |
|
|
|
|
|||||
2. |
«Бегущий огонь». Реализуется на 16 битах выходы PD0, PD1...PD7 и далее |
||||||||
PC0, PC1...PC7. Далее процесс повторяется. |
|
|
|
|
|
Вариант 20
1. «Счетчик импульсов». Счетный вход - вход PA7 с устранением дребезга контактов, выход счетчика - десятичное число на 7-ми сегментных индикаторах.
Импульсы считаются от 0 до 255. При переполнении счетчика счет начинается с нуля.
2. Создать таймер на 7-ми сегментном индикаторе от 0 до 60 с. В исходном состоянии на индикаторе горит «0». При нажатии кнопки «Пуск» через 1с загорается «1» и т.д. После достижения «60» таймер останавливается и ждет очередного нажатия «Пуск».
Вариант 21
1.«Двоичный калькулятор». Первое 4-х разрядное двоичное число вводится
на входах PA0...PA3, второе - на входах PA4...PA7. |
На входах |
PB0 |
и |
PB1 задается |
код операции: 00 - сложение, 01 - вычитание, 10 |
- умножение, |
11 |
- |
целочисленное |
деление первого числа на второе. Результат выводится на 7-ми сегментные индикаторы в десятичном формате с указанием символа кода операции.
2.«Установка числа». С помощью двух кнопок «+» и «-» изменять значение
десятичного числа, выводимого на семисегментный индикатор от 0 до 99. Начальное значение, выводимое на индикатор, равно 50.
Вариант 22
1.Реализовать 4-х разрядную синхронную передачу данных: на входах PA0...PA3 задается 4-х разрядное число. При подаче «1» на вход PB0 начинается последовательная передача: на выходе PC0 -синхронизация, на выходе PC1 - информация. Передача начинается с младшего разряда. Длительность передачи каждого бита - 1 сек.
2.С помощью 2 кнопок задавать значение десятичного числа от 0 до 9999,
выводимого на |
семисегментные индикаторы: первая кнопка задает положение |
цифры, которая |
меняется, вторая увеличивает значение цифры от 0 до 9 и далее |
повтор. Третий вход обнуляет все число.
Вариант 23
1.Произведение двух двоичных 4-х разрядных чисел. Первое число вводится
на входах PA0...PA3, второе - на входах |
PA4...PA7. |
Результат выводится |
|
непрерывно на выходах PD0 ... PD7. |
|
|
|
2. |
«Счетчик импульсов». Счетный вход |
- вход PA7 с |
устранением дребезга |
контактов, выход счетчика - десятичное число на 7-ми сегментных индикаторах. Импульсы считаются от 0 до 255. При переполнении счетчика счет начинается с нуля.
|
Вариант 24 |
|
1. |
Операция «сдвиг вправо». На входах PA0...PA3 задается 4-х разрядное |
|
двоичное |
число, на входах PA6...PA7 количество |
разрядов, на которое число |
сдвигается. |
Результат выводится в десятичном |
виде на 7-ми сегментном |
индикаторе.
2.«Реверсивный счетчик». Счетный положительный вход - PA0,
отрицательный - PA7 (с устранением дребезга контактов), выход счетчика - десятичное число на 7-ми сегментных индикаторах. Начальное значение счетчика -
0. Импульсы считаются от «-128» до «127». При |
переполнении |
счетчика |
счет |
|||||||||||
начинается с «-128». |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вариант 25 |
|
|
|
|
|
|
|
||
1. «Программируемый светофор». PD0 - «красный |
свет», PD1 |
- |
«желтый |
|||||||||||
свет», PD2 - «зеленый свет». Порт А |
задает |
начальные |
установки |
работы |
||||||||||
светофора: |
регулирование |
|
продолжительности |
включения |
каждого |
цвета. |
Биты |
|||||||
PA1...PA0 задают режим работы: 00 - работа светофора, 01 - задание параметров |
||||||||||||||
включения |
«красного света», |
10 |
- |
«желтого |
света», |
11 - «зеленого света». Биты |
||||||||
PA7...PA4 задают продолжительность включения выбранного цвета от 1 до 16 с. |
|
|
|
|||||||||||
|
|
|
|
|
Вариант 26 |
|
|
|
|
|
|
|
||
1. Светофор пешехода: 10 с горит красный |
свет, 15 с - зеленый. При |
|||||||||||||
включении зеленого света на 7-сементных индикаторах |
выводится |
индикация |
||||||||||||
количества оставшихся секунд. |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
Вариант 27 |
|
|
|
|
|
|
|
||
1. |
«Телефонные |
кнопки». |
При |
нажатии |
кнопок |
0.9 |
с |
|
помощью |
|||||
звукоизлучателя выдается звуковой сигнал. Каждая |
кнопка имеет свою частоту, |
|||||||||||||
звуковой |
сигнал выдается |
все |
время, |
пока |
нажата кнопка. |
Одновременно со |
звуковым сигналом на 7-ми |
сегментный |
индикатор |
выдается изображение |
||||
соответствующей цифры. |
|
|
|
|
|
|
|
|
|
|
|
Вариант 28 |
|
|
|
1. «Аналоговый вольтметр». С потенциометра на аналоговый |
вход МК |
||||||
подается |
напряжение |
0.5В. |
На |
7-ми |
сегментных |
индикаторах |
выдается |
соответствующее значение с точностью до сотых долей вольта от 0.00 до 5.00. |
|
Вариант 29
1. «Регулирование скорости». Составить программу, в которой аналоговым входом от 0 до 5В задается скважность выходного сигнала с ШИМ от 0 до 255, например, для регулирования скорости двигателя. На 7-ми сегментные индикаторы выводится текущее значение скважности.
Вариант 30
1. «Маяк». Заданное время включается разряд PD0, затем такое же время он выключен. Время включения задается разрядами порта А от 0 с до 25,5 с. На 7-ми сегментные индикаторы выводится значение времени включения сигнала.
|
|
|
|
Вариант 31 |
|
|
|
1. «Плавный пуск». В |
исходном состоянии на индикаторе горит |
символ «С» |
|||||
(«Стоп»). |
При |
нажатии |
кнопки |
«Пуск» |
программа |
линейно |
увеличивает |
интенсивность горения светодиода в течение 8 с от 0 до максимального значения. Одновременно на 7-ми сегментные индикаторы выводится цифра оставшегося времени пуска (8, 7, .0). После достижения максимального значения в течение 5с
свечение светодиода должно быть линейно снижено до нуля (индикация |
-5, -4, |
-0). |
||||||
Далее появляется символ «C» и ожидается новое нажатие кнопки. |
|
|
|
|||||
|
|
|
Вариант 32 |
|
|
|
|
|
1. «Задатчик интенсивности». |
При нажатии кнопки «Пуск» |
программа |
||||||
линейно увеличивает интенсивность свечения светодиода в течение 5 с от 0 |
до |
|||||||
максимального |
значения, |
при |
этом |
на |
7-ми |
сегментных |
индикаторах |
|
соответствующее |
сообщение. |
Далее |
светодиод |
остается |
в этом состоянии |
и |
выводится индикация работы «РАБ». При нажатии кнопки «Стоп» в течении 5 с свечение линейно уменьшается до нуля. Далее ожидается новое нажатие кнопки.
Вариант 33
1.«Регулируемый пуск». При нажатии кнопки «Пуск» программа линейно
увеличивает интенсивность горения светодиода в течение |
t секунд от 0 до |
максимального значения, при нажатии кнопки «Стоп» - |
аналогично уменьшает |
сигнал от максимума до нуля. Время t устанавливается потенциометром от 0 до 10
секунд. На 7-ми сегментные индикаторы выводится: |
а) буквы «П» и «С» |
(пуск и |
||||||||
стоп) в зависимости от режима работы; б) время разгона и торможения. |
|
|
|
|
|
|
||||
|
|
Вариант 34 |
|
|
|
|
|
|
|
|
1. Записать таблицу азбуки Морзе: в порту |
А |
двоичным кодом |
задается |
|||||||
символ, при нажатии кнопки «Пуск» |
выполняется вывод |
выбранного |
сигнала, |
при |
||||||
этом тире звучит 0,5 сек, точка |
0,2 сек. Пауза между |
точками |
и |
тире |
составляет |
0,5 |
||||
сек. Вывод сигнала выполняется свечением светодиода. |
|
|
|
|
|
|
|
|
||
|
|
Вариант 35 |
|
|
|
|
|
|
|
|
1. «Мигалка автомобиля». |
При нажатии кнопки |
«Пуск» сегменты А, |
B, |
C, |
D, |
|||||
E и F индикатора включаются поочередно друг |
за |
другом |
и |
далее |
процесс |
|||||
повторяется до нажатия кнопки «Стоп». Период |
свечения |
|
сегментов |
задается |
||||||
дискретно или аналоговым потенциометром от 0,1 сек до 25,5 сек. |
|
|
|
|
|
|
|
|||
|
|
Вариант 37 |
|
|
|
|
|
|
|
|
1. «Перевод двоичных |
чисел». |
Программа |
переводит |
двоичное |
|
число, |
||||
задаваемое в порт А, в указанную |
систему счисления с |
основанием |
D=4...16. |
|||||||
Основание задается двоичным кодом в порт B. Вывод выполняется |
на |
7-ми |
||||||||
сегментные индикаторы. |
|
|
|
|
|
|
|
|
|
|