Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************/
- /* main_code.c: LED Flasher */
- /******************************************************************************/
- /* Program zmodyfikowany do potrzeb laboratorium IISI Systemy Wbudowane */
- /* This file is part of the uVision/ARM development tools. */
- /* Copyright (c) 2005-2006 Keil Software. All rights reserved. */
- /* This software may only be used under the terms of a valid, current, */
- /* end user licence from KEIL for a compatible version of KEIL software */
- /* development tools. Nothing else gives you the right to use this software. */
- /******************************************************************************/
- #include <AT91SAM7X256.H> /* AT91SAMT7X256 definitions */
- #include "lcd.h"
- #include <stdio.h>
- #include "delay.h"
- #include <math.h>
- #include "adc.h"
- #include <ctype.h>
- #include <string.h>
- extern void InitSpi(void);
- extern void InitLcd(void);
- extern void InitPhilipsLcd(void);
- extern void LCDClearScreen(void);
- extern void WriteSpiCommand(unsigned int data);
- extern void WriteSpiData(unsigned int data);
- extern void LCDClearScreen(void);
- extern void LCDSetXY(int x, int y);
- extern void LCDSetPixel(int x, int y, int color);
- extern void LCDSetLine(int x1, int y1, int x2, int y2, int color);
- extern void LCDSetRect(int x0, int y0, int x1, int y1, unsigned char fill, int color);
- extern void LCDSetCircle(int x0, int y0, int radius, int color);
- extern void LCDPutChar(char c, int x, int y, int size, int fcolor, int bcolor);
- extern void LCDPutString (char *lcd_string, const char *font_style, unsigned char x, unsigned char y,
- unsigned char fcolor, unsigned char bcolor);
- extern void LCDPutStr(char *pString, int x, int y, int Size, int fColor, int bColor);
- extern void Delay (unsigned long a);
- // maska dla pinow do ktorych podlaczone sa diody, którymi bedziemy sterowac
- #define LEDS_MASK (AT91C_PIO_PB30 | AT91C_PIO_PB20 | AT91C_PIO_PB21)
- // PB30 i PB21 - wyjscia pinow diod, PB20 - podswietlenie ekranu
- // konfiguracja wybranych linii PIO
- #define LED_INIT {AT91C_BASE_PIOB->PIO_PER = LEDS_MASK; AT91C_BASE_PIOB->PIO_OER = LEDS_MASK; AT91C_BASE_PIOB->PIO_OWER = LEDS_MASK;}
- // definicja ustawiania stanu niskiego wyjscia PB20 = zgaszenie podswietlenia LED wyswietlacza LCD
- #define LED_BCK_OFF AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB20
- // definicja ustawiania stanu wysokiego wyjscia PB20 = zalaczenie podswietlenia LED wyswietlacza LCD
- #define LED_BCK_ON AT91C_BASE_PIOB->PIO_SODR = AT91C_PIO_PB20
- // sterowanie diodami
- #define LED1_ON AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB30
- #define LED1_OFF AT91C_BASE_PIOB->PIO_SODR = AT91C_PIO_PB30
- #define LED2_ON AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB21
- #define LED2_OFF AT91C_BASE_PIOB->PIO_SODR = AT91C_PIO_PB21
- // definicje klawiszy
- #define LEFT_KEY_DOWN (((AT91C_BASE_PIOB->PIO_PDSR) & AT91C_PIO_PB24)==0)
- #define RIGHT_KEY_DOWN (((AT91C_BASE_PIOB->PIO_PDSR) & AT91C_PIO_PB25)==0)
- #define LEFT_STICK (((AT91C_BASE_PIOA->PIO_PDSR) & AT91C_PIO_PB7)==0)
- #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; }
- #define SPEAKER_TGL AT91C_BASE_PIOB->PIO_ODSR ^= AT91C_PIO_PB19;
- // tablica pomocnicza (do przeksztalcania liczb)
- char ciag[100];
- void playsound(int tone_mlt, int time)
- {
- int mod = 100000 / tone_mlt;
- int tim = time * 100;
- int i;
- for (i = 0; i < tim; i++) {
- if (i % mod == 0) SPEAKER_TGL;
- }
- }
- int main (void)
- {
- int zmienna_ms, zmienna_s,zmienna_m,zmienna1_ms,zmienna1_s,zmienna1_m;
- int k=0;
- int zmienna2_ms,zmienna2_s,zmienna2_m,zmienna3_ms,zmienna3_s,zmienna3_m,zmienna4_ms,zmienna4_s,zmienna4_m =0.0;
- // wlaczenie zegara PIO
- AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOB) | (1 << AT91C_ID_PIOA);
- // przejecie kontroli nad liniami zdefiniowanymi w LEDS_MASK
- LED_INIT;
- // inicjalizacja magistrali SPI (wykorzystanej do polaczenia z LCD)
- InitSpi();
- // inicjalizacja LCD
- InitLcd();
- // ustawienia kontrastu
- WriteSpiCommand(VOLCTR);
- WriteSpiData(40); // P1 = 40 volume value (experiment with this value to get the best contrast)
- WriteSpiData(3); // P2 = 3 resistance ratio (only value that works)
- // wyczyszczenie ekranu
- LCDClearScreen();
- // zmienna zliczajaca w przyblizeniu sekundy
- zmienna_ms=0.0;
- zmienna_s=0.0;
- zmienna_m=0.0;
- // glowna petla programu
- while(1)
- {
- zmienna_ms++;
- LCDPutStr("Stopwatch", 10, 30, LARGE, BLACK, GREEN);
- //msekundy
- sprintf(ciag, "%d", zmienna_ms);
- LCDPutStr(ciag, 30, 65, LARGE, BLACK, GREEN);
- if(zmienna_ms>=10)
- {
- zmienna_s+=1;
- zmienna_ms=0;
- }
- if(zmienna_s>=60)
- {
- zmienna_m+=1;
- zmienna_s=0;
- }
- //sekundy
- sprintf(ciag, "%d.", zmienna_s);
- LCDPutStr(ciag, 30, 35, LARGE, BLACK, GREEN);
- //minuty
- sprintf(ciag, "%d:", zmienna_m);
- LCDPutStr(ciag, 30, 10, LARGE, BLACK, GREEN);
- delay_ms(1);
- //LCDClearScreen();
- //}
- if(RIGHT_KEY_DOWN)
- {
- zmienna_ms=0.0;
- zmienna_s=0.0;
- zmienna_m=0.0;
- zmienna1_ms=0.0;
- zmienna1_s=0.0;
- zmienna1_m=0.0;
- zmienna2_ms=0.0;
- zmienna2_s=0.0;
- zmienna2_m=0.0;
- zmienna3_ms=0.0;
- zmienna3_s=0.0;
- zmienna3_m=0.0;
- zmienna4_ms=0.0;
- zmienna4_s=0.0;
- zmienna4_m=0.0;
- playsound(600,1);
- }
- if(LEFT_KEY_DOWN && k==0)
- {
- zmienna1_ms=zmienna_ms;
- zmienna1_s=zmienna_s;
- zmienna1_m=zmienna_m;
- k=1;
- LCDClearScreen();
- }
- if(LEFT_KEY_DOWN && k==1)
- {
- zmienna2_ms=zmienna_ms;
- zmienna2_s=zmienna_s;
- zmienna2_m=zmienna_m;
- k=2;
- LCDClearScreen();
- }
- if(LEFT_KEY_DOWN && k==2)
- {
- zmienna3_ms=zmienna_ms;
- zmienna3_s=zmienna_s;
- zmienna3_m=zmienna_m;
- k=3;
- LCDClearScreen();
- }
- if(LEFT_KEY_DOWN && k==3)
- {
- zmienna4_ms=zmienna_ms;
- zmienna4_s=zmienna_s;
- zmienna4_m=zmienna_m;
- k=0;
- LCDClearScreen();
- }
- /*k++;
- if(k>3)
- {
- k=0;
- }*/
- //sekundy
- sprintf(ciag, "%d.", zmienna4_ms);
- LCDPutStr(ciag, 50, 65, LARGE, RED, YELLOW);
- //sekundy
- sprintf(ciag, "%d.", zmienna4_s);
- LCDPutStr(ciag, 50, 35, LARGE, RED, YELLOW);
- //minuty
- sprintf(ciag, "%d:", zmienna4_m);
- LCDPutStr(ciag, 50, 10, LARGE, RED, YELLOW);
- //sekundy
- sprintf(ciag, "%d.", zmienna3_ms);
- LCDPutStr(ciag, 70, 65, LARGE, RED, YELLOW);
- //sekundy
- sprintf(ciag, "%d.", zmienna3_s);
- LCDPutStr(ciag, 70, 35, LARGE, RED, YELLOW);
- //minuty
- sprintf(ciag, "%d:", zmienna3_m);
- LCDPutStr(ciag, 70, 10, LARGE, RED, YELLOW);
- //sekundy
- sprintf(ciag, "%d.", zmienna2_ms);
- LCDPutStr(ciag, 90, 65, LARGE, RED, YELLOW);
- //sekundy
- sprintf(ciag, "%d.", zmienna2_s);
- LCDPutStr(ciag, 90, 35, LARGE, RED, YELLOW);
- //minuty
- sprintf(ciag, "%d:", zmienna2_m);
- LCDPutStr(ciag, 90, 10, LARGE, RED, YELLOW);
- //sekundy
- sprintf(ciag, "%d.", zmienna1_ms);
- LCDPutStr(ciag, 110, 65, LARGE, RED, YELLOW);
- //sekundy
- sprintf(ciag, "%d.", zmienna1_s);
- LCDPutStr(ciag, 110, 35, LARGE, RED, YELLOW);
- //minuty
- sprintf(ciag, "%d:", zmienna1_m);
- LCDPutStr(ciag, 110, 10, LARGE, RED, YELLOW);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement