Advertisement
Guest User

sadqw

a guest
Jan 25th, 2020
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.49 KB | None | 0 0
  1. /******************************************************************************/
  2. /* main_code.c: LED Flasher                                                   */
  3. /******************************************************************************/
  4. /* Program zmodyfikowany do potrzeb laboratorium IISI Systemy Wbudowane       */
  5. /* This file is part of the uVision/ARM development tools.                    */
  6. /* Copyright (c) 2005-2006 Keil Software. All rights reserved.                */
  7. /* This software may only be used under the terms of a valid, current,        */
  8. /* end user licence from KEIL for a compatible version of KEIL software       */
  9. /* development tools. Nothing else gives you the right to use this software.  */
  10. /******************************************************************************/
  11.  
  12. #include <AT91SAM7X256.H>                        /* AT91SAMT7X256 definitions */
  13. #include "lcd.h"
  14. #include <stdio.h>
  15. #include "delay.h"
  16. #include <math.h>
  17.  
  18.  
  19. #include "adc.h"
  20. #include <ctype.h>
  21. #include <string.h>
  22.  
  23. extern void InitSpi(void);
  24. extern void InitLcd(void);
  25. extern void InitPhilipsLcd(void);
  26. extern void LCDClearScreen(void);
  27.  
  28. extern void WriteSpiCommand(unsigned int data);
  29. extern void WriteSpiData(unsigned int data);
  30.  
  31. extern void LCDClearScreen(void);
  32. extern void LCDSetXY(int x, int y);
  33. extern void LCDSetPixel(int  x, int  y, int  color);
  34. extern void LCDSetLine(int x1, int y1, int x2, int y2, int color);
  35. extern void LCDSetRect(int x0, int y0, int x1, int y1, unsigned char fill, int color);
  36. extern void LCDSetCircle(int x0, int y0, int radius, int color);
  37. extern void LCDPutChar(char c, int  x, int  y, int size, int fcolor, int bcolor);
  38. extern void LCDPutString (char *lcd_string, const char *font_style, unsigned char x, unsigned char y,
  39.                    unsigned char fcolor, unsigned char bcolor);
  40. extern void LCDPutStr(char *pString, int  x, int  y, int Size, int fColor, int bColor);
  41. extern void Delay (unsigned long a);
  42.  
  43. // maska dla pinow do ktorych podlaczone sa diody, którymi bedziemy sterowac
  44. #define LEDS_MASK   (AT91C_PIO_PB30 | AT91C_PIO_PB20 | AT91C_PIO_PB21)
  45. // PB30 i PB21 - wyjscia pinow diod, PB20 - podswietlenie ekranu
  46. // konfiguracja wybranych linii PIO                                              
  47. #define LED_INIT    {AT91C_BASE_PIOB->PIO_PER = LEDS_MASK; AT91C_BASE_PIOB->PIO_OER = LEDS_MASK; AT91C_BASE_PIOB->PIO_OWER = LEDS_MASK;}
  48. // definicja ustawiania stanu niskiego wyjscia PB20 = zgaszenie podswietlenia LED wyswietlacza LCD
  49. #define LED_BCK_OFF AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB20
  50. // definicja ustawiania stanu wysokiego wyjscia PB20 = zalaczenie podswietlenia LED wyswietlacza LCD
  51. #define LED_BCK_ON  AT91C_BASE_PIOB->PIO_SODR = AT91C_PIO_PB20
  52. // sterowanie diodami
  53. #define LED1_ON     AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB30
  54. #define LED1_OFF    AT91C_BASE_PIOB->PIO_SODR = AT91C_PIO_PB30
  55. #define LED2_ON     AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB21
  56. #define LED2_OFF    AT91C_BASE_PIOB->PIO_SODR = AT91C_PIO_PB21
  57. // definicje klawiszy
  58. #define LEFT_KEY_DOWN (((AT91C_BASE_PIOB->PIO_PDSR) & AT91C_PIO_PB24)==0)
  59. #define RIGHT_KEY_DOWN (((AT91C_BASE_PIOB->PIO_PDSR) & AT91C_PIO_PB25)==0)
  60. #define LEFT_STICK (((AT91C_BASE_PIOA->PIO_PDSR) & AT91C_PIO_PB7)==0)
  61.  
  62. #define SOUND_INIT { AT91C_BASE_PIOB->PIO_PER = AT91C_PIO_PB19; AT91C_BASE_PIOB->PIO_OER = AT91C_PIO_PB19; AT91C_BASE_PIOB->PIO_OWER = AT91C_PIO_PB19; }
  63. #define SPEAKER_TGL AT91C_BASE_PIOB->PIO_ODSR ^= AT91C_PIO_PB19;
  64.  
  65. // tablica pomocnicza (do przeksztalcania liczb)
  66. char ciag[100];
  67.  
  68.  
  69. void playsound(int tone_mlt, int time)
  70. {
  71.     int mod = 100000 / tone_mlt;
  72.     int tim = time * 100;
  73.     int i;
  74.     for (i = 0; i < tim; i++) {
  75.         if (i % mod == 0) SPEAKER_TGL;
  76.     }
  77. }
  78.  
  79.  
  80. int main (void)
  81. {
  82.     int zmienna_ms, zmienna_s,zmienna_m,zmienna1_ms,zmienna1_s,zmienna1_m;
  83.     int k=0;
  84.     int zmienna2_ms,zmienna2_s,zmienna2_m,zmienna3_ms,zmienna3_s,zmienna3_m,zmienna4_ms,zmienna4_s,zmienna4_m =0.0;
  85.    
  86.                          
  87.     // wlaczenie zegara PIO
  88.     AT91C_BASE_PMC->PMC_PCER  = (1 << AT91C_ID_PIOB) | (1 << AT91C_ID_PIOA);
  89.     // przejecie kontroli nad liniami zdefiniowanymi w LEDS_MASK
  90.     LED_INIT;
  91.     // inicjalizacja magistrali SPI (wykorzystanej do polaczenia z LCD)
  92.     InitSpi();
  93.     // inicjalizacja LCD
  94.     InitLcd();
  95.     // ustawienia kontrastu
  96.     WriteSpiCommand(VOLCTR);
  97.     WriteSpiData(40); // P1 = 40 volume value (experiment with this value to get the best contrast)
  98.     WriteSpiData(3); // P2 = 3 resistance ratio (only value that works)
  99.     // wyczyszczenie ekranu
  100.     LCDClearScreen();
  101.  
  102.     // zmienna zliczajaca w przyblizeniu sekundy
  103.     zmienna_ms=0.0;
  104.     zmienna_s=0.0;
  105.     zmienna_m=0.0;
  106.     // glowna petla programu
  107.     while(1)
  108.     {
  109.             zmienna_ms++;
  110.             LCDPutStr("Stopwatch", 10, 30, LARGE, BLACK, GREEN);
  111.             //msekundy
  112.             sprintf(ciag, "%d", zmienna_ms);
  113.             LCDPutStr(ciag, 30, 65, LARGE, BLACK, GREEN);
  114.             if(zmienna_ms>=10)
  115.             {  
  116.                 zmienna_s+=1;
  117.                 zmienna_ms=0;
  118.             }
  119.    
  120.             if(zmienna_s>=60)
  121.             {  
  122.                 zmienna_m+=1;
  123.                 zmienna_s=0;
  124.                
  125.             }
  126.             //sekundy
  127.                 sprintf(ciag, "%d.", zmienna_s);
  128.                 LCDPutStr(ciag, 30, 35, LARGE, BLACK, GREEN);
  129.             //minuty
  130.             sprintf(ciag, "%d:", zmienna_m);
  131.                 LCDPutStr(ciag, 30, 10, LARGE, BLACK, GREEN);
  132.            
  133.             delay_ms(1);
  134.             //LCDClearScreen();
  135.             //}
  136.            
  137.             if(RIGHT_KEY_DOWN)
  138.             {
  139.                 zmienna_ms=0.0;
  140.                 zmienna_s=0.0;
  141.                 zmienna_m=0.0;
  142.                 zmienna1_ms=0.0;
  143.                 zmienna1_s=0.0;
  144.                 zmienna1_m=0.0;
  145.                 zmienna2_ms=0.0;
  146.                 zmienna2_s=0.0;
  147.                 zmienna2_m=0.0;
  148.                 zmienna3_ms=0.0;
  149.                 zmienna3_s=0.0;
  150.                 zmienna3_m=0.0;
  151.                 zmienna4_ms=0.0;
  152.                 zmienna4_s=0.0;
  153.                 zmienna4_m=0.0;
  154.  
  155.                 playsound(600,1);
  156.             }
  157.            
  158.                 if(LEFT_KEY_DOWN && k==0)
  159.                 {
  160.                         zmienna1_ms=zmienna_ms;
  161.                         zmienna1_s=zmienna_s;
  162.                         zmienna1_m=zmienna_m;
  163.                         k=1;
  164.                         LCDClearScreen();
  165.                 }
  166.                 if(LEFT_KEY_DOWN && k==1)
  167.                 {
  168.                         zmienna2_ms=zmienna_ms;
  169.                         zmienna2_s=zmienna_s;
  170.                         zmienna2_m=zmienna_m;
  171.                         k=2;
  172.                         LCDClearScreen();
  173.                 }
  174.                 if(LEFT_KEY_DOWN && k==2)
  175.                 {
  176.                         zmienna3_ms=zmienna_ms;
  177.                         zmienna3_s=zmienna_s;
  178.                         zmienna3_m=zmienna_m;
  179.                         k=3;
  180.                         LCDClearScreen();
  181.                 }
  182.                 if(LEFT_KEY_DOWN && k==3)
  183.                 {
  184.                         zmienna4_ms=zmienna_ms;
  185.                         zmienna4_s=zmienna_s;
  186.                         zmienna4_m=zmienna_m;
  187.                         k=0;
  188.                         LCDClearScreen();
  189.                 }
  190.                 /*k++;
  191.                 if(k>3)
  192.                 {
  193.                     k=0;
  194.                 }*/
  195.                
  196.                 //sekundy
  197.                 sprintf(ciag, "%d.", zmienna4_ms);
  198.                 LCDPutStr(ciag, 50, 65, LARGE, RED, YELLOW);
  199.                 //sekundy
  200.                 sprintf(ciag, "%d.", zmienna4_s);
  201.                 LCDPutStr(ciag, 50, 35, LARGE, RED, YELLOW);
  202.                 //minuty
  203.                 sprintf(ciag, "%d:", zmienna4_m);
  204.                 LCDPutStr(ciag, 50, 10, LARGE, RED, YELLOW);
  205.  
  206.  
  207.                 //sekundy
  208.                 sprintf(ciag, "%d.", zmienna3_ms);
  209.                 LCDPutStr(ciag, 70, 65, LARGE, RED, YELLOW);
  210.                 //sekundy
  211.                 sprintf(ciag, "%d.", zmienna3_s);
  212.                 LCDPutStr(ciag, 70, 35, LARGE, RED, YELLOW);
  213.                 //minuty
  214.                 sprintf(ciag, "%d:", zmienna3_m);
  215.                 LCDPutStr(ciag, 70, 10, LARGE, RED, YELLOW);
  216.  
  217.                 //sekundy
  218.                 sprintf(ciag, "%d.", zmienna2_ms);
  219.                 LCDPutStr(ciag, 90, 65, LARGE, RED, YELLOW);
  220.                 //sekundy
  221.                 sprintf(ciag, "%d.", zmienna2_s);
  222.                 LCDPutStr(ciag, 90, 35, LARGE, RED, YELLOW);
  223.                 //minuty
  224.                 sprintf(ciag, "%d:", zmienna2_m);
  225.                 LCDPutStr(ciag, 90, 10, LARGE, RED, YELLOW);
  226.  
  227.                 //sekundy
  228.                 sprintf(ciag, "%d.", zmienna1_ms);
  229.                 LCDPutStr(ciag, 110, 65, LARGE, RED, YELLOW);
  230.                 //sekundy
  231.                 sprintf(ciag, "%d.", zmienna1_s);
  232.                 LCDPutStr(ciag, 110, 35, LARGE, RED, YELLOW);
  233.                 //minuty
  234.                 sprintf(ciag, "%d:", zmienna1_m);
  235.                 LCDPutStr(ciag, 110, 10, LARGE, RED, YELLOW);
  236.                
  237.     }
  238.    
  239.        
  240.        
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement