Code Ccs Led RGB

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

#include <16F628a.

H>
#fuses HS,NOWDT, PUT, BROWNOUT, NOLVP // 20 MHz xtal
#use delay(clock=20000000)
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#priority CCP1, TIMER1
#define BytePtr(var, offset) (char *)((char*)&var + offset)
#byte PIR1 = 0xF9E
#bit TMR1IF = PIR1.0
#define
data
PIN_b4 // pin 14
#define
latch595
PIN_b6 // pin 12
#define
clk
PIN_b5 // pin 11
int8 gc_timer1_extension = 0;
int8 gc_capture_flag = FALSE;
int32 g32_ccp_delta;
//#INCLUDE <LCDDRIVER.C>
//-----------------------------------------------------int8 i,j,l,k,m=10;
int1 kt;
int8 const datam[9]={0b11111111,0b01111111,0b00111111,0b00011111,0b00001111,0b00
001110,0b00001100,0b00001000,0b00000000};
int8 const datam2[9]={0b11111111,0b11110111,0b11110011,0b11110001,0b11110000,0b1
1100000,0b11000000,0b10000000,0b00000000};
//int8 const data[8]={0b00001000,0b10001000,0b01001000,0b00101000,0b00011000,0b0
0001100,0b00001010,0b00001001};
#int_timer1
void timer1_isr(void)
{
gc_timer1_extension++;
}
//-----------------------------------------------------#int_ccp1
void ccp1_isr(void)
{
char timer_ext_copy;
int32 current_ccp;
static int32 old_ccp = 0;
gc_capture_flag = TRUE;
current_ccp = (int32)CCP_1;
timer_ext_copy = gc_timer1_extension;
if(TMR1IF)
{
if(*BytePtr(current_ccp, 1) < 2)
timer_ext_copy++;
gc_timer1_extension++;
TMR1IF = 0;
}
*BytePtr(current_ccp, 2) = timer_ext_copy;
g32_ccp_delta = (current_ccp > old_ccp) ? current_ccp - old_ccp : current_ccp +
(0x1000000 - old_ccp);
old_ccp = current_ccp;
}
//=======================

void send595(int8 temp) {


int8 i;
for(i=0;i<8;i++)
{

if((temp&0x80)!=0)
output_high(data);
//bit 1
else output_low(data); //bit 0
delay_cycles(1);
output_high(clk);
delay_cycles(1);
output_low(clk);
temp=temp<<1;
}
delay_cycles(1);
output_high(latch595);
delay_cycles(1);
output_low(latch595);
}
void ledm(int8 thu)
{
if(thu==1)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[1]);
}
if(thu==2)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[2]);
}
if(thu==3)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[3]);
}
if(thu==4)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[4]);
}
if(thu==1)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[1]);
}
if(thu==5)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[5]);
}
if(thu==6)
{

output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[6]);
}
if(thu==7)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[7]);
}
if(thu==8)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
}
if(thu==9)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
delay_us(m);
send595(datam[0]);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[1]);
delay_us(m);
}
if(thu==10)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
delay_us(m);
send595(datam[0]);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[2]);
delay_us(m);
}
if(thu==11)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
delay_us(m);
send595(datam[0]);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[3]);
delay_us(m);
}
if(thu==12)
{

output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
delay_us(m);
send595(datam[0]);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[4]);
delay_us(m);
}
if(thu==13)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
delay_us(m);
send595(datam[0]);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[5]);
delay_us(m);
}
if(thu==14)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
delay_us(m);
send595(datam[0]);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[6]);
delay_us(m);
}
if(thu==15)
{
output_high(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam[8]);
delay_us(m);
send595(datam[0]);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[7]);
delay_us(m);
}
if(thu==16)
{
output_high(pin_b1);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[8]);
}
if(thu==17)
{
output_high(pin_b1);

output_high(pin_b2);
output_low(pin_b7);
send595(datam2[8]);
delay_ms(300);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam2[8]);
delay_ms(300);
}
}
void main()
{
float tanso;
int32 current_ccp_delta;
set_tris_a(0);
set_tris_b(0x00001000);
//setup_adc_ports(a0);
//setup_adc (ADC_CLOCK_INTERNAL); // chon xung clock
//set_adc_channel (0);
set_timer1(0);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_ccp1(CCP_CAPTURE_RE);
clear_interrupt(INT_TIMER1);
enable_interrupts(INT_TIMER1);
clear_interrupt(INT_CCP1);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
//delay_ms(200);
for(j=0;j<3;j++)
{
output_high(pin_b1);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[8]);
delay_ms(200);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam2[8]);
delay_ms(200);
}
for(j=1;j<=8;j++)
{
ledm(j);
delay_ms(60);
}
for(j=9;j<=16;j++)
{
for(l=0;l<2;l++)
{
for(k=0;k<90;k++)
{
ledm(j);

}
}
}
ledm(16);
delay_ms(200);
for(j=16;j>=9;j--)
{
for(l=0;l<2;l++)
{
for(k=0;k<90;k++)
{
ledm(j);
}
}
}
for(j=8;j>=1;j--)
{
ledm(j);
delay_ms(80);
}
for(j=0;j<4;j++)
{
output_high(pin_b1);
output_high(pin_b2);
output_low(pin_b7);
send595(datam2[8]);
delay_ms(100);
output_low(pin_b1);
output_low(pin_b2);
output_low(pin_b7);
send595(datam2[8]);
delay_ms(100);
}
//ledm(1);
while(1)
{
if(gc_capture_flag == TRUE)
{
disable_interrupts(GLOBAL);
current_ccp_delta = g32_ccp_delta;;
enable_interrupts(GLOBAL);
tanso = (5000000L / (float)current_ccp_delta);
gc_capture_flag = FALSE;
}
}
}

You might also like