//proyec
#include <16f84a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#define periodo 125 //125 * 80microS =~10mS
#define duty 125 //parte del periodo que encenderan las lamparas
#define Tiempo_int 30 //50 * 125 * 80microS =~500mS entre cambio y cambio de intensidad
int c1=0; //rojo
int c2=0; //azul
int c3=0; //verde
int i2; //variable control de ciclo de retardo en intensidades
int i; //variable que controla el ciclo del periodo del pwm
int d = 0; //control porta
int z = 0; //control portb
//////////////////////////////////////////////////////////////////////////////////////////////////
void tiempo()
{
delay_ms(4000);
}
//led1_portb_0
void ciclo_PWM_10mS(){
for (i=1;i<periodo; i++) //control periodo
{
if (i<=c1) //control intensidad rojo
{
bit_set(z,0); //led1_portb_0 //Led2=port_b_bits_543(var)
bit_set(z,3); //led2_portb_3 //Led3=port_a&portb_bits_a&1_(v)b&76(ar)
bit_set(z,6); //led3_portb_6 //Led4=port_a_bits_320(var)
bit_set(d,0); //led4_porta_0
}
else
{
bit_clear(z,0); //led1_portb_0
bit_clear(z,3); //led2_portb_3
bit_clear(z,6); //led3_portb_6
bit_clear(d,0); //led4_porta_0
}
if (i<=c2) //control intensidad azul
{
bit_set(z,1); //led1_portb_1
bit_set(z,4); //led2_portb_4
bit_set(z,7); //led3_portb_7
bit_set(d,2); //led4_porta_2
}
else
{
bit_clear(z,1); //led1_portb_1
bit_clear(z,4); //led2_portb_4
bit_clear(z,7); //led3_portb_7
bit_clear(d,2); //led4_porta_2
}
if (i<=c3) //control intensidad verde
{
bit_set(z,2); //led1_portb_2
bit_set(z,5); //led2_portb_5
bit_set(d,1); //led3_porta_1
bit_set(d,3); //led4_porta_3
}
else
{
bit_clear(z,2); //led1_portb_2
bit_clear(z,5); //led2_portb_5
bit_clear(d,1); //led3_porta_1
bit_clear(d,3); //led4_porta_3
}
output_b(z);
output_a(d);
}
delay_us(40);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void tonos_mas(){
for (c1=1,c2=1,c3=0; c1<duty ; c1++,c2++) //;control de tono magenta
{
for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad
ciclo_PWM_10mS() ;
}
}
void tonos_2_mas(){
for (c3=1,c1=1,c2=0; c3<duty; c3++,c1++) //;control de tono amarillo
{
for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad
ciclo_PWM_10mS() ;
}
}
void tonos_3_mas(){
for (c3=1,c1=0,c2=1; c3<duty; c3++,c2++) //;control de tono cyan
{
for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad
ciclo_PWM_10mS() ;
}
}
void tonos_menos(){
for (c1=duty,c2=duty,c3=0; c1>1 ; c1--,c2--) //;control de tono magenta
{
for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad
ciclo_PWM_10mS() ;
}
}
void tonos_2_menos(){
for (c1=duty,c2=0,c3=duty; c1>1 ; c1--,c3--) //;control de tono amarillo
{
for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad
ciclo_PWM_10mS() ;
}
}
void tonos_3_menos(){
for (c3=duty,c1=0,c2=duty; c3>1; c3--,c2--) //;control de tono cyan
{
for (i2=1; i2<Tiempo_int; i2++) //;espera entre incrementos de intensidad
ciclo_PWM_10mS() ;
}
}
void negro() //color negro
{
z=0;
d=0;
output_b(z);
output_a(d);
tiempo();
}
void blanco() //color blanco
{
z=d=255;
output_b(z);
output_a(d);
tiempo();
z=d=0;
output_b(z);
output_a(d);
}
//b%76543210 //b%76543210
//B%arvarvar //A%xxxxvavr
void rojo() //color rojo //b%01001001 //a%xxxx0001
{
output_b(0x49);
output_a(0x01);
tiempo();
z=d=0;
output_b(z);
output_a(d);
}
void verde() //color verde
//b%76543210 //b%76543210
//B%arvarvar //A%xxxxvavr
//B%00100100 //A%xxxx1010
{
output_b(0x24);
output_a(0x0a);
tiempo();
z=d=0;
output_b(z);
output_a(d);
}
void azul() //color azul
//b%76543210 //b%76543210
//B%arvarvar //A%xxxxvavr
//B%10010010 //A%xxxx0100
{
output_b(0x92);
output_a(0x04);
tiempo();
z=d=0;
output_b(z);
output_a(d);
}
void amarillo() //color amarillo
//b%76543210 //b%76543210
//B%arvarvar //A%xxxxvavr
//B%01101101 //A%xxxx1011
{
output_b(0x6d);
output_a(0x0b);
tiempo();
z=d=0;
output_b(z);
output_a(d);
}
void cyan() //color cyan
//b%76543210 //b%76543210
//B%arvarvar //A%xxxxvavr
//B%10110110 //A%xxxx1110
{
output_b(0xb6);
output_a(0x0e);
tiempo();
z=d=0;
output_b(z);
output_a(d);
}
void magenta() //color magenta
//b%76543210 //b%76543210
//B%arvarvar //A%xxxxvavr
//B%11011011 //A%xxxx0101
{
output_b(0xdb);
output_a(0x05);
tiempo();
z=d=0;
output_b(z);
output_a(d);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
int main ()
{ //salida al puerto b=0
while (true)
{
// negro(); //(0, 0, 0) es negro
blanco(); //(255, 255, 255) es blanco
rojo(); //(255, 0, 0) es rojo
tonos_mas();
tonos_menos();
verde(); //(0, 255, 0) es verde
tonos_2_mas();
tonos_2_menos();
azul();
tonos_3_mas();
tonos_3_menos();
amarillo(); //(255, 255, 0) es amarillo
cyan(); //(0, 255, 255) es cyan
magenta(); //(255, 0, 255) es magenta
z=d=0;
output_b(z);
output_a(d);
}
return(0);
}