16F628A ile sürülmüş LCD Ekran Bağlantısı, 16F88 microchipe uygulanabilir.
Portlar benzer olduğundan sorunsuz çalışır.
Alttaki bas kodlarını kopyalayıp derleyici programına atabilirsiniz.
' PIC16F88 microchip ile LCD Ekranlı Saat Projesi
'04 ekim 2016
'
' Demonstrate operation of an LCD in 4-bit mode
'
' LCD should be connected as follows:
' LCD PICmicro
' DB4 PortA.0
' DB5 PortA.1
' DB6 PortA.2
' DB7 PortA.3
' RS PortA.4 (add 4.7K pullup resistor to 5 volts)
' E PortB.3
' RW Ground
' Vdd 5 volts
' Vss Ground
' Vo 20K potentiometer (or ground)
' DB0-3 No connect
hour Var Byte ' Define hour variable
dhour Var Byte ' Define display hour variable
minute Var Byte ' Define minute variable
second Var Byte ' Define second variable
ticks Var Byte ' Define pieces of seconds variable
update Var Byte ' Define variable to indicate update of LCD
i Var Byte ' Debounce loop variable
' Turn off Watchdog Timer and disable reset so button can be used to set clock
OSCCON = %01100000 ' kristalsiz çalışıyor
@ DEVICE pic16F88, INTRC_OSC_NOCLKOUt,MCLR_off
CMCON = 7 ' PORTA digital
Pause 100 ' Wait for LCD to startup
ANSEL = 0 ' PORTA is digital
CMCON = 7 ' PORTA digital
Pause 100 ' Wait for LCD to startup
hour = 0 ' Set initial time to 12:00:00 AM
minute = 0
second = 0
ticks = 0
update = 1 ' Force first display
' Set TMR0 to interrupt every 16.384 milliseconds
OPTION_REG = $55 ' Set TMR0 configuration and enable PORTB pullups
INTCON = $a0 ' Enable TMR0 interrupts
On Interrupt Goto tickint
' Main program loop - in this case, it only updates the LCD with the time
mainloop:
' Check any button pressed to set time
If PORTB.7 = 0 Then decmin
If PORTA.5 = 0 Then incmin
' Check for time to update screen
chkup: If update = 1 Then
Lcdout $fe, 1 ' Clear screen
' Display time as hh:mm:ss
dhour = hour ' Change hour 0 to 12
If (hour // 12) = 0 Then
dhour = dhour + 12
Endif
' Check for AM or PM
If hour < 12 Then
Lcdout dec2 dhour, ":", dec2 minute, ":", dec2 second, " AM"
Else
Lcdout dec2 (dhour - 12), ":", dec2 minute, ":", dec2 second, " PM"
Endif
update = 0 ' Screen updated
Endif
Goto mainloop ' Do it all forever
' Increment minutes
incmin: minute = minute + 1
If minute >= 60 Then
minute = 0
hour = hour + 1
If hour >= 24 Then
hour = 0
Endif
Endif
Goto debounce
' Decrement minutes
decmin: minute = minute - 1
If minute >= 60 Then
minute = 59
hour = hour - 1
If hour >= 24 Then
hour = 23
Endif
Endif
' Debounce and delay for 250ms
debounce: For i = 1 To 25
Pause 10 ' 10ms at a time so no interrupts are lost
Next i
update = 1 ' Set to update screen
Goto chkup
' Interrupt routine to handle each timer tick
disable ' Disable interrupts during interrupt handler
tickint: ticks = ticks + 1 ' Count pieces of seconds
If ticks < 61 Then tiexit ' 61 ticks per second (16.384ms per tick)
' One second elasped - update time
ticks = 0
second = second + 1
If second >= 60 Then
second = 0
minute = minute + 1
If minute >= 60 Then
minute = 0
hour = hour + 1
If hour >= 24 Then
hour = 0
Endif
Endif
Endif
update = 1 ' Set to update LCD
tiexit: INTCON.2 = 0 ' Reset timer interrupt flag
Resume
End