Programación en C de una ATM en un módulo GLCD con la placa de evaluación EasyLV18F


/ Published in: C
Save to your folder(s)

Código final de la asignatura Microprocesadores y Microcontroladores de Tecnun - Universidad de Navarra (España). Curso 2013-2014. 3º Ingeniería en Sistemas de Telecomunicación.


Copy this code and paste it in your HTML
  1. /*
  2. * Project name:
  3. ATM_OS
  4. * Test configuration:
  5. MCU: PIC18F45K20
  6. Dev.Board: EasyLV18F v6
  7. Oscillator: HS, 08.0000 MHz
  8. SW: mikroC PRO
  9. */
  10.  
  11. char keypadPort at PORTD;
  12. //glcd inicializacion
  13. char GLCD_DataPort at PORTD;
  14.  
  15. sbit GLCD_CS1 at RB0_bit;
  16. sbit GLCD_CS2 at RB1_bit;
  17. sbit GLCD_RS at RB2_bit;
  18. sbit GLCD_RW at RB3_bit;
  19. sbit GLCD_EN at RB4_bit;
  20. sbit GLCD_RST at RB5_bit;
  21.  
  22. sbit GLCD_CS1_Direction at TRISB0_bit;
  23. sbit GLCD_CS2_Direction at TRISB1_bit;
  24. sbit GLCD_RS_Direction at TRISB2_bit;
  25. sbit GLCD_RW_Direction at TRISB3_bit;
  26. sbit GLCD_EN_Direction at TRISB4_bit;
  27. sbit GLCD_RST_Direction at TRISB5_bit;
  28.  
  29. // LCD module connections
  30. sbit LCD_RS at RB4_bit;
  31. sbit LCD_EN at RB5_bit;
  32. sbit LCD_D4 at RB0_bit;
  33. sbit LCD_D5 at RB1_bit;
  34. sbit LCD_D6 at RB2_bit;
  35. sbit LCD_D7 at RB3_bit;
  36.  
  37. sbit LCD_RS_Direction at TRISB4_bit;
  38. sbit LCD_EN_Direction at TRISB5_bit;
  39. sbit LCD_D4_Direction at TRISB0_bit;
  40. sbit LCD_D5_Direction at TRISB1_bit;
  41. sbit LCD_D6_Direction at TRISB2_bit;
  42. sbit LCD_D7_Direction at TRISB3_bit;
  43. // End LCD module connections
  44.  
  45. const unsigned short TEMP_RESOLUTION = 9;
  46.  
  47. char *text = "00.0";
  48. unsigned temp;
  49.  
  50. void Display_Temperature(unsigned int temp2write) {
  51. const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
  52. char temp_whole;
  53. unsigned int temp_fraction;
  54.  
  55. // Check if temperature is negative
  56. if (temp2write & 0x8000) {
  57. text[0] = '-';
  58. temp2write = ~temp2write + 1;
  59. }
  60.  
  61. // Extract temp_whole
  62. temp_whole = temp2write >> RES_SHIFT ;
  63.  
  64. // Convert temp_whole to characters
  65. if (temp_whole/100)
  66. text[0] = temp_whole/100 + 48;
  67. else
  68.  
  69. text[0] = (temp_whole/10)%10 + 48; // Extract tens digit
  70. text[1] = temp_whole%10 + 48; // Extract ones digit
  71.  
  72. // Extract temp_fraction and convert it to unsigned int
  73. temp_fraction = temp2write << (4-RES_SHIFT);
  74. temp_fraction &= 0x000F;
  75. temp_fraction *= 625;
  76.  
  77. // Convert temp_fraction to characters
  78. text[3] = temp_fraction/1000 + 48; // Extract thousands digit
  79.  
  80. // Print temperature on LCD
  81. Lcd_Out(1, 7, text);
  82. }
  83. void Tone1(){
  84. Sound_Play(440, 75);
  85. Delay_ms(75);
  86. }
  87. void Tono1(){
  88. Sound_Play(440, 75);
  89. Delay_ms(75);
  90. }
  91. void Tono2(){
  92. Sound_Play(400, 75);
  93. Delay_ms(75);
  94. }
  95. void Tono3(){
  96. Sound_Play(340, 75);
  97. Delay_ms(75);
  98. }
  99. void Tono4(){
  100. Sound_Play(274, 75);
  101. Delay_ms(75);
  102. }
  103. void Tono5(){
  104. Sound_Play(458, 75);
  105. Delay_ms(75);
  106. }
  107. void Tone2(){
  108. Sound_Play(476, 75);
  109. Delay_ms(75);
  110. }
  111. void Tone3(){
  112. Sound_Play(548, 75);
  113. Delay_ms(75);
  114. }
  115. void Tone4(){
  116. Sound_Play(476, 500);
  117. }
  118. void Tone5(){
  119. Sound_Play(440, 500);
  120. }
  121. void Tone6(){
  122. Sound_Play(548, 500);
  123. }
  124. void Gasolina(){
  125. Sound_Init(&PORTC,2);
  126. Tone1(); Tone1(); Tone1(); Delay_ms(125);
  127. Tone1(); Delay_ms(125); Tone1(); Delay_ms(125); Tone4(); Tone5();
  128. Tone2(); Tone2(); Tone2(); Delay_ms(125);
  129. Tone2(); Delay_ms(125); Tone2(); Delay_ms(125); Tone6(); Tone4();
  130. Glcd_Init();
  131. }
  132. void Animals(){
  133. Tono1(); Tono1(); Tono1(); Tono1();Tono2();Tono2();delay_ms(75);Tono2();Tono3();delay_ms(75);Tono3();Tono4();delay_ms(150);Tono4();
  134. Tono1(); Tono1(); Tono1(); Tono1();Tono2();Tono2();delay_ms(75);Tono2();Tono5();delay_ms(75);Tono1();
  135. Glcd_Init();
  136. }
  137. void Glcd_LineaRAM(char* miLinea, int linea){
  138. Glcd_Write_Text(miLinea, 5, linea, 1);
  139. }
  140. void String_ROM2RAM(char *RAM, const char *ROM) {
  141. unsigned short i = 0;
  142. // Mientras haya datos en el string ROM
  143. while (ROM[i]) {
  144. // Copiar de ROM a RAM
  145. RAM[i] = ROM[i];
  146. // Aumentar el puntero del string
  147. i++;
  148. }
  149. // Meter caracter nulo / fin de string
  150. RAM[i]=0;
  151. }
  152. void Glcd_LineaROM(const char* StringROM, int linea){
  153. char StringRAM[40];
  154. String_ROM2RAM(StringRAM, StringROM);
  155. Glcd_Write_Text(StringRAM, 5, linea, 1);
  156. }
  157. int Num_Selec(void){
  158. int res;
  159. char kp;
  160. Sound_Init(&PORTC,2);
  161. Keypad_Init(); //Puerto D (KEYPAD 4X4) como entrada
  162. do
  163. kp = Keypad_Key_Click(); // Store key code in kp variable
  164. while (!kp);
  165. switch(kp){
  166. case 1: res=1; break; // 1 // Uncomment this block for keypad4x4
  167. case 2: res=2; break; // 2
  168. case 3: res=3; break; // 3
  169. case 4: res=10; break; // A
  170. case 5: res=4; break; // 4
  171. case 6: res=5; break; // 5
  172. case 7: res=6; break; // 6
  173. case 8: res=20; break; // B
  174. case 9: res=7; break; // 7
  175. case 10: res=8; break; // 8
  176. case 11: res=9; break; // 9
  177. case 12: res=20; break; // C
  178. case 13: res=20; break; // *
  179. case 14: res=0; break; // 0
  180. case 15: res=20; break; // #
  181. case 16: res=20; break; // D
  182. }
  183.  
  184. Sound_Play(880, 200);
  185. Glcd_Init(); //Puerto D (KEYPAD 4X4) como salida
  186. return res;
  187. }
  188. void PedirPin(int lang){
  189. int b = 3;
  190. int c;
  191. int pin = 0;
  192.  
  193. while(b!=0){
  194. int i;
  195. c=0;
  196. pin=0;
  197. Glcd_Fill(0);
  198. if (lang==1)Glcd_LineaROM("Insertar PIN: ",1);
  199. else Glcd_LineaROM("Insert PIN: ",1);
  200. for(i=0; i<4; i++){
  201. pin=Num_Selec();
  202. //Codigo para mostrar cuantos numeros se han escrito ya con circulillos
  203. if (i==0) Glcd_LineaROM("*",2);
  204. else if (i==1) Glcd_LineaROM("**",2);
  205. else if (i==2) Glcd_LineaROM("***",2);
  206. else if (i==3) Glcd_LineaROM("****",2);
  207. if(pin==EEPROM_Read(0x02+i)) c++;
  208. }
  209. if(c==4){
  210. Glcd_Fill(0);
  211. if (lang==1)Glcd_LineaROM(" Bienvenido.. ",3);
  212. else Glcd_LineaROM(" Welcome.. ",3);
  213. Gasolina();
  214. break;//sale del bucle
  215. }
  216. else{
  217. if(lang==1)Glcd_LineaROM("PIN incorrecto",3);
  218. else Glcd_LineaROM("Wrong PIN",3);
  219. b=b-1;
  220. if (b==2){
  221. if (lang==1)Glcd_LineaROM("2 restantes",4);
  222. else Glcd_LineaROM("2 left",4);
  223. }
  224. else if (b==1){
  225. if (lang==1)Glcd_LineaROM("1 restante",4);
  226. else Glcd_LineaROM("1 left",4);
  227. }
  228. Sound_Play(220, 1000);
  229. Delay_ms(1000);
  230. }
  231. }
  232. if(b==0){
  233. Glcd_Fill(0);
  234. if(lang==1) Glcd_LineaROM(" Acceso denegado",3);
  235. else Glcd_LineaROM(" Unauthorized access",3);
  236. Sound_Play(100, 3000);
  237. return; //Se acaba el programa
  238. return;
  239. }
  240. }
  241. const int PedirIdioma(void){
  242. int ok=1;
  243. int idioma;
  244. while(ok==1){
  245. Glcd_LineaROM("***IDIOMA/LANGUAGE***",2);
  246. Glcd_LineaROM("1. Espanol",3);
  247. Glcd_LineaROM("2. English",4);
  248.  
  249. idioma=Num_Selec();
  250. Glcd_Init();
  251. if(idioma==1 || idioma==2){
  252. ok=0;
  253. return idioma;
  254. }
  255. else{
  256. GLCD_LineaROM("Elija bien el idioma.",4);
  257. Delay_ms(1000);
  258. Glcd_Fill(0);
  259. }
  260. }
  261. }
  262. int Menu(int lang){
  263. int opc;
  264. Glcd_Fill(0);
  265. if(lang==1){
  266. Glcd_LineaROM(" ***MENU***",1);
  267. Glcd_LineaROM("1. Consultar saldo",2);
  268. Glcd_LineaROM("2. Sacar dinero",3);
  269. Glcd_LineaROM("3. Meter dinero",4);
  270. Glcd_LineaROM("4. Cambiar PIN",5);
  271. Glcd_LineaROM("5. Recargar movil",6);
  272. Glcd_LineaROM("6. Salir",7);
  273. opc=Num_Selec();
  274. return opc;
  275. }else{
  276. Glcd_LineaROM(" ***MENU***",1);
  277. Glcd_LineaROM("1. Check money",2);
  278. Glcd_LineaROM("2. Withdraw",3);
  279. Glcd_LineaROM("3. Deposit",4);
  280. Glcd_LineaROM("4. Change PIN",5);
  281. Glcd_LineaROM("5. Charge phone",6);
  282. Glcd_LineaROM("6. Exit",7);
  283. opc=Num_Selec();
  284. return opc;
  285. }
  286. }
  287. void main() {
  288. //------------------------------------------INICIALIZACIONES---------------------------------------------------
  289.  
  290. int pin=0, newpin=0, newpin2=0; //Variable que ir· almacenando el PIN introducido por el usuario
  291. //short saldo;
  292. char *aux="";
  293. int variable;
  294. int vector_variables[4];
  295. int j,h;
  296. //char *output2;
  297. long aux1;
  298. int b=3;
  299. int c;
  300. //int contador;
  301. char output[11] = {0};
  302. char dinero2[7];
  303. //char carac;
  304. unsigned long movil;
  305. char cad[4]={0};
  306. const code char logo_tecnun[1024] = { // GLCD Picture name: logo_tecnun.bmp
  307. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  308. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  309. 0, 0, 0, 0, 0, 0, 0, 0, 192, 192, 192, 254, 255, 255, 255, 192, 192, 192, 192, 192, 192, 0, 0, 0, 0, 128, 128, 192, 192, 192, 192, 192, 192, 192, 128, 128, 0, 0, 0, 0, 0, 0, 0, 128, 128, 192, 192, 192, 192, 192, 192, 192, 192, 128, 0, 0, 0, 0, 0, 192, 192, 192, 192, 0, 128, 128, 192, 192, 192, 192, 192, 192, 192, 128, 0, 0, 0, 0, 0, 192, 192, 192, 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 192, 192, 192, 128, 0, 0, 0, 0, 128, 192, 192, 192, 0, 0, 128, 128, 192, 192, 192, 192, 192, 192, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  310. 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 255, 255, 255, 255, 1, 1, 1, 1, 1, 1, 0, 240, 252, 255, 255, 119, 115, 113, 113, 97, 97, 115, 119, 127, 127, 126, 120, 0, 128, 248, 254, 255, 255, 159, 3, 1, 1, 1, 1, 3, 15, 31, 31, 31, 30, 0, 0, 0, 255, 255, 255, 255, 62, 15, 7, 3, 3, 3, 3, 15, 255, 255, 255, 254, 0, 0, 0, 0, 0, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 128, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 254, 31, 7, 3, 3, 3, 3, 7, 255, 255, 255, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  311. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 192, 0, 0, 0, 0, 0, 0, 15, 127, 255, 255, 248, 224, 192, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 63, 255, 255, 255, 248, 224, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 31, 0, 0, 0, 0, 127, 255, 255, 255, 224, 128, 128, 128, 128, 128, 224, 248, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  312. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 7, 7, 7, 7, 7, 7, 3, 0, 0, 0, 0, 1, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 1, 3, 3, 7, 7, 7, 15, 15, 15, 15, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 2, 0, 0, 0, 0, 0, 1, 3, 7, 7, 7, 7, 7, 7, 3, 3, 1, 3, 7, 7, 7, 3, 0, 0, 0, 0, 3, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  313. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  314. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  315. };
  316. int opc;
  317. int idioma; //1 para espa�ol, 2 para ingles
  318. int ok=1, i=0;
  319. long dinero=0, dincaja=0;
  320.  
  321. int var;
  322. var=EEPROM_Read(0x55);
  323. C1ON_bit = 0; // Disable comparators
  324. C2ON_bit = 0;
  325.  
  326. Sound_Init(&PORTC,2);
  327. ANSEL = 0x00; // Configure AN pins as digital
  328. ANSELH = 0;
  329. TRISA = 0x00;
  330. TRISC = 0;
  331. TRISB = 0x00;
  332.  
  333. //Glcd inicializacion
  334. Glcd_Init();
  335. Glcd_Set_Font(Font_Glcd_System5x7, 5, 7, 32);
  336. Glcd_Fill(0);
  337.  
  338. if(var!=0){
  339. EEPROM_Write(0x02,1); //Guardamos el C�DIGO PIN 1234 en las direcciones 2,3,4 y 5 de memoria de la EEPROM
  340. EEPROM_Write(0x03,2);
  341. EEPROM_Write(0x04,3);
  342. EEPROM_Write(0x05,4);
  343.  
  344. EEPROM_Write(0x11,200); //Saldo inicial en la cuenta = 255� almacenados en la EEPROM @ 0x11
  345. EEPROM_Write(0x12,0);
  346. EEPROM_Write(0x13,0);
  347.  
  348. EEPROM_Write(0x55,0);
  349. }
  350. //-------------------------------FIN INICIALIZACIONES---------------------------------------------------------------
  351. //-----------------------------TEMPERATURA--------------------------------------------------------------------------
  352. Lcd_Init(); // Initialize LCD
  353. Lcd_Cmd(_LCD_CLEAR); // Clear LCD
  354. Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
  355. Lcd_Out(1, 1, "Temp.:");
  356. // Print degree character, 'C' for Centigrades
  357. Lcd_Chr(1,11,178);
  358. Lcd_Chr(1,12,'C');
  359. //--- Perform temperature reading
  360. Ow_Reset(&PORTC, 1); // Onewire reset signal
  361. Ow_Write(&PORTC, 1, 0xCC); // Issue command SKIP_ROM
  362. Ow_Write(&PORTC, 1, 0x44); // Issue command CONVERT_T
  363. Delay_us(120);
  364.  
  365. Ow_Reset(&PORTC, 1);
  366. Ow_Write(&PORTC, 1, 0xCC); // Issue command SKIP_ROM
  367. Ow_Write(&PORTC, 1, 0xBE); // Issue command READ_SCRATCHPAD
  368.  
  369. temp = Ow_Read(&PORTC, 1);
  370. temp = (Ow_Read(&PORTC, 1) << 8) + temp;
  371.  
  372. //--- Format and display result on Lcd
  373. Display_Temperature(temp);
  374. Glcd_Init();
  375. //-----------------------------------------------------------------------------------------------------------------
  376. Glcd_Image(logo_tecnun);
  377. delay_ms(2000);
  378. Glcd_Fill(0);
  379. idioma = PedirIdioma();
  380. PedirPin(idioma);
  381. while(1){
  382. for (i=0; i<11; i++) output[i] = 0; //Inicializar el vector de salida a ceros
  383. Glcd_Init();
  384. opc = Menu(idioma);
  385. Glcd_Init();
  386. if(opc==1){
  387. for (i=0; i<11; i++) output[i] = 0; //Inicializar el vector de salida a ceros
  388. dinero = EEPROM_Read(0x13)*16384 + EEPROM_Read(0x12)*128 + EEPROM_Read(0x11);
  389. LongToStr(dinero,dinero2);
  390. Glcd_Fill(0);
  391. if(idioma==1)Glcd_LineaROM("Saldo disponible:",1);
  392. else Glcd_LineaROM("Available money:",1);
  393. Glcd_LineaRAM(dinero2,2);
  394. Animals();
  395. }
  396. else if(opc==2){ //Sacar dinero
  397. b=1;
  398. aux1=0;
  399. dinero=0;
  400. do{
  401. Glcd_Fill(0);
  402. if(idioma==1) {
  403. Glcd_LineaROM("Cantidad a retirar: ",1);
  404. Glcd_LineaROM("(Cant. maxima: 10000)" ,2);
  405. Glcd_LineaROM("Acepte con 'A'",3);
  406. }else{
  407. Glcd_LineaROM("Money to withdraw: ",1);
  408. Glcd_LineaROM("(Max. amount: 10000)" ,2);
  409. Glcd_LineaROM("Accept with 'A'",3);
  410. }
  411. dincaja = EEPROM_Read(0x13)*16384 + EEPROM_Read(0x12)*128 + EEPROM_Read(0x11);
  412. LongToStr(dincaja,dinero2);
  413. //strcat(disp,dinero2);
  414. if(idioma==1) Glcd_LineaROM("Disponible:",4);
  415. else Glcd_LineaROM("Available:",4);
  416. Glcd_LineaRAM(dinero2,5);
  417. do{
  418. variable=Num_Selec();
  419. if(variable==10)break;
  420. else{
  421. vector_variables[i]= variable;
  422. IntToStr(variable,aux);
  423. aux1= aux1*10;
  424. aux1=aux1 + variable;
  425. LongToStr(aux1,aux);
  426. Glcd_LineaRAM(aux,6);
  427. i++;
  428. }
  429. } while(variable!=10);
  430. for (j=0; j<i; j++) aux[j] = 0;
  431. dinero=aux1;
  432. if(dinero>10000){
  433. Glcd_Fill(0);
  434. Glcd_LineaROM("Max.:10000",1);
  435. for (j=0; j<i; j++) { aux[j] = 0;}
  436. delay_ms(1000);
  437. Glcd_Fill(0);
  438. }
  439.  
  440. }while(dinero>10000);
  441. //en este punto tengo un 'numero_final' que es el saldo que quiero retirar
  442. //ahora lo comparo con el saldo que tengo
  443. Glcd_Fill(0);
  444. if(dincaja<dinero){
  445. if(idioma==1)Glcd_LineaRAM("No hay suficiente.",2);
  446. else Glcd_LineaRAM("Not enough funds.",2);
  447. delay_ms(2000);
  448. }
  449. else{//almacenar el entero dinero_en_caja en la memoria
  450. aux1 = dincaja-dinero;
  451. for (i=0; i<11; i++) output[i] = 0; //Inicializar el vector de salida a ceros
  452. LongToStr(aux1,output);
  453. dinero=aux1/16384;
  454. EEPROM_Write(0x13,dinero);
  455. aux1=aux1 % 16384;
  456. dinero=aux1/128;
  457. EEPROM_Write(0x12,dinero);
  458. aux1=aux1 % 128;
  459. EEPROM_Write(0x11, aux1);
  460. if(idioma==1){
  461. Glcd_LineaROM("Cantidad retirada.",2);
  462. Glcd_LineaROM("Disponible: ",3);
  463. }else{
  464. Glcd_LineaROM("Amount withdrawn.",2);
  465. Glcd_LineaROM("Available: ",3);
  466. }
  467. dincaja = EEPROM_Read(0x13)*16384 + EEPROM_Read(0x12)*128 + EEPROM_Read(0x11);
  468. Glcd_LineaRAM(output,4);
  469. delay_ms(2000);
  470. Glcd_Fill(0);
  471. }
  472. }
  473. else if(opc==3){ //meter dinero
  474. for (i=0; i<11; i++) output[i] = 0; //Inicializar el vector de salida a ceros
  475. b=1;
  476. aux1=0;
  477. dinero=0;
  478. do{
  479. Glcd_Fill(0);
  480. if(idioma==1) {
  481. Glcd_LineaROM("Cantidad a meter: ",1);
  482. Glcd_LineaROM("(Cant. maxima: 10000)" ,2);
  483. Glcd_LineaROM("Acepte con 'A'",3);
  484. }else{
  485. Glcd_LineaROM("Money to deposit: ",1);
  486. Glcd_LineaROM("(Max. amount: 10000)" ,2);
  487. Glcd_LineaROM("Accept with 'A'",3);
  488. }
  489. dincaja = EEPROM_Read(0x13)*16384 + EEPROM_Read(0x12)*128 + EEPROM_Read(0x11);
  490. LongToStr(dincaja,dinero2);
  491. //strcat(disp,dinero2);
  492. if(idioma==1) Glcd_LineaROM("Disponible:",4);
  493. else Glcd_LineaROM("Available:",4);
  494. Glcd_LineaRAM(dinero2,5);
  495. for(h=0;h<11;h++)output[h]=0; //volver a inicializar el vector 'output'
  496.  
  497. do{
  498. variable=Num_Selec();
  499. if(variable==10)break;
  500. else{
  501. vector_variables[i]= variable;
  502. IntToStr(variable,aux);
  503. aux1= aux1*10;
  504. aux1=aux1 + variable;
  505. LongToStr(aux1,aux);
  506. Glcd_LineaRAM(aux,6);
  507. i++;
  508. }
  509. } while(variable!=10);
  510. for (j=0; j<i; j++) aux[j] = 0;
  511. dinero=aux1;
  512. if(dinero>10000){
  513. Glcd_Fill(0);
  514. Glcd_LineaRAM("Max.:10000",1);
  515. for (j=0; j<i; j++){ aux[j] = 0;}
  516. delay_ms(1000);
  517. Glcd_Fill(0);
  518. }
  519.  
  520. }while(dinero>10000);
  521. //en este punto tengo un 'numero_final' que es el saldo que quiero retirar
  522. //ahora lo comparo con el saldo que tengo
  523. Glcd_Fill(0);
  524. aux1 = dincaja+dinero;
  525. for (i=0; i<11; i++) output[i] = 0; //Inicializar el vector de salida a ceros
  526. LongToStr(aux1,output);
  527. dinero=aux1/16384;
  528. EEPROM_Write(0x13,dinero);
  529. aux1=aux1 % 16384;
  530. dinero=aux1/128;
  531. EEPROM_Write(0x12,dinero);
  532. aux1=aux1 % 128;
  533. EEPROM_Write(0x11, aux1);
  534. if(idioma==1)Glcd_LineaROM("Dinero en caja:",3);
  535. else Glcd_LineaROM("Available money;",3);
  536. dincaja = EEPROM_Read(0x13)*16384 + EEPROM_Read(0x12)*128 + EEPROM_Read(0x11);
  537. Glcd_LineaRAM(output,4);
  538. delay_ms(2000);
  539. Glcd_Fill(0);
  540. }
  541. else if(opc==4){
  542. c=0;
  543. b=3;
  544. pin=0;
  545. newpin=0;
  546. newpin2=0;
  547. i=0;
  548.  
  549. while(b!=0){
  550. char output[11] = {0};
  551. c=0;
  552. pin=0;
  553. Glcd_Fill(0);
  554. if(idioma==1)Glcd_LineaROM("Insertar PIN: ",1);
  555. else Glcd_LineaROM("Insert PIN: ",1);
  556. for(i=0; i<4; i++){
  557. pin=Num_Selec();
  558. //Codigo para mostrar cuantos numeros se han escrito ya con circulillos
  559. if (i==0) Glcd_LineaRAM("*",2);
  560. else if (i==1) Glcd_LineaRAM("**",2);
  561. else if (i==2) Glcd_LineaRAM("***",2);
  562. else if (i==3) Glcd_LineaRAM("****",2);
  563. if(pin==EEPROM_Read(0x02+i)) c++;
  564. }
  565. if(c==4){
  566. break;//sale del bucle
  567. }
  568. else{
  569. char output[11] = {0}; //Inicializar el vector de salida a ceros
  570. if(idioma==1)Glcd_LineaROM("PIN incorrecto",3);
  571. else Glcd_LineaROM("Incorrect PIN",3);
  572. b=b-1;
  573. IntToStr(b, output);
  574. if(idioma==1)strcat(output," restantes");
  575. else strcat(output," left");
  576. Glcd_LineaRAM(output,4);
  577. Delay_ms(1000);
  578. }
  579. }
  580. if(b==0){
  581. Glcd_Fill(0);
  582. if(idioma==1)Glcd_LineaROM("Acceso denegado",3);
  583. else Glcd_LineaROM("Unauthorized access",3);
  584. Delay_ms(2000);
  585. break;
  586. }
  587. do{
  588. Glcd_Fill(0);
  589. if(idioma==1)Glcd_LineaROM("PIN nuevo",1);
  590. else Glcd_LineaROM("New PIN",1);
  591. newpin=0;
  592. for(i=0; i<4; i++){
  593. pin=Num_Selec();
  594. //Codigo para mostrar cuantos numeros se han escrito ya con circulillos
  595. if (i==0) Glcd_LineaROM("*",2);
  596. else if (i==1) Glcd_LineaROM("**",2);
  597. else if (i==2) Glcd_LineaROM("***",2);
  598. else if (i==3) Glcd_LineaROM("****",2);
  599. newpin= newpin*10;
  600. newpin=newpin + pin;
  601. }
  602. if(idioma==1)Glcd_LineaROM("De nuevo:",3);
  603. else Glcd_LineaROM("Again:",3);
  604. newpin2=0;
  605. for(i=0; i<4; i++){
  606. pin=Num_Selec();
  607. //Codigo para mostrar cuantos numeros se han escrito ya con circulillos
  608. if (i==0) Glcd_LineaROM("*",4);
  609. else if (i==1) Glcd_LineaROM("**",4);
  610. else if (i==2) Glcd_LineaROM("***",4);
  611. else if (i==3) Glcd_LineaROM("****",4);
  612. newpin2= newpin2*10;
  613. newpin2=newpin2 + pin;
  614. }
  615. if(newpin!=newpin2){
  616. Glcd_Fill(0);
  617. if(idioma==1)Glcd_LineaROM("No coinciden.",1);
  618. else Glcd_LineaROM("Not the same.",1);
  619. Delay_ms(1000);
  620. Glcd_Fill(0);
  621. }
  622. }while (newpin!=newpin2);
  623. for(c=0; c<4; c++){
  624. aux1= newpin % 10;
  625. EEPROM_Write(0x05-c,aux1);
  626. newpin=newpin/10;
  627. }
  628. Glcd_Fill(0);
  629. if(idioma==1){
  630. Glcd_LineaROM("El PIN ha sido",1);
  631. Glcd_LineaROM(" cambiado",2);
  632. }else{
  633. Glcd_LineaROM("PIN has been",1);
  634. Glcd_LineaROM(" changed.",2);
  635. }
  636.  
  637. Delay_ms(1000);
  638. }
  639. else if(opc==5){
  640. for (i=0; i<11; i++) output[i] = 0; //Inicializar el vector de salida a ceros
  641. b=1;
  642. aux1=0;
  643. dinero=0;
  644.  
  645. //Pedir telefono
  646. Glcd_Fill(0);
  647. movil=0;
  648. if(idioma==1)Glcd_LineaROM("Numero de telefono: ",1);
  649. else Glcd_LineaROM("Phone number: ",1);
  650. for(i=0;i<9;i++){
  651. variable=Num_Selec();
  652. if(variable==10)break;
  653. else{
  654. movil= movil*10;
  655. movil= movil + variable;
  656. LongToStr(movil,aux);
  657. Glcd_LineaRAM(aux,3);
  658. }
  659. }
  660. delay_ms(900);
  661.  
  662. do{
  663. Glcd_Fill(0);
  664. if(idioma==1) {
  665. Glcd_LineaROM("Cantidad a recargar: ",1);
  666. Glcd_LineaROM("(Multiplos de 5)" ,2);
  667. Glcd_LineaROM("Acepte con 'A'",3);
  668. }else{
  669. Glcd_LineaROM("Money to charge: ",1);
  670. Glcd_LineaROM("(Integers of 5)" ,2);
  671. Glcd_LineaROM("Accept with 'A'",3);
  672. }
  673. dincaja = EEPROM_Read(0x13)*16384 + EEPROM_Read(0x12)*128 + EEPROM_Read(0x11);
  674. LongToStr(dincaja,dinero2);
  675. //strcat(disp,dinero2);
  676. if(idioma==1)Glcd_LineaROM("Disponible:",4);
  677. else Glcd_LineaROM("Available:",4);
  678. Glcd_LineaRAM(dinero2,5);
  679. aux1=0;
  680. i=0;
  681. do{
  682. variable=Num_Selec();
  683. if(variable==10)break;
  684. else{
  685. vector_variables[i]= variable;
  686. IntToStr(variable,aux);
  687. aux1= aux1*10;
  688. aux1=aux1 + variable;
  689. IntToStr(aux1,aux);
  690. Glcd_LineaRAM(aux,6);
  691. i++;
  692. }
  693. } while(variable!=10);
  694. for (j=0; j<i; j++) aux[j] = 0;
  695. dinero=aux1;
  696. if(dinero%5!=0){
  697. Glcd_Fill(0);
  698. if(idioma==1){
  699. Glcd_LineaROM("Introduzca multiplos",1);
  700. Glcd_LineaROM("de 5 euros.",2);
  701. }else{
  702. Glcd_LineaROM("Enter only",1);
  703. Glcd_LineaROM("integers of 5.",2);
  704. }
  705.  
  706. delay_ms(2000);
  707. }
  708. }while (dinero%5!=0);
  709. //en este punto tengo un 'numero_final' que es el saldo que quiero retirar
  710. //ahora lo comparo con el saldo que tengo
  711. Glcd_Fill(0);
  712. if(dincaja<dinero){
  713. if(idioma==1)Glcd_LineaROM("No hay suficiente.",2);
  714. else Glcd_LineaROM("Not enough funds.",2);
  715. delay_ms(2000);
  716. }else{//almacenar el entero dinero_en_caja en la memoria
  717. aux1 = dincaja-dinero;
  718. for (i=0; i<11; i++) output[i] = 0; //Inicializar el vector de salida a ceros
  719. LongToStr(aux1,output);
  720. dinero=aux1/16384;
  721. EEPROM_Write(0x13,dinero);
  722. aux1=aux1 % 16384;
  723. dinero=aux1/128;
  724. EEPROM_Write(0x12,dinero);
  725. aux1=aux1 % 128;
  726. EEPROM_Write(0x11, aux1);
  727. if(idioma==1){
  728. Glcd_LineaROM("Movil cargado",2);
  729. Glcd_LineaROM("Disponible: ",3);
  730. }else{
  731. Glcd_LineaROM("Phone charged",2);
  732. Glcd_LineaROM("Available: ",3);
  733. }
  734. dincaja = EEPROM_Read(0x13)*16384 + EEPROM_Read(0x12)*128 + EEPROM_Read(0x11);
  735. Glcd_LineaRAM(output,4);
  736. delay_ms(2000);
  737. }
  738. }
  739. else if(opc==6){
  740. Sound_Init(&PORTC,2);
  741. if(idioma==1){
  742. Glcd_Fill(0);
  743. Glcd_LineaROM("Muchas gracias por",1);
  744. Glcd_LineaROM("su visita, esperamos",2);
  745. Glcd_LineaROM("volver a verle pronto.",3);
  746. Sound_Play(880,100);
  747. Sound_Play(1200,700);
  748. delay_ms(2000);
  749. Glcd_Fill(0);
  750. Glcd_LineaROM("ATM desarrollada por:",1);
  751. Glcd_LineaROM("Oier Arroniz-903442",2);
  752. Glcd_LineaROM("Santi Pagola-903422",3);
  753. Glcd_LineaROM("Tecnun-Universidad",4);
  754. Glcd_LineaROM("De Navarra",5);
  755. Glcd_LineaROM("Abril 2014.",6);
  756. delay_ms(5000);
  757. Glcd_Image(logo_tecnun);
  758. delay_ms(2000);
  759. Glcd_Fill(0);
  760. return;
  761. }else{
  762. Glcd_Fill(0);
  763. Glcd_LineaROM("Thank you very much",1);
  764. Glcd_LineaROM("for your visit, we ",2);
  765. Glcd_LineaROM("hope to see you",3);
  766. Glcd_LineaROM("soon again.",4);
  767. Sound_Play(880,100);
  768. Sound_Play(1200,700);
  769. delay_ms(2000);
  770. Glcd_Fill(0);
  771. Glcd_LineaROM("ATM developed by:",1);
  772. Glcd_LineaROM("Oier Arroniz-903442",2);
  773. Glcd_LineaROM("Santi Pagola-903422",3);
  774. Glcd_LineaROM("Tecnun-University",4);
  775. Glcd_LineaROM("Of Navarre",5);
  776. Glcd_LineaROM("April 2014.",6);
  777. delay_ms(5000);
  778. Glcd_Image(logo_tecnun);
  779. delay_ms(2000);
  780. Glcd_Fill(0);
  781. return;
  782. }
  783. }
  784. else{
  785. if(idioma==1)Glcd_LineaROM("Elija bien la opcion", 6);
  786. else Glcd_LineaROM("Choose right option",6);
  787. Delay_ms(1000);
  788. }
  789. }
  790. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.