Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdint.h>
- #include <stdbool.h>
- #include "include/AT91SAM9263.h"
- #define PIO_PER_B AT91C_PIOB_PER
- #define PIO_OER_B AT91C_PIOB_OER
- #define PIO_CODR_B AT91C_PIOB_CODR
- #define PIO_SODR_B AT91C_PIOB_SODR
- #define A (1<<25) //pin PB25
- #define B (1<<24) // pin PB24
- #define C (1<<22) // pin PB22
- #define D (1<<21) // pin PB21
- #define E (1<<20) // pin PB20
- #define F (1<<27) // pin PB27
- #define G (1<<26) // pin PB26
- #define LEFT_DISPLAY (1<<28) // controls Q2 transistor, left LED
- #define BRIGHTNESS (1<<29) // controls transistor Q1
- #define RIGHT_DISPLAY (1<<30) // controls Q3 transistor, right LED
- #define LEFT 1
- #define RIGHT 0
- #define DELAY 1000
- //uint32_t numeric type that guarantees 32 bits, value unsigned
- uint32_t ledDecode (uint8_t digit)
- {
- int number[10] = {};
- number[0] = A|B|C|D|E|F;
- number[1] = B|C;
- number[2] = A|B|D|E|G;
- number[3] = A|B|C|G|G|D;
- number[4] = F|B|G|C;
- number[5] = A|F|G|C|D;
- number[6] = A|F|G|E|D|C;
- number[7] = A|B|C;
- number[8] = A|B|C|D|E|F|G;
- number[9] = A|B|F|G|C|D;
- return number[digit];
- }
- void delay_ms (int delay) {
- volatile int time;
- for(time = 0; time < 25000*delay; time++);
- }
- void LED_Init(void) {
- *PIO_PER_B = (LEFT_DISPLAY|BRIGHTNESS|RIGHT_DISPLAY|A|B|C|D|E|F|G);
- *PIO_OER_B = (LEFT_DISPLAY|BRIGHTNESS|RIGHT_DISPLAY|A|B|C|D|E|F|G);
- *PIO_CODR_B = (A|B|C|D|E|F|G);
- *PIO_SODR_B = (LEFT_DISPLAY|RIGHT_DISPLAY);
- *PIO_CODR_B = BRIGHTNESS;
- }
- void LED_display_digit(uint8_t digit, uint8_t pos) {
- *PIO_SODR_B = (LEFT_DISPLAY|RIGHT_DISPLAY); //turn off the displays
- *PIO_CODR_B=(A|B|C|D|E|F|G); //clear segments
- *PIO_SODR_B=(ledDecode(digit)); //display number
- if(pos == LEFT) {
- *PIO_CODR_B= LEFT_DISPLAY; //enable left display
- } else {
- *PIO_CODR_B= RIGHT_DISPLAY; //enable right display
- }
- }
- void firstPart(void) {
- int counter = 0;
- while(1)
- {
- LED_display_digit(counter, LEFT);
- delay_ms(DELAY);
- counter++;
- if(counter == 10) {
- counter = 0;
- }
- }
- }
- void secondPart(void) {
- int counter = 0;
- while(1) {
- int tens = counter/10;
- int unit = counter%10;
- int i;
- for(i=0; i<50; i++){
- LED_display_digit(tens, LEFT);
- delay_ms(10);
- LED_display_digit(unit, RIGHT);
- delay_ms(10);
- }
- counter++;
- if(counter == 99) {
- counter= 0;
- }
- }
- }
- int main(void) {
- LED_Init();
- //firstPart();
- secondPart();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement