Сейчас сделаю так чтоб писал так как надо в определенную клетку и опубликую здесь. Другим начинающим пригодится)
SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проблема
Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб
Прогресс ощутимый! он уже пишет у меня. пока только отдельные буквы, но пишет! И это потрясающе!
Сейчас сделаю так чтоб писал так как надо в определенную клетку и опубликую здесь. Другим начинающим пригодится)
Сейчас сделаю так чтоб писал так как надо в определенную клетку и опубликую здесь. Другим начинающим пригодится)
- Реклама
Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб
Потом можно с загружаемыми шрифтами потренироваться..Vlad0o писал(а):Сейчас сделаю так чтоб писал так как надо в определенную клетку
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб
И это можно будет попробовать. надо дальше развиваться
Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб
Код: Выделить всё
#include <C8051F310.H>
// Pin Declarations
//----------------------
#define LCD_DATA P3 // data port (P3^1;P3^2;P3^3;P3^4)
sbit LCD_RS = P1^3;
sbit LCD_E = P1^4;
sbit DB4 = P3^1;
sbit DB5 = P3^2;
sbit DB6 = P3^3;
sbit DB7 = P3^4;
volatile unsigned long tmpCnt;
void lcd_init(void); //LCD init
void OSCILLATOR_Init (void);
void PORT_Init (void);
void lcd_write(unsigned char);
void Delay(unsigned int);
void lcd_CMD(unsigned char);
void lcd_string(const char *c);
void GotoXY(unsigned char x,unsigned char y);
//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------
void main (void)
{
PCA0MD &= ~0x40;// WDTE = 0 (clear watchdog timer
// enable)
OSCILLATOR_Init ();
PORT_Init ();
lcd_init(); //initialize lcd
LCD_RS = 1;
while(1)
{
GotoXY(2,2);
lcd_string("I work");
GotoXY(1,1);
lcd_string("FINE");
}
}
void OSCILLATOR_Init (void)
{
OSCICN |= 0x03; // Configure internal oscillator for
}
void PORT_Init (void)
{
P1MDOUT = 0x18; //P1.4, P1.3
P1SKIP = 0x18; //P1.4, P1.3
P3MDOUT = 0x1E; // P3.1, P3.2, P3.3, P3.4
XBR0 = 0x09; //sysclk
XBR1 = 0x40; // Enable crossbar and enable
// weak pull-ups
}
void Delay (unsigned int ms)
{
unsigned long tmp;
tmp = ((unsigned long) ms) * 5;
for (tmpCnt = 0; tmpCnt<tmp; tmpCnt++);
}
void lcd_write(unsigned char c)
{
LCD_DATA = (c & 0xF0)>> 3; // send higher-order nibble
LCD_E = 1;
Delay(5);
LCD_E = 0; // Write data to display
LCD_DATA = (c & 0x0F) << 1; //send lower-order nibble
LCD_E = 1;
Delay(5);
LCD_E = 0; // Write data to display
}
void lcd_init(void) //лучше не трогать. хорошо ж работает)))
{
DB4 = 0;
DB5 = 0;
DB6 = 0;
DB7 = 0;
LCD_RS = 0; // write control bytes
LCD_E = 0;
Delay(2000);
// power on delay 15ms
Delay(2000);
//Set LCD_DATA to high nibble of Software Reset
//LCD_DATA = (LCD_DATA&0x0F)|0x30;
DB4 = 1;
DB5 = 1;
DB6 = 0;
DB7 = 0;
LCD_E = 1;
Delay(50); // Wait 5ms
LCD_E = 0; // Write data to display
Delay(1000); // Wait 5ms
LCD_E = 1;
Delay(50);
LCD_E = 0; // Write data to display again (SW Reset)
Delay(1000); // Wait 5ms
LCD_E = 1;
Delay(50);
LCD_E = 0; // Write data to display again (SW Reset)
Delay(1000); // Wait 5ms
// Set LCD_DATA to high nibble of Function Set (4Bit)
//LCD_DATA = (LCD_DATA&0x0F)|0x20;
DB4 = 0;
DB5 = 1;
DB6 = 0;
DB7 = 0;
LCD_E = 1;
Delay(50);
LCD_E = 0; // Write data to display
Delay(500);
lcd_write(0x28);
Delay(500);
lcd_write(0x08);
Delay(500);
lcd_write(0x01);
Delay(1000);
lcd_write(0x0C);
Delay(1000);
//lcd_write(0x06);
lcd_write(0x06);
Delay(1000);
}
void lcd_string(const char *a) //отправка слова
{
while (*a)
{
lcd_write(*a++);
}
}
void lcd_CMD(unsigned char c) //отправка команды
{
LCD_RS = 0;
LCD_DATA = (c & 0xF0)>> 3; // send higher-order nibble
LCD_E = 1;
Delay(5);
LCD_E = 0; // Write data to display
LCD_DATA = (c & 0x0F) << 1; //send lower-order nibble
LCD_E = 1;
Delay(5);
LCD_E = 0; // Write data to display
LCD_RS = 1;
}
void GotoXY(unsigned char x,unsigned char y) //установка курсора в нужное место
{
lcd_CMD((0x7f+y)|((x>>1)<<6));
}
а все остальное работает шикарно! буду дальше пилить)
Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб
Я не советую брать куски кода откуда попало. Команды установки курсора в позицию (х,у) зависят от числа символов отображаемых в строке дисплея (включая скроллинг) и в том проекте это число может отличаться от Вашего случая. Соответственно, оффсет позиции курсора в памяти для экранной позиции (х,у) Все команды поддерживаемые Вашим LCD описаны в его даташите, следует лишь включить мозг.
- Реклама

