youse2013
Newbie level 2
- Joined
- Apr 23, 2013
- Messages
- 2
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,281
- Activity points
- 1,380
This montage works on the program isis
But in real there is a problem see photo
File. Rar
Where (isis-hex-c)
View attachment anemo_v1.zip
But in real there is a problem see photo
File. Rar
Where (isis-hex-c)
View attachment anemo_v1.zip
PHP:
#include "header_anemo.h"
unsigned long temps,v,vmax,tampon,tampon2,nb_timer,var_temps;
unsigned long var_2s,moyenne_1,tab_10[10],moyenne10,moyenne_av1,moyenne_av2,moyenne_av3;
char v0,v1,v2,v3,v4,i,a,tmr,valid_it,var_tampon,h,bit_h_lect,bit_l_lect;
char i_1Min,i_tab,tampon_s;
float temps_ms,fl_temp;
//******************************************************************
//Programme d'interruption
#pragma origin 4
interrupt ils(void){
int_save_registers
tmr=TMR0;
TMR0=3;
if(TMR0IF){
TMR0IF=0;
nb_timer++;
var_2s++;
if(nb_timer>TEMPS_MAX){
var_temps=TEMPS_MAX;
nb_timer=TEMPS_MAX;
if(valid_it==0){
valid_it=1;
}
}
}
if(INT0IF){
INT0IF=0;
var_temps=nb_timer;
var_tampon=tmr-2;
nb_timer=0;
valid_it=1;
PORT_DEL=!PORT_DEL;
}
int_restore_registers
}
#pragma sharedAllocation
//******************************************************************
//******************************************************************
//Programme principal
void main(void){
TRISA=0b00110000;
ANSEL=0;
PORT_DATA=0;
TRISB=0b00000001;
PORTB=0;
OPTION_REG=0b11000001; //front montant sur RB0 et TMR0=TCycle*4
init_lcd(); //Initialisation du LCD
genere_car(); //Genere les caractères
clear();
tempo_l();
ecrire_donnee_horloge(105,0x90); //Instruction de charge de la capa de sauvegarde
if(BP_Horloge){ //Activation de la fonction écriture de l'horloge si demandé
ecrire_heure();
clear();
tempo_l();
}
// Lecture et affichage de l'heure
affichage_heure(0x8F);
//Affichage des caractère nécessaire
curseur(0x80);
affich_chaine("V=---.-Km/h",11);//"---.-Km/h"
curseur(0xC0);
affich_chiffre(210);
for(h=0;h<10;h++){
affich_chiffre(211); //Barre des Bfts
}
affich_chiffre(212);
affich_chaine(" 0 Bft",7);
curseur(0x94);
affich_chaine("Moy=---.-Km/h",13);
curseur(0xD4);
affich_chaine("Max=---.-Km/h",13);
for (a=0;a<255;a++){
tempo_l();
}
for (a=0;a<255;a++){
tempo_l();
}
//Initialisation des variables
TMR0=0;
var_2s=0;
vmax=0;
valid_it=1;
nb_timer=TEMPS_MAX;
var_temps=TEMPS_MAX;
i_1Min=0;
i_tab=0;
moyenne_1=0;
moyenne_av3=0;
moyenne_av2=0;
moyenne_av1=0;
moyenne10=0;
for(i=0;i<10;i++){
tab_10[i]=0;
}
INTCON=0b10110000;// Validation des interruption, sur RB0 et TMR0
for(;;){
if(valid_it==1){
//Calcul de la vitesse
temps_ms=(float)var_temps*0.2048; //Temps en ms
tampon_s=var_tampon-3;
fl_temp=tampon_s*0.00080314;// calcul des dixièmes de milliseconde
fl_temp+=temps_ms;
fl_temp=11309.8/fl_temp;
v=fl_temp;
affichage_vitesse(0x82,v);
if(v>=vmax){
vmax=v;
affichage_vitesse(0xD8,vmax);
affichage_heure(0xE3);
}
if(var_temps>=TEMPS_MAX) { //Empeche le retour dans la boucle si V=0
valid_it=3;
}
else{ //Empeche le retour dans la boucle
valid_it=0;
}
echelle_bft(v);
}// Fin du traitement d'interruption sur la vitesse.
if(var_2s>9730){
PORT_2S=!PORT_2S;
var_2s=0;
moyenne_1+=v;
i_1Min++;
if(i_1Min==30){
i_1Min=0;
moyenne_1/=30;
tab_10[i_tab]=moyenne_1;
moyenne_1=0;
if(i_tab==9){i_tab=0;}
else{i_tab++;}
tampon=0;
for(i=0;i<10;i++){
tampon2=tab_10[i];
tampon+=tampon2;
}
moyenne_av3=moyenne_av2;
moyenne_av2=moyenne_av1;
moyenne_av1=moyenne10;
moyenne10=tampon/10;
tampon_s=3;
if(moyenne_av2>moyenne_av3){
tampon_s++;
}
else if(moyenne_av2<moyenne_av3){
tampon_s--;
}
if(moyenne_av1>moyenne_av2){
tampon_s++;
}
else if(moyenne_av1<moyenne_av2){
tampon_s--;
}
if(moyenne10>moyenne_av1){
tampon_s++;
}
else if(moyenne10<moyenne_av1){
tampon_s--;
}
curseur(0xA3);
if(tampon_s>4){
affich_chiffre(208);
}
else if(tampon_s<2){
affich_chiffre(209);
}
else{
affich_chiffre(0x7E-48);
}
affichage_vitesse(0x98,moyenne10);
//Lecture de l'heure
affichage_heure(0x8F);
}//Moyenne sur 1min
}//Fin moyenne
if(BP_Gene){
vmax=0;
affichage_vitesse(0xD8,vmax);
curseur(0xE3);
affich_chaine(" ",5);
}
}// Fin for
}// Fin Main
// Temporisation courte 40µs
void tempo_c(void){
for(i=0;i<20;i++);
}
//Tempo pour clignotement des heures et autres...
void tempo_longue(void){
for(h=0;h<200;h++){
tempo_l();
tempo_l();
}
}
// Temporisation longue 1.64 ms
void tempo_l(void){
for(i=0;i<255;i++);
for(i=0;i<255;i++);
for(i=0;i<255;i++);
for(i=0;i<255;i++);
}
// Impulsion E pour l'envoie de données
void impuls(void){
PORT_E=1;
nop();
nop();
nop();
PORT_E=0;
tempo_c();
}
//Affiche une caîne de caractère
void affich_chaine(const char * chaine,char nb){
char count;
for(count=0;count<nb;count++)
{
char tempon;
tempon=chaine[count];
PORT_DATA=tempon>>4;
impuls();
PORT_DATA=chaine[count];
impuls();
}
}
//Affiche un chiffre
void affich_chiffre(char chiff){
chiff=chiff+48;
PORT_DATA=chiff>>4;
impuls();
PORT_DATA=chiff;
impuls();
}
//Efface l'écran
void clear(void){
PORT_RS=0;
PORT_DATA=0;
impuls();
PORT_DATA=1;
impuls();
tempo_l();
PORT_RS=1;
curseur(0x80);
}
//Position le curseur dans la RAM/CG-RAM
void curseur(char place){
char temp;
temp=place;
PORT_RS=0;
PORT_DATA=place>>4;
impuls();
PORT_DATA=temp;
impuls();
PORT_RS=1;
}
//Initialisation du LCD
void init_lcd(void){
for(a=0;a<255;a++){//On attend que le LCD s'allume
tempo_l();
}
PORT_DATA=3;//mode 8 bits
impuls();
PORT_DATA=3;//mode 8 bits
impuls();
PORT_DATA=3;//mode 8 bits
impuls();
PORT_DATA=2;//mode 4 bits
impuls();
PORT_DATA=2;//mode 4 bits + 1 ligne + caractère 5*7
impuls();
PORT_DATA=8;
impuls();
PORT_DATA=0;//allumage affichage + cache curseur
impuls();
PORT_DATA=12;
impuls();
PORT_DATA=0;//le curseur bouge vers la droite
impuls();
PORT_DATA=4;
impuls();
PORT_DATA=0;//Incrémentation du curseur a chaque nouvelle donnée
impuls();
PORT_DATA=6;
impuls();
PORT_RS=1;//On passe en mode "données"
clear();
tempo_l();
}
//Affichage d'une vitesse "v_affiché"
void affichage_vitesse(unsigned position,unsigned long v_affich){
curseur(position);
v1=v_affich/1000;
tampon=v_affich%1000;
v2=tampon/100;
tampon=v_affich%100;
v3=tampon/10;
v4=v_affich%10;
if(v1==0){
v1=112;
}
if(v2==0){
v2=112;
}
affich_chiffre(v1);
affich_chiffre(v2);
affich_chiffre(v3);
curseur(position+4);
affich_chiffre(v4);
}
void ecrire_heure(void){
unsigned heure_h,minute_h;
unsigned adresse;
curseur(0x80);
affich_chaine("REGLAGE HORLOGE...",18);
curseur(0xC0);
affich_chaine("APPUYEZ POUR CHANGER",20);
curseur(0x94);
affich_chaine("LES MINUTES",11);
curseur(0xD4);
affich_chaine("00:00",5);
while(!PORTA.5){
curseur(0xD7);
affich_chaine(" ",2);
tempo_longue();
curseur(0xD7);
affich_chaine("00",2);
tempo_longue();
}
minute_h=255;
heure_h=255;
while(PORTA.5){
minute_h++;
curseur(0xD7);
affich_chiffre(minute_h/10);
affich_chiffre(minute_h%10);
if(minute_h==59){minute_h=0;}
tempo_longue();
}
curseur(0x94);
affich_chaine("LES HEURES ",11);
while(!PORTA.5){
curseur(0xD4);
affich_chaine(" ",2);
tempo_longue();
curseur(0xD4);
affich_chaine("00",2);
tempo_longue();
}
while(PORTA.5){
heure_h++;
curseur(0xD4);
affich_chiffre(heure_h/10);
affich_chiffre(heure_h%10);
if(heure_h==24){heure_h=0;}
tempo_longue();
}
ecrire_donnee_horloge(0,0x80); //ecriture des secondes
ecrire_donnee_horloge(minute_h,0x82); //ecriture des minutes
ecrire_donnee_horloge(heure_h,0x84); //ecriture des heures
}//fin reglage_heure
void ecrire_donnee_horloge(unsigned data_h,unsigned adresse_ecriture)
{
unsigned bit_h_ecr;
unsigned bit_l_ecr;
bit_h_ecr=data_h/10;
bit_l_ecr=data_h%10;
data_h=bit_h_ecr;
data_h<<=4;
data_h=bit_l_ecr+data_h;
TRISB.7=0;
nop();
PORTB.7=0;
nop();
PORTB.6=0;
nop();
PORTB.5=0;
nop();
nop();
PORTB.5=1;
for(i=0;i<8;i++){
PORTB.6=0;
PORTB.7=adresse_ecriture.0;
nop();
PORTB.6=1;
adresse_ecriture=adresse_ecriture>>1;
}
for(i=0;i<8;i++){
PORTB.6=0;
PORTB.7=data_h.0;
nop();
PORTB.6=1;
data_h=data_h>>1;
}
PORTB&=0b00011111; //Mise à zéro de Rb7 Rb6 Rb5
}
void lecture_donnee_horloge(char adresse_lecture)
{
TRISB.7=0;
PORTB.7=0;
PORTB.6=0;
PORTB.5=0;
PORTB.5=1;
for(i=0;i<8;i++){
PORTB.6=0;
PORTB.7=adresse_lecture.0;
PORTB.6=1;
adresse_lecture=adresse_lecture>>1;
}
TRISB.7=1;
PORTB.6=0;
tampon_s.7=PORTB.7;
for(i=0;i<7;i++){
PORTB.6=1;
tampon_s>>=1;
PORTB.6=0;
tampon_s.7=PORTB.7;
}
bit_l_lect=0b00001111&tampon_s;
bit_h_lect=0b01110000&tampon_s;
bit_h_lect>>=4;
bit_h_lect=bit_h_lect*10;
tampon_s=bit_h_lect+bit_l_lect;
TRISB.7=0;
PORTB.7=0;
PORTB.6=0;
PORTB.5=0;
}
void affichage_heure(unsigned adresse){
tampon_s=0;
lecture_donnee_horloge(0x85);
curseur(adresse);
affich_chiffre(tampon_s/10);
affich_chiffre(tampon_s%10);
affich_chaine(":",1);
lecture_donnee_horloge(0x83);
affich_chiffre(tampon_s/10);
affich_chiffre(tampon_s%10);
}
void genere_car(void)
{
static const char car_1[] = {0x0,0xf,0x3,0x5,0x9,0x10,0x0,0x0}; //fleche haut
static const char car_2[] = {0x0,0x10,0x9,0x5,0x3,0xf,0x0,0x0}; //fleche bas
static const char car_3[] = {0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x0}; //debut barre
static const char car_4[] = {0x1f,0x0,0x0,0x0,0x0,0x0,0x1f,0x0}; //milleu barre
static const char car_5[] = {0x1f,0x1,0x1,0x1,0x1,0x1,0x1f,0x0}; //fin barre
static const char car_6[] = {0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x0}; //barre pleine
unsigned i_car_a;
PORT_RS=1;
curseur(0x40);
tempo_c();
for (i_car_a=0;i_car_a<8;i_car_a++){
affich_chiffre(car_1[i_car_a]-48);
}
for (i_car_a=0;i_car_a<8;i_car_a++){
affich_chiffre(car_2[i_car_a]-48);
}
for (i_car_a=0;i_car_a<8;i_car_a++){
affich_chiffre(car_3[i_car_a]-48);
}
for (i_car_a=0;i_car_a<8;i_car_a++){
affich_chiffre(car_4[i_car_a]-48);
}
for (i_car_a=0;i_car_a<8;i_car_a++){
affich_chiffre(car_5[i_car_a]-48);
}
for (i_car_a=0;i_car_a<8;i_car_a++){
affich_chiffre(car_6[i_car_a]-48);
}
}
#pragma codepage 1
void echelle_bft(unsigned long v_comp){
unsigned bft;
bft=0;
curseur(0xC0);
if(v_comp>10){
affich_chiffre(213);
bft=1;
}
else{
affich_chiffre(210);
bft+=0;
}
if(v_comp>60){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>120){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>200){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>290){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>390){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>500){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>620){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>750){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>890){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>1030){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(211);
}
if(v_comp>1180){
affich_chiffre(213);
bft++;
}
else{
affich_chiffre(212);
}
curseur(0xCD);
if(bft<10){
affich_chiffre(112);
}
else{
affich_chiffre(bft/10);
}
affich_chiffre(bft%10);
}
Last edited: