Главная » Статьи » Как подключить |
Для того чтобы отобразить многоразрядное число на индикаторе с ним нужно предварительно провести хитрую манипуляцию, заключающуюся в разбивке числа на его составляющие. В качестве примера приведу отображение числа 1234 на счетверенный семисегментный индикатор с общим анодом. Для отображения четырехразрядного числа необходимо завести одну общую переменную в которой будет лежать число которое хотим вывести (переменная W), четыре переменные в которых будут храниться данные для каждого знака (N) и еще четыре переменные для промежуточных преобразований (M), чтобы не трогать главную переменную. Переменная должна соответствовать тому значению, которое будет в ней хранится. Так для переменной W достаточным будет тип integer, так как переменная такого типа способна хранить значения от -32768 до +32767 (или word если не планируется использование отрицательных чисел). В переменных N будут лежать числа от 0 до 9 поэтому достаточным будет использование переменной типа byte. А в переменных M будут находиться те же значения что и в переменной W, поэтому ставим тип integer.
Dim W As Integer
Dim N1 As Byte Dim N2 As Byte Dim N3 As Byte Dim N4 As Byte Dim M1 As Integer Dim M2 As Integer Dim M3 As Integer Dim M4 As Integer После объявления переменных настраиваем порты на выход которые будут использоваться для подключения индикатора:
DDRC = &B11111111 DDRD = &B11111111 Здесь я поставил на выход все ноги порта C и D, но можно оставить только те которые будут использоваться в качестве выходов, к примеру так:
DDRC=&B00001111 и DDRD = &B01111111 (четыре первых ноги порта С под аноды и шесть первых порта D под сегменты).
W = 1234
В основном цикле программы присваиваем переменным М значение переменной W, я делаю так:
M1 = W M2 = M1 M3 = M1 M4 = M1 Это не паранойя)), это сделано с той целью, чтобы в во всех переменных М лежало одно и тоже число, так как во время операции присваивания легко может ворваться прерывание (если такое имеется и не отключено), в обработчике которого переменная W может измениться. И в случае если присваивание шло таким образом: М1=W, M2=W, M3=W, M4=W в переменных М будут лежать разные значения что приведет к каше в показаниях.
После присвоения переменным значения начинаем работать с
каждой из них, преобразуя таким образом, чтобы в переменную N попало то значение, которое будет отображаться на индикаторе: в переменной N1 должна оказаться «1», в N2 – «2», в N3 – «3», а в N4 – «4». M1 = M1 / 1000 ' M1 = 1234/1000 = 1,234
N1 = Abs (m1) ' N1 = Abs (1,234) = 1 Abs – функция возвращающая целое число переменной. В переменную N1 попала единица, что собственно и требовалось.
Для присвоения двойки переменной N2 операция будет немного сложнее:
M2= M2 Mod 1000 ' M2 =1234 Mod 1000 = 234
M2 = M2 / 100 ' M2 = 234 / 100 = 2,34 N2= Abs (m2) ' N2 = Abs (2,34) = 2 Для начала функцией Mod мы возвращаем переменной первые три
цифры числа (остаток от деления на 1000), а дальше все как в первом случае.
С двумя последними разрядами практически тоже самое: M3 = M3 Mod100 M3 = M3 / 10 N3 = Abs(m3) M4 = M4 Mod 10 N4= Abs(m4) Теперь в наших переменных лежат те значения, которые мы хотим отобразить, самое время микроконтроллеру подрыгать ногами и вывести эти значения на индикатор, для этого вызываем подпрограмму обработки индикации:
Gosub Led
Процессор перепрыгнет на подпрограмму с меткой Led:
Led:
Portc =&B00001000
Здесь подаем высокий уровень на PORTC.3 , к этой ноге у нас подсоединен анод первого разряда. Затем выбираем, какие сегменты необходимо зажечь, чтобы отобразить значение первой переменной. Она у нас единица поэтому ноль будет на ногах Portd.1и Portd.2, что соответствует сегментам B и С индикатора. Select Case N1
Case 0 : Portd = &B11000000 Case 1 : Portd = &B11111001 Case 2 : Portd = &B10100100 Case 3 : Portd = &B10110000 Case 4 : Portd = &B10011001 Case 5 : Portd = &B10010010 Case 6 : Portd = &B10000010 Case 7 : Portd = &B11111000 Case 8 : Portd = &B10000000 Case 9 : Portd = &B10010000 End Select Waitms 5
После того как зажгли нужные сегменты ждем 5 мс и переходим к отображению следующих чисел:
Portc = &B00000100
Select Case N2 Case 0 : Portd = &B11000000 Case 1 : Portd = &B11111001 Case 2 : Portd = &B10100100 Case 3 : Portd = &B10110000 Case 4 : Portd = &B10011001 Case 5 : Portd = &B10010010 Case 6 : Portd = &B10000010 Case 7 : Portd = &B11111000 Case 8 : Portd = &B10000000 Case 9 : Portd = &B10010000 End Select Waitms 5 Portc = &B00000010 Select Case N3 Case 0 : Portd = &B11000000 Case 1 : Portd = &B11111001 Case 2 : Portd = &B10100100 Case 3 : Portd = &B10110000 Case 4 : Portd = &B10011001 Case 5 : Portd = &B10010010 Case 6 : Portd = &B10000010 Case 7 : Portd = &B11111000 Case 8 : Portd = &B10000000 Case 9 : Portd = &B10010000 End Select Waitms 5 Portc = &B00000001 Select Case N4 Case 0 : Portd = &B11000000 Case 1 : Portd = &B11111001 Case 2 : Portd = &B10100100 Case 3 : Portd = &B10110000 Case 4 : Portd = &B10011001 Case 5 : Portd = &B10010010 Case 6 : Portd = &B10000010 Case 7 : Portd = &B11111000 Case 8 : Portd = &B10000000 Case 9 : Portd = &B10010000 End Select Waitms 5
После отображения информации на индикаторе необходимо возвратится в основной цикл программы, где нужно завершить цикл и обозначить конец программы. Вот что получим в итоге:
За счет маленькой задержки переключения не будут заметны человеческому глазу и мы увидим целое число 1234. Скачать исходник и проект в протеусе можно ниже: | |
Просмотров: 55339 | Комментарии: 7
| Теги: |
Всего комментариев: 7 | ||||||||
| ||||||||
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |