Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "AT91SAM9263.h"
- //wyświetlacz segmentowy
- #define LEFT 1<< 30
- #define RIGHT 1<<28
- #define A 1<<25
- #define B 1<<24
- #define C 1<<22
- #define D 1<<21
- #define E 1<<20
- #define F 1<<27
- #define G 1<<26
- #define DP 1<<23
- #define button_left 1<<4
- #define button_right 1<<5
- #define timer 1 << 24
- unsigned int number[10];
- void timer_start()
- {
- AT91C_BASE_PITC->PITC_PIMR = 6249;
- AT91C_BASE_PITC->PITC_PIMR |= 1 <<24;
- }
- void leftON()
- {
- AT91C_BASE_PIOB->PIO_SODR = LEFT;
- }
- void leftOFF()
- {
- AT91C_BASE_PIOB->PIO_CODR = LEFT;
- }
- void rightON()
- {
- AT91C_BASE_PIOB->PIO_SODR = RIGHT;
- }
- void rightOFF()
- {
- AT91C_BASE_PIOB->PIO_CODR = RIGHT;
- }
- void show(int x)
- {
- AT91C_BASE_PIOB->PIO_SODR |= number[x];
- AT91C_BASE_PIOB->PIO_PER |= number[x];
- AT91C_BASE_PIOB->PIO_OER |= number[x];
- }
- void clear()
- {
- AT91C_BASE_PIOB->PIO_CODR = number[8];
- }
- void delay(int m)
- {
- AT91C_BASE_PITC->PITC_PIVR;
- while(m >= (AT91C_BASE_PITC->PITC_PIIR) >> 20){};
- }
- /*void delay ()
- {
- int i=0;
- for (i = 0; i < 200000; i++);
- }*/
- void number_init()
- {
- number[0] = A|B|C|D|E|F;
- number[1] = B|C;
- number[2] = A|B|G|E|D;
- number[3] = A|B|G|C|D;
- number[4] = B|F|G|C;
- number[5] = A|F|G|C|D;
- number[6] = A|F|G|C|D|E;
- number[7] = A|B|C;
- number[8] = A|B|C|D|E|F|G;
- number[9] = A|B|G|F|C|D;
- }
- void left_init()
- {
- AT91C_BASE_PIOB->PIO_PER = LEFT;
- AT91C_BASE_PIOB->PIO_OER = LEFT;
- }
- void right_init()
- {
- AT91C_BASE_PIOB->PIO_PER = RIGHT;
- AT91C_BASE_PIOB->PIO_OER = RIGHT;
- }
- void left_button_init()
- {
- AT91C_BASE_PIOC->PIO_PPUER = button_left;
- AT91C_BASE_PIOC->PIO_IER = button_left;
- }
- void setup()
- {
- number_init();
- left_init();
- right_init();
- left_button_init();
- timer_start();
- }
- void refresh()
- {
- int i;
- for(i = 0; i < 5000; i++);
- }
- void screen_switch(int left, int right)
- {
- int j;
- for(j = 0; j < 50; j++)
- {
- //RIGHT
- rightON();
- show(right);
- delay(5);
- //refresh();
- clear();
- rightOFF();
- //LEFT
- leftON();
- show(left);
- delay(5);
- //refresh();
- clear();
- leftOFF();
- }
- }
- void count()
- {
- int i;
- int left = 0;
- int right = 0;
- for(i = 0; i <= 99; i++)
- {
- if(right >= 10)
- {
- right = 0;
- left++;
- }
- screen_switch(left, right);
- right++;
- }
- }
- void test()
- {
- volatile int tmp = 0;
- delay(5000);
- if(AT91C_BASE_PIOC->PIO_PDSR == 0xfdffffef) tmp = 1;
- if(AT91C_BASE_PIOC->PIO_PDSR == 0xfdffffdf) tmp = 0;
- if ( tmp )
- {
- show(8);
- }
- else
- {
- show(7);
- }
- delay(5000);
- clear();
- }
- void loop()
- {
- while(1)
- {
- //test();
- count();
- }
- }
- int main(void)
- {
- setup();
- loop();
- }
- void dbgu_print_ascii(const char* string){}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement