1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
| /*********************************************
Projet : Détécteur de sur-vitesse
Version :
Date : 01/03/09
Auteur : Roy Alexandre
etablissement : LYCEE Paul GUERIN NIORT
Commentaires: Recuperation de la vitesse Seuil
Chip type : AT90S8535
Clock frequency : 8,000000 MHz
Memory model : Small
Internal SRAM size : 512
External SRAM size : 0
Data Stack size : 128
PORTB X X X X posech posinit moteur_on cdeoptos
PORTC--> afficheur
PORTD X X pb5 pb4 pb3 pb2 pb1 dcy
|_________________________________|
Seuil Choisi
*********************************************/
#include <90s8535.h>
#include <delay.h>
#include <lcd_V3.h>
#include <string.h>
#include <stdlib.h>
#include <cnv2003.h>
/********programme récupérer choix utilisateur*******/
void affiche()
{
lcd_gotoxy(0,0);
lcd_putsf("limitation :");
lcd_gotoxy(5,1);
}
int choix()
{
int seuil=0;
while(PINA==0)
{
lcd_gotoxy(0,0);
lcd_putsf("Limitation ?");
lcd_gotoxy(4,1);
lcd_putsf(" ");
}
switch (PINA)
{
case 1:
affiche();
lcd_putsf("30km/h");
seuil=80;
break;
case 2:
affiche();
lcd_putsf("50km/h");
seuil=121;
break;
case 4:
affiche();
lcd_putsf("70km/h");
seuil=170;
break;
case 8:
affiche();
lcd_putsf("90km/h");
seuil=218;
break;
case 16:
affiche();
lcd_putsf("110km/h");
seuil=257;
break;
case 32:
affiche();
lcd_putsf("130km/h");
seuil=310;
break;
default:
lcd_gotoxy(1,0);
lcd_putsf("Erreur");
break;
}
return seuil;
}
/********programme récuperer vitesse de la voiture*******/
float chrono; unsigned int i, tempo, tempomax=2;
void valide_interrupt_tim0()
{TIMSK=0x01;}
void init_timer0()
{TCCR0=0x05;
TCNT0=61;}
interrupt[TIM0_OVF]void_timer0_ovf()
{i = i+1;
chrono=i*0.025;
tempo=chrono;
TCNT0=61;}
void inhibe_interrupt_tim0()
{TIMSK=0x00;}
int MesureVitesse()
{
int seuil, vitesse;
PORTD=0;
seuil=0;i=0;tempo=0;
valide_interrupt_tim0();
init_timer0();
#asm("sei")
do
{
while(PIND.0==0);
while(PIND.0!=0);
seuil=seuil+1;
}
while(tempo<tempomax);
#asm("cli")
inhibe_interrupt_tim0();
vitesse = seuil;
return vitesse;
}
/********programme comparer vitesse au seuil*******/
void compa(int seuilcomp, int vitessecomp)
{
if(vitessecomp>seuilcomp)
{
lcd_clear();
lcd_putsf ("Ralentissez");
}
}
/********Fonction principale************/
main()
{
int seuilprin=0, vitesseprin =0;
DDRA=0x00;
PORTA=0x00;
DDRB=0xFF;
DDRD=0x00;
lcd_init();
while(1)
{
do
{
seuilprin=choix();
lcd_clear();
}
while(seuilprin=!80||121||170||218||257||310);
vitesseprin=MesureVitesse();
compa(seuilprin,vitesseprin);
}
} |
Partager