Цель работы: изучение методов представления сложных символов на сегментных индикаторах.
Краткий обзор
В качестве примера приведена схема с динамическим опросом клавиатуры, при нажатии клавиши на индикатор выводится символ соответствующий нажатой клавише.
Нажата клавиша «+»
Данный проект находится в папке с лабораторной\004lab\0041.dsn
Программа:
;***управление сегментным индикатором с клавиатуры***
.include "m16def.inc";подключение библиотеки для работы с ATmega16
;-------------------------------------------
.list;включение листинга
;-------------------------------------------
.def temp=r16;определение рабочих регистров
.def tempv=r17
.def tempv0=r22
.def temp1=r18
.def temp2=r19
.def temp3=r20
.def temp4=r21
;Определение портов
ldi temp,0x00;записываем ноль в регистр temp
out ddrd,temp;записываем этот ноль в ddrd (порт rd на ввод)
ldi temp,0xFF;записываем 0xff в регистр temp
out portd,temp;записываем temp в portd(включаем внутренний резистор)
out ddra,temp;записываем temp в ddrb (порт rb на вывод)
out ddrb,temp;записываем temp в ddrb (порт rb на вывод)
out ddrc,temp;записываем temp в ddrb (порт rb на вывод)
;Задаём состояние рабочих регистров
ldi temp1,0b11111110
ldi temp2,0b11111101
ldi temp3,0b11111011
ldi temp4,0b11110111
;Программа проверки состояния порта для нулевой строки s0:
out portc,temp1;посылаем на портС содержимое temp1,0b11111110
sbis pind,0;проверяем состояние 0 бита(если установлен то пропускаем след строчку)
rjmp m00;если сброшен переходим к метке "вывода"
sbis pind,1;проверяем состояние 1 бита
rjmp m01
sbis pind,2;проверяем состояние 2 бита
rjmp m02
sbis pind,3;проверяем состояние 3 бита
rjmp m03
rjmp s1;если в нулевой строке ничего не нажато,то переходим к первой
;Программа вывода на индикатор
m00:
ldi tempv,0b00001111
ldi tempv0,0b0
out porta,tempv
out portb,tempv0
rjmp s0
m01:
ldi tempv,0b11111111
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m02:
ldi tempv,0b10111111
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m03:
ldi tempv,0b0
ldi tempv0,0b01000100
out porta,tempv
out portb,tempv0
rjmp s0
;Программа проверки состояния порта для первой строки
s1:
out portc,temp2
sbis pind,0
rjmp m10
sbis pind,1
rjmp m11
sbis pind,2
rjmp m12
sbis pind,3
rjmp m13
rjmp s2
m10:
ldi tempv,0b10001100
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m11:
ldi tempv,0b10111011
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m12:
ldi tempv,0b11111011
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m13:
ldi tempv,0b0
ldi tempv0,0b11111111
out porta,tempv
out portb,tempv0
rjmp s0
;Программа проверки состояния порта для второй строки
s2:
out portc,temp3
sbis pind,0
rjmp m20
sbis pind,1
rjmp m21
sbis pind,2
rjmp m22
sbis pind,3
rjmp m23
rjmp s3
m20:
ldi tempv,0b1100
ldi tempv0,0b0
out porta,tempv
out portb,tempv0
rjmp s0
m21:
ldi tempv,0b01110111
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m22:
ldi tempv,0b00111111
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m23:
ldi tempv,0b0
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
;Программа проверки состояния порта для третьей строки s3:
out portc,temp4
sbis pind,0
rjmp m30
sbis pind,1
rjmp m31
sbis pind,2
rjmp m32
sbis pind,3
rjmp m33
rjmp s0
m30:
ldi tempv,0b11110011
ldi tempv0,0b0
out porta,tempv
out portb,tempv0
rjmp s0
m31:
ldi tempv,0b11111111
ldi tempv0,0b0
out porta,tempv
out portb,tempv0
rjmp s0
m32:
ldi tempv,0b00110011
ldi tempv0,0b10001000
out porta,tempv
out portb,tempv0
rjmp s0
m33:
ldi tempv,0b0
ldi tempv0,0b10101010
out porta,tempv
out portb,tempv0
rjmp s0
rjmp s0
;------end-------
Данный проект находится в папке с лабораторной\004lab\004.aps
Лабораторное задание
Используя пример, напишите программу для вывода на индикатор четырёх символов заданных для каждого индивидуального варианта с использованием схемы:
При нажатии первой кнопки должен выводиться символ1, при нажатии второй кнопки символ2 и т.д.
Данный проект находится в папке с лабораторной\004lab\0042.dsn
Вариант | Символ1 | Символ2 | Символ3 | Символ4 |
Цифра «1» | Буква «E» | Цифра «5» | Буква«X» | |
Цифра «2» | Цифра «4» | Буква «E» | Буква «Z» | |
Цифра «3» | Цифра «7» | Буква «F» | Буква «y» | |
Цифра «4» | Буква «M» | Цифра «0» | Буква «C» | |
Цифра «5» | Буква «W» | Буква «C» | Цифра «8» | |
Цифра «6» | Буква «K» | Буква «L» | Цифра «1» | |
Цифра «7» | Буква «M» | Буква«X» | Цифра «2» | |
Цифра «8» | Буква «W» | Буква «Z» | Цифра «3» | |
Цифра «9» | Буква «K» | Буква «y» | Цифра «4» | |
Цифра «0» | Буква «L» | Буква«T» | Цифра «5» | |
Буква «A» | Цифра «1» | Цифра «6» | Буква «L» | |
Буква «b» | Цифра «2» | Цифра «7» | Буква«X» | |
Буква «C» | Цифра «3» | Цифра «8» | Буква «Z» | |
Буква «d» | Цифра «4» | Цифра «9» | Буква «y» | |
Буква «E» | Цифра «5» | Цифра «0» | Буква«T» |
Разводка индикатора:
Лабораторная работа №5