How to display dot on 7-seg , 4 digit


Results 1 to 28 of 28

Threaded View

  1. #7
    Join Date
    May 2005
    Posts
    70


    Did you find this post helpful? Yes | No

    Default

    Hi paul borgmeier
    Now I try to show temp with DS1820 on 7 seg 4 digit
    Below is code , I can read data temp from ds1820 and send to RS232 -->OK but canot to diplay to 7 Seg. Ex 29.05C

    Code :
    Define LOADER_USED 1
    DEFINE OSC 4
    @ Device pic16F877, xt_OSC, BOD_OFF, PWRT_ON, WDT_OFF, PROTECT_OFF,WRT_ON

    Segments Var PORTC
    Digits Var PORTD

    i Var Byte
    n Var Byte
    Value Var Word


    TRISc = $00 ' Set segment pins to output
    TRISd = $f0 ' Set digit pins to output


    ' Allocate variables
    command var byte ' Storage for command
    J var byte ' Storage for loop counter
    temp var word ' Storage for temperature
    DQ var PORTd.4 ' Alias DS1820 data pin
    DQ_DIR var TRISd.4 ' Alias DS1820 data direction pin

    TRISc = $00 ' Set segment pins to output
    TRISd = $f0 ' Set digit pins to output
    TrisB = $00
    Portb = $00
    OPTION_REG = $55 ' Set TMR0 configuration 1:64
    INTCON = $A0 ' Enable TMR0 interrupts
    On Interrupt Goto display

    ADCON1 = 7 ' Set PORTA and PORTE to digital

    ' Lcdout $fe, 1, "Temp in degrees C" ' Display sign-on message
    'debug ====
    DEFINE HSER_RCSTA 90h
    DEFINE HSER_TXSTA 24h
    DEFINE HSER_SPBRG 12 ' 19200 Bauds ,4 m
    'debug ====

    ' Mainloop to read the temperature and display on LCD
    mainloop:
    Gosub init1820 ' Init the DS1820

    command = $cc ' Issue Skip ROM command
    Gosub write1820

    command = $44 ' Start temperature conversion
    Gosub write1820

    Pause 2000 ' Wait 2 seconds for conversion to complete

    Gosub init1820 ' Do another init

    command = $cc ' Issue Skip ROM command
    Gosub write1820

    command = $be ' Read the temperature
    Gosub write1820
    Gosub read1820

    'Display the decimal temperature
    'Lcdout $fe, 1, dec (temp >> 1), ".", dec (temp.0 * 5), " degrees C"
    'HSEROUT ["Temp = ",dec (temp>>1),".", dec (temp.0*5)," C",13,10]
    Goto mainloop ' Do it forever


    ' Initialize DS1820 and check for presence
    init1820:
    Low DQ ' Set the data pin low to init
    Pauseus 500 ' Wait > 480us
    DQ_DIR = 1 ' Release data pin (set to input for high)

    Pauseus 100 ' Wait > 60us
    If DQ = 1 Then
    'Lcdout $fe, 1, "DS1820 not present"
    Pause 500
    Goto mainloop ' Try again
    Endif
    Pauseus 400 ' Wait for end of presence pulse
    Return


    ' Write "command" byte to the DS1820
    write1820:
    For j = 1 to 8 ' 8 bits to a byte
    If command.0 = 0 Then
    Gosub write0 ' Write a 0 bit
    Else
    Gosub write1 ' Write a 1 bit
    Endif
    command = command >> 1 ' Shift to next bit
    Next j
    Return

    ' Write a 0 bit to the DS1820
    write0:
    Low DQ
    Pauseus 60 ' Low for > 60us for 0
    DQ_DIR = 1 ' Release data pin (set to input for high)
    Return

    ' Write a 1 bit to the DS1820
    write1:
    Low DQ ' Low for < 15us for 1
    @ nop ' Delay 1us at 4MHz
    DQ_DIR = 1 ' Release data pin (set to input for high)
    Pauseus 60 ' Use up rest of time slot
    Return


    ' Read temperature from the DS1820
    read1820:
    For J = 1 to 16 ' 16 bits to a word
    temp = temp >> 1 ' Shift down bits
    Gosub readbit ' Get the bit to the top of temp
    Next J
    Return

    ' Read a bit from the DS1820
    readbit:
    temp.15 = 1 ' Preset read bit to 1
    Low DQ ' Start the time slot
    @ nop ' Delay 1us at 4MHz
    DQ_DIR = 1 ' Release data pin (set to input for high)
    If DQ = 0 Then
    temp.15 = 0 ' Set bit to 0
    Endif
    Pauseus 60 ' Wait out rest of time slot
    Return

    '================== 7 seg ment display ==============================
    disable
    display:
    INTCON.2 = 0 'clear the interrupt flag

    VALUE = (temp >>1)+(temp.0 * 5)

    For i = 0 To 3 ' Loop through 4 digits
    n = Value Dig i ' Get digit to display
    Gosub display1 ' Display the value
    NEXT I

    goto mainloop

    display1:
    Digits = $ff ' All digits off to prevent ghosting

    ' Convert binary number in n to segments for LED
    ' COM ANODE 1234567890
    Lookup n, [$3F,$06, $5B, $4F, $66, $6D, $7D, $07, $7F, $6F, $77, $7C, $39, $5E, $79, $71], Segments
    ' Set digit pin i to 0 (on) and the rest of the pins to 1 (off)

    Digits = ~Dcd i

    Return
    enable
    End
    Attached Images Attached Images  

Similar Threads

  1. Hdsp 21xx display
    By Original in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 7th June 2012, 20:07
  2. LED Machine Tach For Tired Eyes
    By Archangel in forum mel PIC BASIC Pro
    Replies: 33
    Last Post: - 27th January 2010, 14:55
  3. Single digit 7 Seg LED clock - PIC16F88
    By thirsty in forum Code Examples
    Replies: 4
    Last Post: - 17th July 2009, 08:42
  4. DS1820 display with 7-seg 4 digits
    By chai98a in forum Code Examples
    Replies: 12
    Last Post: - 10th April 2008, 13:12
  5. 7 segment digit problem (using Mister E's code)
    By jmgelba in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 9th September 2005, 20:25

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts