yes that is a great idea, going to google for samples of 4049!thx
Printable View
yes that is a great idea, going to google for samples of 4049!thx
here is the final result, the message is Baby on Board on my native language (bosnian)
http://www.youtube.com/watch?v=TVS4ZxKpRVA
the code is made in ProtonIde compiler and is similar to PBP hope someone will use it
Code:'****************************************************************
' SIMPLE 15X8 LED MATRIX SCROLLING EXAMPLE
' 16F877A External 8MHz Xtal Osc
' LED Matrix columns are conected to PORTC pin rc0 via ULN2004AN and CD4017.
' RC1 reset for 4017
' LED Matrix rows conected to PORTB via 100 ohm resistors
' RB0 - top row
' Author: Muamer Halilovic
' www.mtskola.com
' today
'***************************************************************************************
Device 16F877A
Xtal 12
TRISB = %00000000
TRISC = %10000000
TRISD = %00000000
PORTB=0
PORTC=0
PORTD=0
All_Digital = True
EWrite 0,[%00000100,%00000110,%01111111,%00000110,%00000100] 'Up Arrow
EWrite 5,[%00010000,%00110000,%01111111,%00110000,%00010000] 'Dn Arrow
EWrite 10,[%01111110,%00010001,%00010001,%00010001,%01111110] 'A
EWrite 15,[%01111111,%01001001,%01001001,%01001001,%00110110] 'B
EWrite 20,[%00111110,%01000001,%01000001,%01000001,%00100010] 'C
EWrite 25,[%01111111,%01000001,%01000001,%00100010,%00011100] 'D
EWrite 30,[%01111111,%01001001,%01001001,%01001001,%01000001] 'E
EWrite 35,[%01111111,%00001001,%00001001,%00001001,%00000001] 'F
EWrite 40,[%00111110,%01000001,%01001001,%01001001,%01111010] 'G
EWrite 45,[%01111111,%00001000,%00001000,%00001000,%01111111] 'H
EWrite 50,[%00000000,%01000001,%01111111,%01000001,%00000000] 'I
EWrite 55,[%00100000,%01000000,%01000001,%00111111,%00000001] 'J
EWrite 60,[%01111111,%00001000,%00010100,%00100010,%01000001] 'K
EWrite 65,[%01111111,%01000000,%01000000,%01000000,%01000000] 'L
EWrite 70,[%01111111,%00000010,%00000110,%00000010,%01111111] 'M
EWrite 75,[%01111111,%00000100,%00001000,%00010000,%01111111] 'N
EWrite 80,[%00111110,%01000001,%01000001,%01000001,%00111110] 'O
EWrite 85,[%01111111,%00001001,%00001001,%00001001,%00000110] 'P
EWrite 90,[%01111111,%00001001,%00011001,%00101001,%01000110] 'R
EWrite 95,[%01000110,%01001001,%01001001,%01001001,%00110001] 'S
EWrite 100,[%00000001,%00000001,%01111111,%00000001,%00000001] 'T
EWrite 105,[%00111111,%01000000,%01000000,%01000000,%00111111] 'U
EWrite 110,[%00011111,%00100000,%01000000,%00100000,%00011111] 'V
EWrite 115,[$00,$00,$00,$00,$00] 'blank space
EWrite 185,[$00,$00,$00,$00,$00]
EWrite 190,[$00,$00,$00,$00,$00]
EWrite 195,[$00,$00,$00,$00,$00]
EWrite 200,[$00,$00,$00,$00,$00]
EWrite 205,[$00,$00,$00,$00,$00]
EWrite 210,[$00,$00,$00,$00,$00]
EWrite 215,[$00,$00,$00,$00,$00]
EWrite 220,[$00,$00,$00,$00,$00]
EWrite 225,[$00,$00,$00,$00,$00]
EWrite 230,[$00,$00,$00,$00,$00]
EWrite 235,[$00,$00,$00,$00,$00]
EWrite 240,[$00,$00,$00,$00,$00]
EWrite 245,[$00,$00,$00,$00,$00]
'________________________________________________________________
'Deklaracija promjenjivih
'________________________________________________________________
Dim kolona As Byte
Dim brojac As Byte
Dim k As Byte
Dim scan As Byte
Dim scroll As Byte
leddata var Byte[100]
Dim ir_ulaz As Word ' WORD variabla za zaprimanje podataka
Dim EEpromAdress As Byte 'eprom adresa za upis
Dim test As Word 'uporedjivach
Dim upisi As ir_ulaz.LowByte
Dim i As Byte
Dim sledeceslovo As Word
Dim prethodnoslovo As Word
Dim potvrdi As Word
Dim play As Word
Dim x As Byte
Dim j As Byte
Dim cnt As Byte
Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim d As Byte
'________________________________________________________________
'poetene vrijednosti
'________________________________________________________________
EEpromAdress = 255
cnt=0
k=114
'________________________________________________________________
'Inicijalizacija
'________________________________________________________________
High PORTD.0
DelayMS 1300
Low PORTD.0
DelayMS 1300
'________________________________________________________________
'pregledaj eeprom ako ima sta idi na main ako ne idi na pripremu
'________________________________________________________________
'*******************************************************************
Declare RC5In_Pin PORTC.7 'infrared sensor pin
'********************************************************************
provjera:
test.LowByte = ERead 255 'iscitaj zapis iz eeproma sa adrese 255
If test.LowByte = $FF Then 'ako je FF
GoSub eepromprogON 'idi u programiraj komande
DelayMS 500
EndIf
test.LowByte = ERead 120 ' iscitaj zapis iz eeproma sa adrese 120 (pocetak poruke)
If test.LowByte = $FF Then ' ako je 00
GoSub odaberporuku ' idi na odaberi poruku
DelayMS 500
EndIf
main:
Clear ' ocisti sve varijable
Low PORTD.0 ' usli smo u mod za prikaz poruke
a=14
k=120
j=0
leddata[0-13] = $00 ' varijabla ledadta od 0 do 13 je 00
For b = 0 To 11 ' moguci broj slova u poruci
For i = 0 To 4
c=i+a 'povecaj a=14-19; a=20-24; a=26-30 itd...
d=i+j+k 'povecaj j=120-124; a=126-130; a=131-135 itd...
leddata [c]= ERead d 'filuj ledadtu od 14 do max broja slova za prikaz iz eeproma pocevsi od 120 pa nadalje
DelayUS 20
Next
leddata [a+5]=ERead 119 'upisi prazanu kolonu izmedju slova
a=a+6
j=j+6
Next
For scroll = 0 To c ' skrolaj poruku c zadnji leddata
For scan = 0 To 35
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 14 'broj kolona
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 250
PORTB=0
Next
Next
For brojac = 0 To (c-1)
leddata[brojac]=leddata[brojac+1]' pomjeri za jedan
Next
Next
If PORTD.1=1 Then
GoSub odaberporuku
End If
GoTo main
End
eepromprogON: 'podprogram za odabir komadi za upravljanje
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EWrite EEpromAdress , [ ir_ulaz.LowByte ]
sledeceslovo.LowByte = ERead EEpromAdress ' pridruzi varijabli sledece slovo komandu i upisi u eprom na zadnju lokaciju
For i = 0 To 4
leddata [i]=ERead i ' prikazi strelicu
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Low PORTD.0
DelayMS 100
High PORTD.0
DelayMS 100
Low PORTD.0
DelayMS 100
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EEpromAdress=EEpromAdress - 1
EWrite EEpromAdress , [ ir_ulaz.LowByte ]
prethodnoslovo.LowByte = ERead EEpromAdress ' pridruzi varijabli sledece slovo komandu i upisi u eprom na zadnju lokaciju
For i = 0 To 4
leddata [i]=ERead i+5 ' prikazi strelicu
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Low PORTD.0
DelayMS 100
High PORTD.0
DelayMS 100
Low PORTD.0
DelayMS 100
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EEpromAdress=EEpromAdress - 1
EWrite EEpromAdress , [ ir_ulaz.LowByte ]
play.LowByte = ERead EEpromAdress ' pridruzi varijabli play komandu i upisi u eprom na predzadnju lokaciju
leddata[0]=$FE 'play simbol
leddata[1]=$7C
leddata[2]=$38
leddata[3]=$10
leddata[4]=$00
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Low PORTD.0
DelayMS 100
High PORTD.0
DelayMS 100
Low PORTD.0
DelayMS 100
High PORTD.0
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
EEpromAdress=EEpromAdress -1
EWrite EEpromAdress , [ ir_ulaz.LowByte ] ' pridruzi varijabli potvrfi komandu i upisi u eprom na predpredzadnju :D lokaciju
potvrdi.LowByte = ERead EEpromAdress
leddata[0]=$00
leddata[1]=$00
leddata[2]=$08
leddata[3]=$10
leddata[4]=$20
leddata[5]=$10
leddata[6]=$08
leddata[7]=$04
leddata[8]=$02
leddata[9]=$01
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 9
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
For x=0 To 5
Toggle PORTD.0
DelayMS 100
x=x+1
Next
x=0
EEpromAdress=0
Return 'vrati se u if petlju na pocetku
odaberporuku: ' podrpogram za odabir poruke za prikaz
High PORTD.0
sledeceslovo.LowByte = ERead 255
prethodnoslovo.LowByte = ERead 254
play.LowByte = ERead 253
potvrdi.LowByte = ERead 252
cnt=0
k=114
Low PORTD.1
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
While ir_ulaz.LowByte<>play.LowByte
Repeat
ir_ulaz.LowByte= RC5In ' Primanje signala sa TSOP1738
Until upisi<> 255' Trazi-cekaj dok ne naleti valjano zaglavlje signala
If ir_ulaz.LowByte=prethodnoslovo.LowByte Then
If cnt = 0 Then
cnt=5
EndIf
cnt=cnt-5
For i = 0 To 4
leddata [i]=ERead i+cnt '
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
ElseIf ir_ulaz.LowByte=sledeceslovo.LowByte Then
cnt=cnt+5
For i = 0 To 4
leddata [i]=ERead i+cnt '
Next
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 4
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
If cnt = 119 Then
cnt=0
EndIf
ElseIf ir_ulaz.LowByte=potvrdi.LowByte Then 'upisi odabran0o slovo u narednu slobodnu eeprom lokaciju
k=k+6'krecemo od 120
For i = 0 To 4
leddata [i]=ERead i+cnt
DelayUS 10 '
Next
For i = 0 To 4
EWrite (i+k),[leddata [i]] '
DelayMS 20
Next
For scroll =0 To 1
For i = 0 To 4
leddata [i]=ERead i+cnt 'prikazi odabrano slovo
Next
leddata[5]=$00
leddata[6]=$00
leddata[7]=$08
leddata[8]=$10
leddata[9]=$20
leddata[10]=$10
leddata[11]=$08
leddata[12]=$04
leddata[13]=$02
leddata[14]=$01
For scan = 0 To 185
PORTC.1 = 1 'reseting 4017
PORTC.1 =0
For kolona = 0 To 14
PORTC.0 = 1 'clock 4017
PORTC.0 =0
PORTB = leddata[kolona]
DelayUS 500
PORTB=0
Next
Next
Next
EndIf
Wend
Low PORTD.0
Return ' vrati se odakle si i dosao
Hi to all,
A newbie here. I try to compile the file from first post but I receive a constant error
ERROR Line 51: LOOP without a matching DO.
How can I avoid that?
Many thanks in advance
Gabi
P.S.
I know it is a old thread but maybe someone or OP will chime in and help me with that error
I suppose you are using PBP 2.60, right?
LOOP is a reserved word for 2.60. So use Loop1 or something.
Ioannis
Hi Ioannis,
Yes, sorry I forgot to tell that. Yessss it is working, meaning compile without errors. Now my problem it is in Proteus - Simulation it is not running on real time due the excessive CPU load?? Why?
Do I need to put some delays in the code?
Thank you in advance
Gabi
Sorry, I do not use Proteus.
I prefer the real stuff :)
Ioannis
Still, Ioannis can you have a look on that code and give me your expert opinion
Rgds
Gabi
The code is simple and should run with no problems.
If you insist on simulation, I do not know much. I hear that Proteus is the Best, but still have a few flaws.
Did you try the code on real circuit?
Ioannis
Hi Ioannis,
No, I do not have all the parts to try it. That was the reason for using Proteus. I saw a post from you regarding ULN 2083. If I decided to use that instead ULN 2004 what else should I need to modify (software and hardware)?
Regards
Gabi
Hi,
After 1 month I finally make that running - simulating properly in Proteus. My problem was that ULN2803. I didn't know that chip invert signal's. After I put some hex inverters 7404 everything running properly.
My question is:
in real life (I will build the real circuit) I need that inverters or everything will run normal without that?
Many thanks
Gabi
Instead of inverters, why don't you invert he data that you output from the PIC?
Ioannis
Instead of inverters, why don't you invert the data that you output from the PIC?
Ioannis
Hi Ioannis,
I try to do that but, I failed. Can you show my how? On the other hand the question it is still: do I need that inverters in a real circuit?
Thank you for your time
Gabi
If your load needs an 1 and you send a 0 then it is obvious that you need an inverter.
But as I said, instead of 1, send 0 in software.
For example,
var_a=%10101010
var_1=var_a XOR %11111111
The result in var_a will be the complement of the initial value.
Ioannis
Hi all,
This update now scrolls temperature in degrees C & F,
with indication arrow to show increase or decrease in temperature
and scrolls 'wellyb00t' at every few minutes.
Works with PBP 2.60C & MPLABS v8.63
See above post, this is the HEX file for it.
couldnt add a file with .hex extention so changed it to .txt
just remove .txt extention
hello all..
i need your help. i want to build program even one word to display on dot matrix (7x5) with pic16f877a. i use c language. but when i compile it don't have any error. but it can't work on dot matrix after i load that program. anyone can help me.. i'm on stuck. hope you all can help me. here my program. i want use port a n port b.
#include <16f877a.h>
#use delay(clock=20000000)
#fuses hs,nowdt,nocpd,nolvp,noprotect
#byte porta=0x06
#byte portb=0x08
#bit clock=portd.6
#bit data=portd.7
unsigned int8 i,j,index1,n,
addr[11]={0xEA,0xEA,0x2A,0x2A,0x2A,0x2A,0xAA,0x82,0xFF,0xF F,0xFF},
cont[11];
void main()
{
set_tris_a(0x00);
set_tris_b(0x00);
while(1)
{
for(n=0;n<=99;n++)
{
data=1;
for(i=0;i<=5;i++)
{
clock=1;
portb=addr[i];
delay_ms(1);
clock=0;
data=0;
}
}
for(j=0;j<=7;j++)
{
cont[j]=addr[j];
}
for(j=0;j<=7;j++)
{
addr[j]=cont[j+1];
}
addr[10]=cont[0];
}
}
besides that i'm a new in programming. hope n hope anyone can help me.. thank you.
Hi, Please let me know how to program this IC PIC16F872 as I am new to this area.
My email: [email protected]
Appreciate your help
sir plz send me the code and ckt diagram of LED moving display using ATmega 16
This is a PIC controller forum. Not AVR.
Ioannis
Hi please any one would you able to help me to build the LED Matrix project? i have already designed it for 10x7 matrix. it's working nicely. but if i extend this to 20x7 then it s running and blinking fastly. i think the delay wil b a problem. now i want some guidelines from u. please it's urgent. help me.[email protected]. mail me the code in c
Sure, which compiler do you want me to make it?
Please, check the forum and what we do here. No C and sure no serving to the plate.
Ioannis
Thank you very much for ur quick reply,
Now i'm using MBlap HItech Compiler and Micro c for pic.
Please guide me. i already done this without shift register but when i try using shift register it's flickering please help me. it's urgent
hai, i am doing project on PIC16F877A.I am executing the code in MPLAB.Can anyone help me to display the characters from A to Z in 8 X 8 LED using MPLAB code....
Take a look at this ...http://www.picbasic.co.uk/forum/cont...ng-thermometer
hello mr.fratello... can you help me? im very need your help.. i want to do font moving display... but the coding is complicated to me... can u teach me about the coding for font moving display...
im use pic 16f877a... please help me... anybody also can help me...