У микроконтроллера 16f877a есть 3 полных порта по 8 ног (0-7) и ещё два порта по-кусочкам.
Для этого проекта используется два полных порта B и D и чуть-чуть от аналогово. При этом
только три входа микроконтроллера становятся аналоговыми, остальная часть порта А определяется
как цифровые ноги, и вы можете их использовать, если надо.
Светодиоды подключаются минусами к порту Б и плюсами к порту Д.
Напряжение на входе сверяется с Vref. И соответственно может быть
от 0 до Vref :) Резисторы в порте Д для ограничения тока через
матрицу. Не делайте слишком маленькие значения - контроллер
сгорит :)
Программа. PicBasic
' инициализация
INCLUDE "bs2defs.bas" DEFINE OSC 24 Define ADC_BITS 8 ' восьми-битный АЦП Define ADC_SAMPLEUS 10 ' "брать пробу" в течении 10мкс an VAR byte m VAR byte t VAR byte x VAR byte[8] st VAR byte ADCON1 = %01100101 ' частота конвертирования - Fosc / 64 и ' AN0 & AN1 - аналоговые, AN2-AN7 - цифр. ' кроме AN3 который Vref+ TRISb = %00000000 ' порт B - outputs TRISd = %00000000 ' порт D - outputs odin ' ой что будет... st = 1
' рисуем на экране из массива
FOR t = 1 TO 50 'рисовать 50 раз каждый фрейм FOR m = 0 TO 7 portb = 255 - st portd = x[m] st = st << 1 ' st = st * 2 - двигаем порт Б на 1 PAUSEUS 10 NEXT m portd = 0 ' стереть экран portb = 255 ' cls st = 1 NEXT t
' берём текущее значение напряжения
ADCIN 0, an ' an - from 0 to 255 an = an / 29 ' an from 0 to 8 t = 1 'т временная переменная для цикла FOR m = 1 TO an 'возведения 2 в степень an t = t << 1 'умножаем т = т * 2 NEXT m '''''' t = t - 1 ' чтобы загорелись бары, а не точки
FOR m = 7 TO 1 STEP -1 x[m] = x[m-1] ' сдвигаем данные в массиве на 1 NEXT m x[0] = t ' и подставляем свежее значение
GOTO odin ' пахать ей вечно
Синие цифры - для настроек времени программы (паузы). Можно с ними поиграться.
Кварц на 24, Но это не очень критично - можно 8-10-12-16-20.
HEX
:020000040000FA :100000004D28A000A00DA00D200D3839C1389F004B :100010000030A1000A3013201F151F190D28A1015F :100020001E084828A101FC3EA000A1090000031CF5 :100030001F28FF301B28A00703181A28A0076400F8 :100040002128A10F192808000310A00DA10DFF3EC3 :100050000318242820084828A501A4011030A60070 :10006000210DA40DA50D2208A4022308031C230FB3 :10007000A502031842282208A40723080318230F07 :10008000A5070310A00DA10DA60B302820084828B5 :1000900083130313831264000800831665309F00E6 :1000A0008601880183120130DE000130DF00640028 :1000B00033305F028A110A1203188228DD016400BE :1000C00008305D028A110A12031878285E08FF3C86 :1000D00086005D08383E8400000888000310DE0DAD :1000E0000A308A011220DD0A8A110A12031D5F28D4 :1000F0008801FF3086000130DE00DF0A8A110A1213 :10010000031D572800308A010120DC005C08A00094 :10011000A1011D30A200A3018A012C20DC000130C6 :10012000DF000130DD0064005D085C028A110A1204 :10013000031CA1280310DF0DDD0A8A110A12031D1A :100140009328DF030730DD00640001305D028A116F :100150000A12031CC228FF305D07C000FF300318DD :10016000013EC1004008383E84000008C0005D0820 :10017000383E8400400880000130DD028A110A12F6 :0C0180000318A4285F08B8008A01532867 :02400E007D3FF4 :00000001FF
|