'04 mart 2009 ' ' 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 |
---|
6 Ekim 2013 Pazar
Posted by Adsız on 06:41
with No comments so far
Categories: Elektronik Devreler, LCD Ekranlı Saat 16F88 Bas Dosyası
Kaydol:
Kayıt Yorumları (Atom)
0 yorum:
Yorum Gönder