While-satserna i main med //////////////////////////////////**** är de jag använt, och testat lite olika med.
(Tyvärr lång kod, varav lite är intressant.
Kod: Markera allt
//---------------- standardbibliotek ------------------
// #define F_CPU 8000000 för att använda intern 8 MHz osilator
#include <avr/io.h>
#include <util/delay.h>
#include <util/delay_basic.h>
#include <avr/pgmspace.h>
#define CLOCK (1<<PB1)
#define ROW PORTF
#define RED PORTA
#define GREEN PORTC
#define BLUE PORTD
#define KNAPPAR PORTB
uint8_t knappar;
//#define knappar PORTB //3.4.5
//if ((KNAPPAR & (1<<PB3)) == 0) { ... //knapp vid PORTB.3 nedtryckt ... }
uint8_t dimningsholl; //Dimningsvariabel, 1=upp, 0=ned
uint16_t dimningssteg = 1; //Variabel för hur dimningen uppför sig?
uint8_t pixelnr;
uint16_t tid = 1;
uint8_t ROWNR;
uint8_t monster[9][48];
uint8_t tecken[44][30];
uint8_t monsterval;
uint8_t colour;
uint8_t red = 0b00000000;
uint8_t green = 0b00000000;
uint8_t blue = 0b00000000;
uint8_t redscroll[6];
uint8_t bluescroll[6];
uint8_t greenscroll[6];
void refrech() { // SKRIV ALGORITM HÄR
for(int varv = 0; varv < tid; varv++){
pixelnr = 0;
ROWNR = 0b00100000;
for(int y = 0; y < 6; y++){
for(int x = 0; x < 8; x++){
red <<= 1;
green >>= 1;
blue >>= 1;
colour = pgm_read_byte(&monster [monsterval][(x+y*8)]);
if (colour & 1) blue |= 0b10000000; //Blå
if (colour & 2) green |= 0b10000000; //Grön
if (colour & 4) red |= 0b00000001; //röd
pixelnr++;
}
ROW = ROWNR;
RED = red;
GREEN = green;
BLUE = blue;
ROWNR >>= 1;
_delay_ms(1);
if((dimningsholl == 0) | (dimningsholl == 1)){
ROW = 0b00000000;
RED = 0b00000000;
GREEN = 0b00000000;
BLUE = 0b00000000;
if(dimningsholl == 0){
dimningssteg++;
for(int z = 0; z < (dimningssteg); z++){
_delay_us(6); //var 6
}
}
if(dimningsholl == 1){
dimningssteg--;
for(int z = 0; z < (dimningssteg); z++){
_delay_us(6); //var 6
}
}
}
//for(int z = 0; z < dimningssteg; z++){
// _delay_us(6); //var 6
//}
//if(dimningsholl == 0) dimningssteg++;
//if(dimningsholl == 1) dimningssteg--;
}
}
}
void slide(uint8_t teckenval) { // SKRIV ALGORITM HÄR
//pixelnr = 0;
//red = 0b00000000;
//green = 0b00000000;
//blue = 0b00000000;
//for(int z = 0; z < 1; z++){
for(int x = 0; x < 5; x++){
//ROWNR = 0b00100000;
for(int z = 0; z < 6; z++){
redscroll[z] <<= 1;
greenscroll[z] >>= 1;
bluescroll[z] >>= 1;
}
//for(int y = 0; y < 6; y++){
//for(int i = 0; i < 200; i++){
for(int z = 0; z < 6; z++){
colour = pgm_read_byte(&tecken [teckenval][(x+z*5)]);
if (colour & 1) bluescroll[z] |= 0b10000000; //Blå
if (colour & 2) greenscroll[z] |= 0b10000000;//Grön
if (colour & 4) redscroll[z] |= 0b00000001; //röd
//pixelnr++;
}
for(int i = 0; i < 7; i ++){
ROWNR = 0b00100000;
for(int z = 0; z < 6; z++){
ROW = ROWNR;
RED = redscroll[z];
GREEN = greenscroll[z];
BLUE = bluescroll[z];
ROWNR >>= 1;
_delay_us(3500);
}
}
//}
//}
}
//}
}
uint8_t PROGMEM monster[9][48] = {
{ 2,4,4,2,2,2,4,2, 4,2,2,4,2,4,4,2, 2,2,4,2,2,2,4,2, 2,4,2,2,2,2,4,2, 4,4,4,4,2,4,4,4, 2,2,2,2,2,2,2,2 } , // grön21, röd bakgrund. mönster nr 0
{ 4,2,2,4,4,4,2,4, 2,4,4,2,4,2,2,4, 4,4,2,4,4,4,2,4, 4,2,4,4,4,4,2,4, 2,2,2,2,4,2,2,2, 4,4,4,4,4,4,4,4 } , // röd21, grön bakgrund. mönster nr 1
{ 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0 } , // Rutmönster blå
{ 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0 } , // Rutmönster grön
{ 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0 } , // Rutmönster röd
{ 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0, 0,1,0,1,0,1,0,1 } , // Rutmönster blå motvänd
{ 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2, 2,0,2,0,2,0,2,0, 0,2,0,2,0,2,0,2 } , // Rutmönster grön motvänd
{ 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4, 4,0,4,0,4,0,4,0, 0,4,0,4,0,4,0,4 } , // Rutmönster röd motvänd
{ 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, 1,2,3,4,5,6,7,1, } , // Färgtest
};
uint8_t PROGMEM tecken[44][30] = {
{ 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0 } , // 0 mönster siffra - 0
{ 0,0,0,0,0, 0,0,1,0,0, 0,1,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,1,1,1,0 } , // 1 mönster siffra - 1
{ 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0 } , // 2 mönster siffra - 2
{ 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0 } , // 3 mönster siffra - 3
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0 } , // 4 mönster siffra - 4
{ 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 1,1,1,1,0 } , // 5 mönster siffra - 5
{ 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0 } , // 6 mönster siffra - 6
{ 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0, 0,0,0,1,0, 0,0,0,1,0 } , // 7 mönster siffra - 7
{ 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0 } , // 8 mönster siffra - 8
{ 0,0,0,0,0, 1,1,1,1,0, 1,0,0,1,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,0,1,0 } , // 9 mönster siffra - 9
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0 } , // 10 mönster mellanslag ' '
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } , // 11 mönster '.'
{ 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,1,0,0,0, 1,1,0,0,0 } , // 12 mönster ','
{ 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0 } , // 13 mönster ':'
{ 0,0,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 1,1,0,0,0, 0,0,0,0,0, 1,1,0,0,0 } , // 14 mönster '!'
{ 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } , // 15 mönster bokstav - A
{ 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0 } , // 16 mönster bokstav - B
{ 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,0,0, 1,0,0,1,0, 0,1,1,0,0 } , // 17 mönster bokstav - C
{ 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,0,0 } , // 18 mönster bokstav - D
{ 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,0,0, 1,0,0,0,0, 1,1,1,1,0 } , // 19 mönster bokstav - E
{ 0,0,0,0,0, 1,1,1,1,0, 1,0,0,0,0, 1,1,1,0,0, 1,0,0,0,0, 1,0,0,0,0 } , // 20 mönster bokstav - F
{ 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,0,0, 1,0,1,1,0, 0,1,1,0,0 } , // 21 mönster bokstav - G
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } , // 22 mönster bokstav - H
{ 0,0,0,0,0, 0,1,1,1,0, 0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 0,1,1,1,0 } , // 23 mönster bokstav - I
{ 0,0,0,0,0, 0,0,1,1,0, 0,0,0,1,0, 0,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } , // 24 mönster bokstav - J
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,1,0,0, 1,1,0,0,0, 1,0,1,0,0, 1,0,0,1,0 } , // 25 mönster bokstav - K
{ 0,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,1,0 } , // 26 mönster bokstav - L
{ 0,0,0,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0 } , // 27 mönster bokstav - M ???
{ 0,0,0,0,0, 1,0,0,1,0, 1,1,0,1,0, 1,1,1,1,0, 1,0,1,1,0, 1,0,0,1,0 } , // 28 mönster bokstav - N ???
{ 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } , // 29 mönster bokstav - O
{ 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,0,0,0, 1,0,0,0,0 } , // 30 mönster bokstav - P
{ 0,0,0,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,1,0,0, 0,1,0,1,0 } , // 31 mönster bokstav - Q
{ 0,0,0,0,0, 1,1,1,0,0, 1,0,0,1,0, 1,1,1,0,0, 1,0,1,0,0, 1,0,0,1,0 } , // 32 mönster bokstav - R
{ 0,0,0,0,0, 0,1,1,1,0, 1,0,0,0,0, 0,1,1,1,0, 0,0,0,1,0, 1,1,1,0,0 } , // 33 mönster bokstav - S
{ 0,0,0,0,0, 1,1,1,1,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0 } , // 34 mönster bokstav - T
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } , // 35 mönster bokstav - U
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 0,1,1,0,0 } , // 36 mönster bokstav - V
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0 } , // 37 mönster bokstav - W
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0 } , // 38 mönster bokstav - X
{ 0,0,0,0,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0, 0,1,1,0,0, 0,1,1,0,0 } , // 39 mönster bokstav - Y
{ 0,0,0,0,0, 1,1,1,1,0, 0,0,0,1,0, 0,0,1,0,0, 0,1,0,0,0, 1,1,1,1,0 } , // 40 mönster bokstav - Z
{ 0,1,1,0,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } , // 41 mönster bokstav - Å
{ 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,1,1,1,0, 1,0,0,1,0, 1,0,0,1,0 } , // 42 mönster bokstav - Ä
{ 1,0,0,1,0, 0,1,1,0,0, 1,0,0,1,0, 1,0,0,1,0, 1,0,0,1,0, 0,1,1,0,0 } , // 43 mönster bokstav - Ö
};
/**** huvudprogrammet ****/
int main(void) {
// initiering av portar (se kapitel 12 i databladet - särskilt 12.2.1)
DDRF = 0b00000000; // alla pinnar på port F ska vara utgångar rad
DDRA = 0b11111111; // alla pinnar på port A ska vara utgångar röd
DDRC = 0b11111111; // alla pinnar på port C ska vara utgångar grön
DDRD = 0b11111111; // alla pinnar på port D ska vara utgångar blå
DDRB = 0b00000000;
PORTB |= 0b00111000; // sätt bit 3,4,5.
PORTF = 0b11111111; //aktiverar alla rader
while(0){ ///////////////////////////////////////////////////////////////////////////********
if(PB3 == 0){
monsterval = 0; //Val av mönster från monster[val][]
tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 2; //Dimmar uppåt
refrech();
}
if(PB4 == 0){
monsterval = 1; //Val av mönster från monster[val][]
tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 2; //Dimmar uppåt
refrech();
}
if(PB5 == 0){
monsterval = 2; //Val av mönster från monster[val][]
tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 2; //Dimmar uppåt
refrech();
}
}
while(1){ ///////////////////////////////////////////////////////////////////////////********
if ((KNAPPAR & (1<<PB3)) == 0) {
monsterval = 0; //Val av mönster från monster[val][]
tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 2; //Dimmar uppåt
refrech(); //Anropar refrech för att få nytt mönster
_delay_us(1000);
}
if ((KNAPPAR & (1<<PB4)) == 0) {
monsterval = 1; //Val av mönster från monster[val][]
tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 2; //Dimmar uppåt
refrech(); //Anropar refrech för att få nytt mönster
_delay_us(1000);
}
if ((KNAPPAR & (1<<PB5)) == 0) {
monsterval = 2; //Val av mönster från monster[val][]
tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 2; //Dimmar uppåt
refrech(); //Anropar refrech för att få nytt mönster
_delay_us(1000);
}
}
while(1) { // ...loopa för evigt...
for(int i = 2; i < 8; i++){ //Rutnät
monsterval = i;
tid = 100;
dimningsholl = 2;
refrech();
}
monsterval = 0; //Val av mönster från monster[val][]
tid = 180; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 1; //Dimmar uppåt
dimningssteg = 1125; //6.25*tid
refrech(); //Anropar refrech för att få nytt mönster
monsterval = 0; //Val av mönster från monster[val][]
tid = 120; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 2; //Dimmar uppåt
refrech(); //Anropar refrech för att få nytt mönster
monsterval = 1; //Val av mönster från monster[val][]
tid = 70; //70=1,2s - ca 58=1s ???
dimningsholl = 0; //Dimmar nedåt
dimningssteg = 0;
refrech(); //Anropar refrech för att få nytt mönster
monsterval = 1; //Val av mönster från monster[val][]
tid = 80; //80=1,4s - ca 58=1s (57=1s) ???
dimningsholl = 1; //Dimmar uppåt
dimningssteg = 500; //6.25*tid
refrech(); //Anropar refrech för att få nytt mönster
monsterval = 0; //Val av mönster från monster[val][]
tid = 70; //70=1,2s - ca 58=1s ???
dimningsholl = 0; //Dimmar nedåt
dimningssteg = 0;
refrech(); //Anropar refrech för att få nytt mönster
monsterval = 8; //Val av mönster från monster[val][]
tid = 350; //70=1,2s - ca 58=1s ???
dimningsholl = 2; //Dimmar nedåt
refrech(); //Anropar refrech för att få nytt mönster
slide(22);slide(19);slide(26);slide(26);slide(29);slide(10);slide(37);slide(29);slide(32);slide(26);slide(18);slide(14);slide(10);slide(10); //HELLO WORLD!
//slide(1);
//monsterval = 0; //Val av mönster från monster[val][]
//tid = 200; //80=1,4s - ca 58=1s (57=1s) ???
//dimningsholl = 2; //Dimmar uppåt
//refrech();
///////////////////////////////////////////////////////////////////////
//En fungerande dimning (pumpning)
///////////////////////////////////////////////////////////////////////
//monsterval = 1; //Val av mönster från monster[val][]
//tid = 80; //80=1,4s - ca 58=1s (57=1s) ???
//dimningsholl = 1; //Dimmar uppåt
//dimningssteg = 500; //6.25*tid
//refrech(); //Anropar refrech för att få nytt mönster
//monsterval = 0; //Val av mönster från monster[val][]
//tid = 70; //70=1,2s - ca 58=1s ???
//dimningsholl = 0; //Dimmar nedåt
//dimningssteg = 0;
//refrech(); //Anropar refrech för att få nytt mönster
///////////////////////////////////////////////////////////////////////
//Lång dimning, dock blinkig.
///////////////////////////////////////////////////////////////////////
//monsterval = 1; //Val av mönster från monster[val][]
//tid = 400; //80=1,4s - ca 58=1s (57=1s) ???
//dimningsholl = 1; //Dimmar uppåt
//dimningssteg = 2500; //6.25*tid
//refrech(); //Anropar refrech för att få nytt mönster
//monsterval = 0; //Val av mönster från monster[val][]
//tid = 700; //70=1,2s - ca 58=1s ???
//dimningsholl = 0; //Dimmar nedåt
//dimningssteg = 0;
//refrech();
}
}