Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ioavr.h>
- #include <inavr.h>
- #define SPI_SCK 0
- #define SPI_CS 1
- #define SPI_DI 2
- #define SPI_PORT PORTB
- #define SPI_DIR DDRB
- __flash unsigned char toDOT[] = {
- 0x3E, 0x45, 0x49, 0x51, 0x3E, /* 0 */
- 0x00, 0x40, 0x7F, 0x42, 0x00, /* 1 */
- 0x46, 0x49, 0x49, 0x51, 0x62, /* 2 */
- 0x36, 0x49, 0x49, 0x41, 0x22,
- 0x7F ,0x08 ,0x08 ,0x08, 0x07,
- 0x39, 0x45, 0x45, 0x45, 0x47,
- 0x32, 0x49, 0x49, 0x49, 0x3E,
- 0x07, 0x09, 0x11, 0x21, 0x41,
- 0x36, 0x49, 0x49, 0x49, 0x36,
- 0x3E, 0x49, 0x49, 0x49, 0x46,
- 0x00, 0x00 ,0x24 ,0x00, 0x00,
- 0x00, 0x00 ,0x12 ,0x00, 0x00
- };
- #define SECOND 7372800
- #define ms 73728
- unsigned char disp [32];
- void printDgt(char pos, char val)
- {
- unsigned char __flash * src;
- unsigned char * dst;
- src = toDOT + (5 * val);
- dst = disp + (6 * pos) + 1;
- for(char i = 5; i; --i, ++src, ++dst)
- *dst = *src;
- dst = 0x00;
- }
- void spiSend(unsigned char d)
- {
- unsigned char cnt;
- for(cnt = 8; cnt; --cnt)
- {
- if(d & 0x80)
- SPI_PORT = (1 << SPI_DI);
- else
- SPI_PORT = 0;
- d = d << 1;
- __delay_cycles(3);
- SPI_PORT = SPI_PORT ^ (1 << SPI_SCK);
- __delay_cycles(3);
- SPI_PORT = SPI_PORT ^ (1 << SPI_SCK);
- }
- }
- void maxPaint()
- {
- unsigned char mask;
- unsigned char row;
- unsigned char data;
- unsigned char col;
- unsigned char bit_cnt;
- for(row = 1, mask = 0x01; row < 9; ++row, mask = mask << 1)
- {
- SPI_PORT &= ~(1 << SPI_CS);
- for(col = 31, bit_cnt = 8; col != 255; --col)
- {
- data <<= 1;
- data |= (disp[col] & mask) ? 0x01 : 0x00;
- if((--bit_cnt) == 0)
- {
- spiSend(row);
- spiSend(data);
- bit_cnt = 8;
- }
- }
- SPI_PORT |= (1 << SPI_CS);
- }
- }
- void maxToAll(char a, char d)
- {
- unsigned char cnt;
- SPI_PORT &= ~(1 << SPI_CS);
- cnt = 4;
- do {
- spiSend(a);
- spiSend(d);
- } while(--cnt);
- SPI_PORT |= (1 << SPI_CS);
- }
- void initDevices()
- {
- SPI_DIR = 0x07;
- SPI_PORT = (1 << SPI_CS);
- }
- void sendMAX(unsigned char a, unsigned char d)
- {
- SPI_PORT = 0;
- spiSend(a);
- spiSend(d);
- SPI_PORT = (1 << SPI_CS);
- }
- void dotTest()
- {
- sendMAX(0x09, 0x00);
- sendMAX(0x0B, 0x07);
- sendMAX(0x0C, 0x01);
- sendMAX(0x0A, 0x0F);
- sendMAX(0x09, 0x00);
- sendMAX(0x01, 0x01);
- sendMAX(0x02, 0x02);
- sendMAX(0x03, 0x04);
- sendMAX(0x04, 0x08);
- sendMAX(0x05, 0x10);
- sendMAX(0x06, 0x20);
- sendMAX(0x07, 0x40);
- sendMAX(0x08, 0x80);
- }
- void maxInit()
- {
- maxToAll(0x0F, 0x00);
- maxToAll(0x0B, 0x07);
- maxToAll(0x0C, 0x01);
- maxToAll(0x0A, 0x0F);
- maxToAll(0x09, 0x00);
- }
- void printTime(int minutes, int seconds, int miliseconds, int print)
- {
- printDgt(4,minutes/10);
- printDgt(3,minutes%10);
- printDgt(2,10);
- printDgt(1,seconds/10);
- printDgt(0,seconds%10);
- //maxPaint();
- __delay_cycles(7372800);
- printDgt(4,seconds/10);
- printDgt(3,seconds%10);
- printDgt(2,10);
- printDgt(1,miliseconds/10);
- printDgt(0,miliseconds%10);
- maxPaint();
- if(print == 0)
- return;
- __delay_cycles(7372800);
- printDgt(4,miliseconds/10);
- printDgt(3,seconds%10);
- printDgt(2,10);
- printDgt(1,0);
- printDgt(0,0);
- maxPaint();
- }
- void countdown(int TRYB_WIELKIEJ_PREDKOSCI_PRAWIE_JAK_KOSMICZNA_RAKIETA_UUUUU_WOOOSH){
- int seconds = 0;
- int minutes = 0;
- int miliseconds = 0;
- for(;;){
- if (TRYB_WIELKIEJ_PREDKOSCI_PRAWIE_JAK_KOSMICZNA_RAKIETA_UUUUU_WOOOSH == 1)
- __delay_cycles(5000);
- else
- __delay_cycles(ms);
- miliseconds +=1;
- if (miliseconds == 60)
- {
- miliseconds = 0;
- seconds += 1;
- }
- if (seconds == 60)
- {
- seconds = 0;
- minutes += 1;
- }
- if (minutes == 99)
- {
- printTime(minutes,seconds,miliseconds, 1);
- return;
- }
- printTime(minutes,seconds,miliseconds, 0);
- }
- }
- int main( void )
- {
- initDevices();
- dotTest();
- maxInit();
- //printDgt(0,7);
- //printDgt(1,8);
- //printDgt(2,10);
- //printDgt(3,0);
- //printDgt(4,3);
- countdown(TRYB_WIELKIEJ_PREDKOSCI_PRAWIE_JAK_KOSMICZNA_RAKIETA_UUUUU_WOOOSH = 1);
- //maxPaint();
- for(;;){
- //spiSend(0x00,0x7E);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement