#include // STM32F10x Library Definitions #include "STM32_Init.h" // STM32 Initialization int temp; int s; //schwarz int sz; //schwarz zucker int w; //weiß int wz; //weiß zucker int kg; //kaffee gering int zg; //zucker gering int mg; //milch gering void delayLoop(){ volatile int delayCount = 80000000; // volatile, um "Wegoptimieren" zu vermeinden //(http://en.wikipedia.org/wiki/Volatile_variable) while (delayCount > 0) { delayCount--; } }; int main (void) { //start main stm32_Init (); // STM32 setup while (1) { //endless loop if(((GPIOC->IDR & 0x0002) == 0) & (kg == 0) & (zg == 0) & (mg == 0)){ //ON/OFF Schalter liegt auf GND temp = 1; //Temporäre Speicherung des Betriebsbereitschaft } else { temp = 0; //Keine betriebsbereitschaft bei on/off nicht auf GND }; if(temp == 1){ delayLoop(); //10sek warten GPIOB->ODR |= 0x0100; //Zuweisung auf Betriebsbereitsschafts led; = 1 }; if(temp == 0){ //Zuweisung auf Betriebsbereitsschafts led; = 0 GPIOB->ODR &= 0xe000; }; //Betriebsart schwarzer Kaffee if(((GPIOC->IDR & 0x0008) == 0) & (temp == 1) & (kg == 0) & (zg == 0) & (mg == 0)){ //Taster schwarz + start gedrückt und betriebsbereitschaft gegeben s = 1; //schwarz temporär gesichert } else { s = 0; }; if((s == 1) & (wz == 0) & (w == 0) & (sz == 0)) { GPIOB->ODR |= 0x0200; //LED schwarz PB9 für schwarz setzen wenn s=1 GPIOB->ODR &= 0xe300; //Rücksetzen aller anderen LEDs }; //Betriebsart schwarzer Kaffee mit Zucker if(((GPIOC->IDR & 0x0020) == 0) & (temp == 1) & (kg == 0) & (zg == 0) & (mg == 0)){ //sz und betriebsbereitschaft gegeben sz = 1; } else{ sz = 0; }; //schwarz und zucker temp gesichert if((sz == 1) & (wz == 0) & (w == 0) & (s == 0)){ GPIOB->ODR |= 0x0400; //LED schwarz+zucker PB10 setzen wenn sz = 1 GPIOB->ODR &= 0xe500; //Rücksetzen aller anderen LEDs }; //Betriebsart weißer Kaffee if(((GPIOC->IDR & 0x0080) == 0) & (temp == 1) & (kg == 0) & (zg == 0) & (mg == 0)){ //w und betriebsbereitschaft gegeben w = 1; //weiß temp gesichert } else { w = 0; }; if((w == 1) & (wz == 0) & (s == 0) & (sz == 0)){ GPIOB->ODR |= 0x0800; //LED weiß PB11 setzen wenn w=1 und die anderen 0 GPIOB->ODR &= 0xe900; //Rücksetzen aller anderen LEDs }; //Betriebsart weißer Kaffee mit Zucker if(((GPIOC->IDR & 0x0200) == 0) & (temp == 1) & (kg == 0) & (zg == 0) & (mg == 0)){ //wz und betriebsbereitschaft gegeben wz = 1; //weiß temp gesichert } else{ wz = 0; }; if((wz == 1) & (w == 0) & (sz == 0) & (s == 0)){ GPIOB->ODR |= 0x1000; //LED weiß und Zucker PB12 setzen wenn wz = 1, w=0,sz=0 und s=o GPIOB->ODR &= 0xf100; //Rücksetzen aller anderen LEDs }; //Kaffee gering if(((GPIOC->IDR & 0x0001) == 0) & ((GPIOC->IDR & 0x0002) == 0)){ //Kaffee ist leer kg = 1; //temp gesichert } else{ kg = 0; }; if(kg == 1){ GPIOB->ODR |= 0x2000; //PB13 setzen wenn PINC0=0 GPIOB->ODR &= 0xe000; //Rücksetzen aller anderen LEDs }; if(kg == 0){ GPIOB->ODR &= 0xdf00; //Rücksetzten der PB13 }; //Zucker gering if(((GPIOC->IDR & 0x0004) == 0) & ((GPIOC->IDR & 0x0002) == 0)){ //Zucker ist leer zg = 1; //temp gesichert } else{ zg = 0; }; if(zg == 1){ GPIOB->ODR |= 0x4000; //B14 setzen wenn setzen wenn PINC2=0 GPIOB->ODR &= 0xe000; //Rücksetzen aller anderen LEDs }; if(zg == 0){ GPIOB->ODR &= 0xbf00; //Rücksetzten der PB14 }; //Milch gering if(((GPIOC->IDR & 0x0010) == 0) & ((GPIOC->IDR & 0x0002) == 0)){ //Milch ist leer mg = 1; //temp gesichert } else{ mg = 0; }; if(mg == 1){ GPIOB->ODR |= 0x8000; //PB15 setzen wenn PINC4=0 GPIOB->ODR &= 0xe000; //Rücksetzen aller anderen LEDs }; if(mg == 0){ GPIOB->ODR &= 0x7f00; //Rücksetzten der PB15 }; };//end while };//end main //usable Pins are PC13..12; PC9..0 -> 13 Pins in PC usable //don´t use PC15..14; PC10