📄 envcar.c
字号:
#include "pic.h"
#include "consts.h"
#include "envcar.h"
#ifndef SANS_PIC_BASIC
#use fixed_io(a_outputs=B_DATA, B_CLOCK)
//attention_au_pic = 5
#else
#use fixed_io(a_outputs=B_DATA, B_CLOCK,PIC_CLOCK,PIC_DATA,PIN_A0,PIN_A1)
#endif
//#use fixed_io(a_outputs=PIN_A2, PIN_A3)
#use fixed_io(b_outputs=)
#use fixed_io(c_outputs=)
void initEnvoi()
{
output_low(B_CLOCK);
}
#separate
void envoiCar(int8 car)
{
int8 i;
if(car==CAR_PAUSE)
{
delay_ms(PAUSE_LENGTH);
car=CAR_CLR;
}
//Signal d'envoi
emmetSignal(0);
//Envoi
for(i=0;i<8;i++)
{
if( (car & (0x01<<i)) == 0)
emmetSignal(0);
else
emmetSignal(1);
}
}
void emmetSignal(int1 b)
{
int16 lj;
output_low(B_CLOCK);
for(lj=CPT_ENV;lj>0;lj--){continue;};
//Ne fonctionne pas en fast IO
//il faut ajouter un DELAY_CYCLES(1)
//pour faire un NOP entre les deux instructions
//ici en fixed IO
output_bit(B_DATA,b);
output_high(B_CLOCK);
for(lj=CPT_ENV;lj>0;lj--){continue;};
}
//affiche un int de 8 sur l'afficheur
void affiche_int8(int8 valeur)
{
int8 octet1;
int8 octet2;
octet2 = valeur &0xF;
//octet2 = octet2>>4;
octet1 = (valeur>>4)&0xF; //bits de poids forts dans les LSB
envoicar(convertir_char(octet1));
envoicar(convertir_char(octet2));
}
//affiche un int de 16 sur l'afficheur
void affiche_int32(int32 valeur)
{
int8 i=0;
int8 octet1=0;
int8 octet2=0;
int8 octet3=0;
int8 octet4=0;
octet4=(valeur>>24)&0xFF;
octet3=(valeur>>16)&0xFF;
octet2=(valeur>>8)&0xFF;
octet1=(valeur)&0xFF;
/*
for (i=0;i<32;i++)
{
if(bit_test(valeur,i))
bit_set(octet1,i);
if(bit_test(valeur,i+8))
bit_set(octet2,i);
if(bit_test(valeur,i+16))
bit_set(octet3,i);
if(bit_test(valeur,i+24))
bit_set(octet4,i);
};
*/
affiche_int8(octet4);
affiche_int8(octet3);
envoicar(CAR_PAUSE);
affiche_int8(octet2);
affiche_int8(octet1);
envoicar(CAR_PAUSE);
}
//convertit les 4 premiers bits d'un int de 8 en valeur ascii
int8 convertir_char(int8 octet_char)
{
int8 c=0;
//valeur ascii de caract鑢es
switch (octet_char)
{
case C_0 :
c=0x30;
break;
case C_1 :
c=0x31;
break;
case C_2 :
c=0x32;
break;
case C_3 :
c=0x33;
break;
case C_4 :
c=0x34;
break;
case C_5 :
c=0x35;
break;
case C_6 :
c=0x36;
break;
case C_7 :
c=0x37;
break;
case C_8 :
c=0x38;
break;
case C_9 :
c=0x39;
break;
case C_A :
c=0x41;
break;
case C_B :
c=0x42;
break;
case C_C :
c=0x43;
break;
case C_D :
c=0x44;
break;
case C_E :
c=0x45;
break;
case C_F :
c=0x46;
break;
default :
c=0x58;
break;
}
return c;
}
//Ajoute une valeur 'trace' dans l'eeprom
void ajouter_trace(int8 donnee)
{
if (pos_eeprom_Trace < 0x0FF)
{
write_eeprom(pos_eeprom_Trace,donnee);
pos_eeprom_Trace = pos_eeprom_Trace + 1;
}
}
//Ajoute toutes les valeurs 'trace' stock閑s dans l'eeprom, et affichecelles ci en les num閞otant
void lire_trace()
{
int8 i;
envoiCar("EEPR");
envoiCar("P:");
affiche_int8(read_eeprom(EEPROM_PROP));
envoiCar(CAR_PAUSE);
envoiCar("I:");
affiche_int8(read_eeprom(EEPROM_INT));
envoiCar(CAR_PAUSE);
envoiCar("D:");
affiche_int8(read_eeprom(EEPROM_DER));
envoiCar(CAR_PAUSE);
envoiCar("IL");
affiche_int8(read_eeprom(EEPROM_INTLIMIT));
envoiCar(CAR_PAUSE);
envoiCar("A:");
affiche_int8(read_eeprom(EEPROM_MEM_ACC));
envoiCar(CAR_PAUSE);
envoiCar("V:");
affiche_int8(read_eeprom(EEPROM_MEM_VIT));
envoiCar(CAR_PAUSE);
envoiCar(CAR_PAUSE);
if (pos_eeprom_Trace> EEPROM_DEB_TRACE)
{
for (i=EEPROM_DEB_TRACE;i<pos_eeprom_Trace;i++)
{
affiche_int8(i-EEPROM_DEB_TRACE+1);
affiche_int8(read_eeprom(i));
envoiCar(CAR_PAUSE);
}
envoiCar("FEPR");
}
}
//remet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -