Seven segment display 4 digit for shift 595 For Basic PRO Compiler




@ device pic16f877
define osc 4
define adc_bits 8
Include "MODEDEFS.bas"  
DEFINE ADC_SAMPLEUS 100 
DEFINE SHIFT_PAUSEUS 100 
ADCON1 = 7          
TRISA =$ff
trisb =$00
'=======output======='
dat      vAR portb.0   
clk      vAR portb.1   
latch    vAR portb.2 
relay    VAR portb.3
'======input========='
enter   vAR porta.0   
chg     VAR porta.1
hour    var     byte          
minute  var     byte     
second  var     byte     
prsc1   var     byte       
i       var     byte 
num     var     word
num2    var    word
num3    var    word
digit   var     byte
unit    var     byte
ten     var     byte
roy     var     byte
phun    var     byte
flg_int var     bit   
disp    var     byte
num1    var     byte 
ref     var     byte
hour   = 0  
minute = 0
second = 0
prsc1  = 0
disp   = 0
num    = 0
ref    = 0
num1 = 0
high relay
Pause 500 
start:
OPTION_REG = 0 	 
INTCON     = 0      
if chg = 0 then start
start1:     
gosub set_time
gosub display
high relay
num1 = ref      
OPTION_REG = 0 	 
INTCON     = 0
disable        
if chg = 1 then start1    
loop:    
gosub int_off 
if enter = 1  then loop                    
OPTION_REG = $d5	 
INTCON     = $a0
pause 50         
On Interrupt Goto int_on	     
main: 
Goto main    
Disable           
int_on:         
prsc1 = prsc1 + 1       
If prsc1 < 61 Then reset_tm0 
prsc1  = 0
second = second + 1          
If second >= 60 Then
second = 0
minute = minute + 1
If minute  >= 100 Then
minute  = 0
hour    = hour + 1
If hour >= 24 Then
hour = 0
Endif
Endif
gosub display  
Endif              
num2 = ((num1-1)*100)+59 
num3 = (minute*100)+second                               
num  = num2-num3
gosub time_work 
gosub display
return
int_off:
OPTION_REG = 0 	 
INTCON     = 0    
high relay
minute = 0
second = 0
num1 = ref
num = 11
gosub display1
disable 
return
time_work:
if minute >= num1 then
OPTION_REG = 0
INTCON = $00
second  = 0
minute  = 0
num = 0
high  relay
gosub display                  
resume start
pause 100
else 
low   relay 
gosub display
pause 5  
endif
return
reset_tm0:
if chg = 0 then 
OPTION_REG = $00
INTCON = $00
INTCON.2 = 1
num2 = 0
num3 = 0
num = num2 - num3 
ref = 0
num1 = ref
pause 50   
resume start   
else
INTCON.2 = 0     
endif      
Resume  
end 
set_time:  
if chg = 1 and enter = 0  then               
pause 150                 
if ref  >= 100 then
ref  = 0
num = ref
gosub display
pause 100                                          
else   
ref  = ref  + 1 
num = ref
gosub display                 
pause 100                                            
endif                              
endif 
return
display:  
digit = num dig 0 
lookup digit,[$c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90],unit
PAUSEUS 5
digit = num dig 1 
lookup digit,[$c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90],ten
PAUSEUS 5
digit = num dig 2 
lookup digit,[$40,$79,$24,$30,$19,$12,$02,$78,$00,$10],roy
pauseus 5
digit = num dig 3 
lookup digit,[$c0,$f9,$a4,$b0,$99,$92,$82,$f8,$80,$90],phun
pauseus 5 
IF num <= 9 then 
ten = $ff
roy = $ff
phun =$ff
ShiftOut dat,clk,1,[unit,ten,roy,phun]
else 
IF num <= 99 then 
roy = $ff
phun =$ff
ShiftOut dat,clk,1,[unit,ten,roy,phun]
else
IF num <= 999 then 
phun =$ff
ShiftOut dat,clk,1,[unit,ten,roy,phun]
else
ShiftOut dat,clk,1,[unit,ten,roy,phun]
endif
endif
endif     
Pauseus 10
Low latch 
Pauseus 10 
high latch 
Return
display1:
digit = num dig 0 
lookup digit,[$ff,$09],unit
PAUSEUS 5
digit = num dig 1 
lookup digit,[$ff,$C6],ten
PAUSEUS 5
digit = num dig 2 
lookup digit,[$ff,$09],roy
pauseus 5
digit = num dig 3 
lookup digit,[$ff,$09],phun
pauseus 5 
IF num <= 9 then 
ten = $ff
roy = $ff
phun =$ff
ShiftOut dat,clk,1,[unit,ten,roy,phun]
else 
IF num <= 99 then 
roy = $ff
phun =$ff
ShiftOut dat,clk,1,[unit,ten,roy,phun]
else
IF num <= 999 then 
phun =$ff
ShiftOut dat,clk,1,[unit,ten,roy,phun]
else
ShiftOut dat,clk,1,[unit,ten,roy,phun]
endif
endif
endif     
Pauseus 10
Low latch 
Pauseus 10 
high latch   
Return

READ  Interfacing PIC12F1822 with ST7735 SPI TFT display

JLCPCB – Prototype 10 PCBs for $2 + 2 days Lead Time
China’s Largest PCB Prototype Enterprise, 300,000+ Customers & 10,000+ Online Orders Per Day
Inside a huge PCB factory: https://www.youtube.com/watch?v=_XCznQFV-Mw




Leave a Comment

*
= 4 + 0

Read previous post:
UART Communication using PIC Microcontroller
UART Communication using PIC Microcontroller

In this tutorial we learn to Enable UART communication with PIC Microcontroller and how to transfer data to and from...

Close
Scroll to top