1
Практика / Програмиране на LCD-dysplay
« -: Януари 23, 2013, 11:14:09 am »
Здравейте
От скоро се занимавам с програмиране на МК и сега искам да си програмирам чипа да извежда данни на дисплея.
използвам:
чип-mega8L
дисплей-RC1602
текст-редактор-avrStudio5
написах следния код:
#include <avr/io.h>
#include <util/delay.h>
void lcd_cmd(unsigned char command){//LCD- 5-RS, 6-R/W , 7-E
PORTB = command;
PORTD = 0b10000000;//PORTD |= 1<<PIND7 | 0<<PIND6 | 0<<PIND5; //enable to write, send COMMAND
_delay_ms(2);
PORTD = 0x00;
_delay_ms(2);
}
void lcd_data(unsigned char data){
PORTB = data;
PORTD = 0b10100000;//PORTD |=1<<PIND5 | 0<<PIND6 | 1<<PIND7; //enable to write, send DATA
_delay_ms(2);
PORTD = 0b00100000;//PORTD |=1<<PIND5 | 0<<PIND6 | 0<<PIND7;
_delay_ms(2);
}
void lcd_send_string(char* string){//THIS FUNCTION WORK FOR STRING
while(*string){//Send value of pointer as data to LCD
lcd_data(*string);//Increment string pointer
string++;
}
}
int main(void){
//Settings PORTS
DDRD |= 1<<PIND5 | 1<<PIND6 | 1<<PIND7 ;//port D open to OUTPUT LCD-RS,R/W,E
DDRB = 0xff;//port B output
_delay_ms(16);
lcd_cmd(0x30);
lcd_cmd(0x0F);
lcd_cmd(0x01);
lcd_cmd(0x02);
lcd_send_string("A");
while(1){
}
return 0;
}
Предполагам ,че някъде правя грешка, но не съм сигурен.
Доста пъти разгледах даташийта на дисплея ,но...
На "proteus" направих почти същия код на примерен дисплей 16x2,работи нормално.
От скоро се занимавам с програмиране на МК и сега искам да си програмирам чипа да извежда данни на дисплея.
използвам:
чип-mega8L
дисплей-RC1602
текст-редактор-avrStudio5
написах следния код:
#include <avr/io.h>
#include <util/delay.h>
void lcd_cmd(unsigned char command){//LCD- 5-RS, 6-R/W , 7-E
PORTB = command;
PORTD = 0b10000000;//PORTD |= 1<<PIND7 | 0<<PIND6 | 0<<PIND5; //enable to write, send COMMAND
_delay_ms(2);
PORTD = 0x00;
_delay_ms(2);
}
void lcd_data(unsigned char data){
PORTB = data;
PORTD = 0b10100000;//PORTD |=1<<PIND5 | 0<<PIND6 | 1<<PIND7; //enable to write, send DATA
_delay_ms(2);
PORTD = 0b00100000;//PORTD |=1<<PIND5 | 0<<PIND6 | 0<<PIND7;
_delay_ms(2);
}
void lcd_send_string(char* string){//THIS FUNCTION WORK FOR STRING
while(*string){//Send value of pointer as data to LCD
lcd_data(*string);//Increment string pointer
string++;
}
}
int main(void){
//Settings PORTS
DDRD |= 1<<PIND5 | 1<<PIND6 | 1<<PIND7 ;//port D open to OUTPUT LCD-RS,R/W,E
DDRB = 0xff;//port B output
_delay_ms(16);
lcd_cmd(0x30);
lcd_cmd(0x0F);
lcd_cmd(0x01);
lcd_cmd(0x02);
lcd_send_string("A");
while(1){
}
return 0;
}
Предполагам ,че някъде правя грешка, но не съм сигурен.
Доста пъти разгледах даташийта на дисплея ,но...
На "proteus" направих почти същия код на примерен дисплей 16x2,работи нормално.