Witam,
Schemat:
Mam co do programowania oraz zasady działania tego układu pare pytań:
1. Jakie mają być stany portów oznaczonych jako TRAN oraz DIODY, aby diody się zaświeciły ??
2. Pytanie to dotyczy programu:
Programuję w AVR Studio 4.
Podczas kompilacji tego programu (oczywiście po przerobieniu portów do mojego schematu) wyskakują mi błędy.
BŁĘDY:
../test1.c:37: error: expected identifier or '(' before '}' token
../test1.c:47: warning: implicit declaration of function 'delay'
../test1.c:68: warning: implicit declaration of function 'delayms'
../test1.c:181: warning: unused variable 'tekst2'
../test1.c:180: warning: unused variable 'tekst1'
Są to 4 warningi oraz jeden error.
Proszę o pomoc nie wiem jak mam to ominąć.
Program ten jest do układu znajdującego się w załączniku.
Proszę o pomoc.
Poprawiłem tytuł , wstawiłem znaczniki [code] https://www.elektroda.pl/rtvforum/topic1015361.html
[zumek]
Schemat:
Mam co do programowania oraz zasady działania tego układu pare pytań:
1. Jakie mają być stany portów oznaczonych jako TRAN oraz DIODY, aby diody się zaświeciły ??
2. Pytanie to dotyczy programu:
//#define F_CPU 3686000L
//#include <util/delay.h>
#define F_CPU 8000000
#include <avr/io.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <stdio.h>
#define CYCLES_PER_US ((F_CPU+500000)/8000000)
#define RS_ON DDRB |= _BV(PB7); PORTB |= _BV(PB7);
#define RS_OFF DDRB |= _BV(PB7); PORTB &= _BV(PB7);
#define EN_ON DDRB |= _BV(PB6); PORTB |= _BV(PB6);
#define EN_OFF DDRB |= _BV(PB6); PORTB &= _BV(PB6);
#define D7_ON DDRA |= _BV(PA0); PORTA |= _BV(PA0);
#define D7_OFF DDRA |= _BV(PA0); PORTA &= _BV(PA0);
#define D6_ON DDRA |= _BV(PA1); PORTA |= _BV(PA1);
#define D6_OFF DDRA |= _BV(PA1); PORTA &= _BV(PA1);
#define D5_ON DDRA |= _BV(PA2); PORTA |= _BV(PA2);
#define D5_OFF DDRA |= _BV(PA2); PORTA &= _BV(PA2);
#define D4_ON DDRA |= _BV(PA3); PORTA |= _BV(PA3);
#define D4_OFF DDRA |= _BV(PA3); PORTA &= _BV(PA3);
unsigned char *wiersz=0;
unsigned char *kolumna=0;
//void delay(int ms);
void PiszInstLCD(char instr){
int temp = 0x3C; //piny portu C odpowiadajace linia danych
char temporary = instr;
//wysylam starsza czesc bajtu
RS_OFF;
PORTC = (temporary >> 2) & temp;
EN_ON;
delay(10);
EN_OFF;
delay(100);
//wysylam mlodsza czesc bajtu
RS_OFF;
PORTC = (instr << 2) & temp;
EN_ON;
delay(10);
EN_OFF;
delay(100);
}
void PiszDanaLCD(char dana){
int temp = 0x3C; //piny portu C odpowiadajace linia danych PC2-PC4
char temporary = dana;
//wysylam starsza czesc bajtu
EN_ON;
RS_ON;
PORTC = (temporary >> 2) & temp;
PORTC = (temporary >> 2) & temp;
delayms(1);
EN_OFF;
delay(100);
//wysylam mlodsza czesc bajtu
EN_ON;
RS_ON;
PORTC = (dana << 2) & temp;
PORTC = (dana << 2) & temp;
delay(1);
EN_OFF;
delay(100);
}
void czyscLCD(){
PiszInstLCD(0x01);
delay(2);
}
void LCDXY(int x, int y){
PiszInstLCD((x*0x40+y)|0x80); //standardowy rozkaz sterownika LCD
//ustawiający kursor w określonych współrzędnych
}
void LCD_INIT(){
// wylaczam piny JTAGa PC2-PC5 - normalnie niedostepne - dotyczy tylko portu C
MCUCSR |= 0x80;
MCUCSR |= 0x80;
//ustawienie portow jako wyjsciowe
DDRB = 0xFF;
DDRC = 0xFF;
//czyscimy porty
PORTB = 0x00;
PORTC = 0x00;
//czekamy az ustali sie napiecie - wszystkie czasy sa zawyzone tu ok 100ms
delayms(100);
//Function Set
//1
D5_ON;
EN_ON;
delay(10);// to z pewnoscia moze byc duzo krotsze, tu 10us
EN_OFF;
delay(5);
PORTC = 0x00;
//2
D5_ON;
EN_ON;
delay(10);
EN_OFF;
delay(5);
PORTC = 0x00;
//3
D7_ON;// 2 line
D6_ON;// display ON
EN_ON;
delay(10);
EN_OFF;
delay(5);
PORTC = 0x00;
delayms(2);// more than 39us
//Display ON/OFF Controll
PiszInstLCD(0x08); //display off, cursor off, blink off
delayms(2);// more than 39us
// Display Clear
PiszInstLCD(0x01);
delayms(5);// more than 1.53ms
//Entry mode set
PiszInstLCD(0x06); //increment, shift off,
delayms(2);
}
/*
void PiszTekstLCD(char *tekst) //pisz tekst na LCD wskazywany pointerem *tekst
{
char zn;
char nr=0;
while(1){
zn=PRG_RDB(&tekst[nr++]); //pobranie znaku z pamięci programu
if(zn!=0){ //czy nie ma końca tekstu?
if(zn=="\n"){ //czy znak nowej linii
wiersz==1?wiersz=0:++wiersz;//przejdź do nowej linii
kolumna=0;
LCDXY((int)wiersz,(int)kolumna); //ustaw obowiązujące po zmianie współrzędne na LCD
}else{
PiszDanaLCD(zn); //umieść pojedynczy znak tekstu na LCD
}
}else{
break; //zakończ pętlę, jeśli koniec tekstu
}
}
}
*/
int main()
{
char *tekst1=PSTR("HELLO WORLD");
char *tekst2=PSTR("www.elektroda.pl");
LCD_INIT();
// delayms(5);
PiszInstLCD(0x0C);// display ON, cursor ON, Blink OFF
// delayms(2);
LCDXY(0, 0);
// PiszTekstLCD(tekst1);
LCDXY(1,0);
// PiszTekstLCD(tekst2);
return 0;
}
Programuję w AVR Studio 4.
Podczas kompilacji tego programu (oczywiście po przerobieniu portów do mojego schematu) wyskakują mi błędy.
BŁĘDY:
../test1.c:37: error: expected identifier or '(' before '}' token
../test1.c:47: warning: implicit declaration of function 'delay'
../test1.c:68: warning: implicit declaration of function 'delayms'
../test1.c:181: warning: unused variable 'tekst2'
../test1.c:180: warning: unused variable 'tekst1'
Są to 4 warningi oraz jeden error.
Proszę o pomoc nie wiem jak mam to ominąć.
Program ten jest do układu znajdującego się w załączniku.
Proszę o pomoc.
Poprawiłem tytuł , wstawiłem znaczniki [code] https://www.elektroda.pl/rtvforum/topic1015361.html
[zumek]