Gestion des Interruptions externes et du TIMER matériel
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 00002 //---------------------- 08_TP4_Ex1_1 ---------------------------- 00003 // Affichage d'un chiffre hexadécimal (de 0 à F) toutes les secondes 00004 //--------------------------------------------------------------------- 00005 #include "mbed.h" 00006 BusOut Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8); 00007 BusOut D(PB_12,PB_13,PB_14,PB_15); 00008 int Caract_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 00009 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 }; 00010 char Compteur; 00011 int main() { 00012 D=1; // 1er Aff ->D=1, 2eme Aff ->D=2, 3eme Aff->D=4, 4eme Aff->D=8 00013 while(1) { 00014 Aff_7Seg = Caract_7Seg[(Compteur++)%16 ]; 00015 wait(1); 00016 } 00017 } 00018 00019 /* 00020 00021 //----------------------- 08_TP4_Ex1_2 ------------------------------ 00022 // Affichage d'un chiffre hexadécimal (de 0 à F) toutes les secondes avec 00023 // interruption du timer matériel (Ticker) 00024 //------------------------------------------------------------------------- 00025 #include "mbed.h" 00026 BusOut Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8); 00027 BusOut D(PB_12,PB_13,PB_14,PB_15); 00028 int Caract_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 00029 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 }; 00030 Ticker Tempo; 00031 char Compteur ; 00032 void SPI_Tempo(){ 00033 Aff_7Seg=Caract_7Seg[(Compteur++)%16]; 00034 } 00035 int main() { 00036 Tempo.attach(..................................................); 00037 D=1; // 1er Aff ->D=1, 2eme Aff ->D=2, 3eme Aff->D=4, 4eme Aff->D=8 00038 while(1) { 00039 } 00040 } 00041 //---------------------- 08_TP4_Ex2_1 --------------------------------- 00042 // Affichage de la valeur de la tension appliquée à l’entrée PA_1 en mV sans 00043 // interruption du timer matériel (Ticker) 00044 //-------------------------------------------------------------------------- 00045 #include "mbed.h" 00046 BusOut Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8); 00047 BusOut D(PB_12,PB_13,PB_14,PB_15); 00048 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 00049 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 }; 00050 AnalogIn RV(PA_1); 00051 char Compteur; 00052 float tension_f; 00053 int16_t tension,i; 00054 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5, 00055 int main() { 00056 while(1) { 00057 tension = RV.read_u16()*3300/65536; //tension en mV 00058 tab[0]=tension/1000; 00059 tension=tension%1000; 00060 tab[1]=tension/100; 00061 tension=tension%100; 00062 tab[2]=tension/10; 00063 tab[3]=......................................................... 00064 for(i=0; i<25; i++) { 00065 D=0; 00066 Aff_7Seg = Chiff_7Seg[tab[0]]; 00067 D=8; 00068 wait_ms(5); 00069 00070 D=0; 00071 Aff_7Seg = Chiff_7Seg[tab[1]]; 00072 D=4; 00073 wait_ms(5); 00074 00075 D=0; 00076 Aff_7Seg = Chiff_7Seg[.....................]; 00077 D=............................... 00078 wait_ms(5); 00079 00080 D=0; 00081 Aff_7Seg = Chiff_7Seg[.................]; 00082 D=............................ 00083 wait_ms(5); 00084 } 00085 } 00086 } 00087 //------------------------ 08_TP4_Ex2_2 ------------------------------- 00088 // Affichage de la valeur de la tension appliquée à l’entrée PA_1 en mV avec 00089 // interruption du timer matériel (Ticker) 00090 //-------------------------------------------------------------------------- 00091 #include "mbed.h" 00092 BusOut Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8); 00093 BusOut D(PB_12,PB_13,PB_14,PB_15); 00094 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 00095 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 }; 00096 Ticker Tempo_Multiplex; 00097 Ticker Tempo_Acquis; 00098 AnalogIn RV(PA_1); 00099 char Compteur=0; 00100 int16_t tension; 00101 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5, 00102 void SPI_Tempo_Multiplex(){ 00103 Compteur +=1; 00104 if(Compteur == 4) Compteur=0; 00105 switch(.......................................) { 00106 case 0 : D=0; 00107 Aff_7Seg = Chiff_7Seg[tab[0]]; 00108 D=8; 00109 break; 00110 case 1 : D=0; 00111 Aff_7Seg = Chiff_7Seg[tab[1]]; 00112 D=4; 00113 break; 00114 case 2 : D=0; 00115 Aff_7Seg = Chiff_7Seg[tab[2]]; 00116 D=2; 00117 break; 00118 case 3 : D=0; 00119 Aff_7Seg = Chiff_7Seg[tab[3]]; 00120 D=1; 00121 break; 00122 } 00123 } 00124 void SPI_Tempo_Acquis(){ 00125 tension = RV.read_u16()*3300/65536; //tension en mV 00126 tab[0]=tension/1000; 00127 tension=tension%1000; 00128 tab[1]=tension/100; 00129 tension=tension%100; 00130 tab[2]=tension/10; 00131 tab[3]=tension%10; 00132 } 00133 int main() { 00134 Tempo_Multiplex.attach_us(...................................,5000); 00135 Tempo_Acquis.attach(&SPI_Tempo_Acquis,1); 00136 while(1) { 00137 } 00138 } 00139 //------------------------- 08_TP4_Ex2_3 ------------------------------------- 00140 //L’appuie sur le bouton poussoir BP1 permet d’éteindre les 4 afficheurs 7 segments 00141 // et l’appuie sur le bouton poussoir BP2 permet d’afficher la tension en mV sur les 00142 // 4 afficheurs. Programme précédent sans interruptions externes des broches 00143 // PB_10 et PB_11 00144 //--------------------------------------------------------------------------------- 00145 #include "mbed.h" 00146 BusOut Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8); 00147 BusOut D(PB_12,PB_13,PB_14,PB_15); 00148 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 00149 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 }; 00150 DigitalIn BP1(PB_10,PullUp); 00151 DigitalIn BP2(PB_11,PullUp); 00152 Ticker Tempo_Multiplex; 00153 Ticker Tempo_Acquis; 00154 AnalogIn RV(PA_1); 00155 char Compteur=0; 00156 int16_t tension; 00157 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5, 00158 void SPI_Tempo_Multiplex(){ 00159 Compteur +=1; 00160 if(Compteur == 4) Compteur=0; 00161 switch(Compteur) { 00162 case 0 : D=0; 00163 Aff_7Seg = Chiff_7Seg[tab[0]]; 00164 D=8; 00165 break; 00166 case 1 : D=0; 00167 Aff_7Seg = Chiff_7Seg[tab[1]]; 00168 D=4; 00169 break; 00170 case 2 : D=0; 00171 Aff_7Seg = Chiff_7Seg[tab[2]]; 00172 D=2; 00173 break; 00174 case 3 : D=0; 00175 Aff_7Seg = Chiff_7Seg[tab[3]]; 00176 D=1; 00177 break; 00178 } 00179 } 00180 void SPI_Tempo_Acquis(){ 00181 tension = RV.read_u16()*3300/65536; //tension en mV 00182 tab[0]=tension/1000; 00183 tension=tension%1000; 00184 tab[1]=tension/100; 00185 tension=tension%100; 00186 tab[2]=tension/10; 00187 tab[3]=tension%10; 00188 } 00189 int main() { 00190 Tempo_Multiplex.attach_us(&SPI_Tempo_Multiplex,5000); 00191 Tempo_Acquis.attach(&SPI_Tempo_Acquis,1); 00192 while(1) { 00193 if(..................) { 00194 Tempo_Multiplex.detach(); 00195 .......................... .detach(); 00196 D=0; 00197 } 00198 if(...................) { 00199 .......................... .attach_us(&SPI_Tempo_Multiplex,5000); 00200 Tempo_Acquis.attach(&SPI_Tempo_Acquis,1); 00201 } 00202 } 00203 } 00204 //------------------------------ 08_TP4_Ex2_4 -------------------------------- 00205 //L’appuie sur le bouton poussoir BP1 permet d’éteindre les 4 afficheurs 7 segments 00206 // et l’appuie sur le bouton poussoir BP2 permet d’afficher la tension en mV sur les 00207 // 4 afficheurs. Programme précédent avec interruptions externes des broches 00208 // PB_10 et PB_11 00209 //--------------------------------------------------------------------------------- 00210 #include "mbed.h" 00211 BusOut Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8); 00212 BusOut D(PB_12,PB_13,PB_14,PB_15); 00213 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 00214 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 }; 00215 InterruptIn BP1(PB_10,PullUp); 00216 ....................... BP2(........................); 00217 Ticker Tempo_Multiplex; 00218 Ticker Tempo_Acquis; 00219 AnalogIn RV(PA_1); 00220 char Compteur=0; 00221 int16_t tension; 00222 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5 00223 void SPI_Tempo_Multiplex(){ 00224 Compteur +=1; 00225 if(Compteur == 4) Compteur=0; 00226 switch(Compteur) { 00227 case 0 : D=0; 00228 Aff_7Seg = Chiff_7Seg[tab[0]]; 00229 D=8; 00230 break; 00231 case 1 : D=0; 00232 Aff_7Seg = Chiff_7Seg[tab[1]]; 00233 D=4; 00234 break; 00235 case 2 : D=0; 00236 Aff_7Seg = Chiff_7Seg[tab[2]]; 00237 D=2; 00238 break; 00239 case 3 : D=0; 00240 Aff_7Seg = Chiff_7Seg[tab[3]]; 00241 D=1; 00242 break; 00243 } 00244 } 00245 void SPI_Tempo_Acquis(){ 00246 tension = RV.read_u16()*3300/65536; //tension en mV 00247 tab[0]=tension/1000; 00248 tension=tension%1000; 00249 tab[1]=tension/100; 00250 tension=tension%100; 00251 tab[2]=tension/10; 00252 tab[3]=tension%10; 00253 } 00254 void SPI_BP1() { 00255 Tempo_Multiplex.detach(); 00256 ....................... .detach(); 00257 D=...................... 00258 } 00259 void SPI_BP2() { 00260 Tempo_Multiplex.attach_us(&SPI_Tempo_Multiplex,5000); 00261 Tempo_Acquis.attach(&SPI_Tempo_Acquis,1); 00262 } 00263 int main() { 00264 Tempo_Multiplex.attach_us(&SPI_Tempo_Multiplex,5000); 00265 Tempo_Acquis.attach(&SPI_Tempo_Acquis,1); 00266 BP1.fall(&SPI_BP1); 00267 BP2.fall(...........................); 00268 while(1) { 00269 } 00270 } 00271 */
Generated on Thu Aug 18 2022 19:59:58 by
1.7.2