O.K that's not strange and i see one improvement that should be done first to make it simple.
About those LCDs, you can control more than 1 LCD with the same PIC, you just need few external parts. see the following thread, everything is really well explain. code and schematic are included
http://www.picbasic.co.uk/forum/showthread.php?t=626
so now you save one PIC, code, money, time....
Now, about the other 16F628... what will be his purpose, do you want to have bidirectional communication, i mean, do you want that the master send a command then receive the according answer from the 16F628???
If so, kepp the HSERIN/HSEROUT for your PC communication and use SERIN/SEROUT/SERIN2/SEROUT2 to talk to that device.
Code:' This is the snip of the Master PIC16F877 ' ' This will send a byte to the PIC16F628 and ' waiting for a reply. If there's no reply ' after 2 second it will display an error ' message to the LCD. ' SerialOUTToPIC16F628 var PORTC.0 SerialINFromPIC16F628 var PORTC.1 SentByPIC16F628 var byte SendMeBeer con 0 ' command bytes SendMeFruit con 1 ' to be SendMeCash con 2 ' send ' T2400 con 396 ' used for baudrate=2400 TimeoutDelay con 2000 ' used for timeout=2000 mSec=2 Sec HIGH SERIALOUTTOPIC16F628 ' For safety sake and avoid to send ' garbage at the first time start: pause 2000 ' LCD start-up delay AND future LCD message duration lcdout $fe,1 ' Clear LCD screen serout2 serialouttopic16f628 ,T2400,_ ' send command byte to [sendmebeer] ' the external PIC16F628 serin2 serialinfrompic16f628,T2400,_ ' waiting for timeoutdelay, DisplayErrorMessage,_ ' the external [sentbypic16f628] ' PIC16F628 answer ' jump to different routine ' depending of the ' SentbYPIC16F628 value ' branch sentBYpic16f628,[Budweiser,_ ' when = 0 MolsonDry,_ ' when = 1 SmirnoffIce]' when = 2 goto start ' Timeout occur, display ' the error message ' DisplayErrorMessage: lcdout "Looks like my",_ $fe,$c0,"buddy sleep!!" goto start BudWeiser: lcdout "Let's drink a ",$fe,$C0,_ "Budweiser Barrel" goto start MolsonDry: Lcdout "lezzz dwwwwrank",$fe,$c0,_ "a MolsonDry pot" goto start SmirnoffIce: lcdout "ZZZzzzzzzZZ i i",$fe,$c0,_ "loowve you....." goto startAbove are just rough example. Should be enough to start.Code:' This is the code snip for the PIC16F628 ' ' This will wait for a PIC16F877 command request ' and return a byte value. ' SerialOUTToPIC16F877 var PORTB.0 SerialINFromPIC16F877 var PORTB.1 SentByPIC16F877 var byte SendToPIC16F877 var byte Budweiser con 0 ' command bytes MolsonDry CON 1 ' to be SmirnoffIce CON 2 ' send ' T2400 con 396 ' used for baudrate=2400 high SERIALOUTTOPIC16F877 ' For safety sake and avoid to send ' garbage at the first time start: serin2 serialinfrompic16f877,t2400,_ ' waiting for [sentbypic16f877] ' the external ' PIC16F877 answer ' branch sentbypic16f877,[SendMeBeer,_ ' =0 SendMeFruit,_ ' =1 SendMeCash] ' =2 goto start SendMeBeer: sendtopic16f877=budweiser ' open the fridge and choose your beer goto SendData ' send it to master SendMeFruit: ' do according stuff goto SendData SendMeCash: ' do according stuff goto SendData SendData: serout2 serialouttopic16f877,t2400,[sendtopic16f877] goto start
For the PC communication you can use the internal USART module or still use SERIN/SEROUT stuff. As i remind, that part you already know how to play with in PIC amd in VB.
for your keyboard... hard to know wich kind you use but if it's a matrix one, you can find code example almost everywhere... Click here to download the Melabs keyx.bas file




Bookmarks