Я новичок в программировании MCU.
У меня на руках что то вроде KIT'a. USB debug adapter, LCD 16x2 dv16210, с8051а314, несколько реле, кнопок и светодиодов. Он рабочий и исправно показывал время. (мне он таким достался). я постепенно учусь. сначала запускал примеры, поправляя их под конфигурации "сборки". И я постепенно подошел к тому чтоб что-то вывести на ЛСД экран. перерыл кучу примеров, кстати ЛСД подключен по 4 битному интерфейсу.
распиновка:
Р3.1 - d4
Р3.2 - d5
Р3.3 - d6
Р3.4 - d7
Р1.4 - E
Р1.3 - RS
(RW - GND)
так вот нашел я пример для PIC Microcontroller (PIC18F4550).
и переделал... вот что получилось:
#include "C8051F310.h"
//-----------------------------------------------------------------------------
// Pin Declarations
//-----------------------------------------------------------------------------
#define lcdport P3
sbit rs = P1^3;
sbit en = P1^4;
unsigned int i=0;
unsigned char data0[] = "Hello world";
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
void OSCILLATOR_Init (void);
void PORT_Init (void);
void DDD (unsigned long); //задержка 245000=1 секунда
void lcd_ini();
void dis_cmd(unsigned char);
void dis_data(unsigned char);
void lcdcmd(unsigned char);
void lcddata(unsigned char);
//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------
void main (void)
{
PORT_Init(); // Initialize Port I/O
OSCILLATOR_Init (); // Initialize Oscillator
////////////////////////////////////////////////////////
// unsigned char data0[] = "HELLO World"; ////
// unsigned int i=0; ////
/////////////////////////////////////////////////////
P3 = 0;
lcd_ini(); // LCD initialization
while(data0!='\0')
{
dis_data(data0); //вывод по букве с задержкой в 100мс
DDD(24500); //100мс задержка
i++;
}
}
//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// OSCILLATOR_Init
//-----------------------------------------------------------------------------
void OSCILLATOR_Init (void)
{
OSCICN |= 0x03; // Configure internal oscillator for
// its maximum frequency (24.5 Mhz)
}
//-----------------------------------------------------------------------------
// PORT_Init
void PORT_Init (void)
{
P1MDOUT = 0x18;
P3MDOUT = 0x1E;
XBR1 = 0x40; // Enable crossbar and enable
// weak pull-ups
}
void DDD (unsigned long n) //задержка
{
while(n--); //delay
{
}
}
void lcd_ini()
{
dis_cmd(0x02); // To initialize LCD in 4-bit mode.
dis_cmd(0x28); // To initialize LCD in 2 lines, 5x7 dots and 4bit mode.
dis_cmd(0x0C);
dis_cmd(0x06);
dis_cmd(0x80);
}
void dis_cmd(unsigned char cmd_value)
{
unsigned char cmd_value1;
cmd_value1 = (cmd_value & 0xF0); // Mask lower nibble because RB4-RB7 pins are being used
lcdcmd(cmd_value1); // Send to LCD
cmd_value1 = ((cmd_value<<4) & 0xF0); // Shift 4-bit and mask
lcdcmd(cmd_value1); // Send to LCD
}
void dis_data(unsigned char data_value)
{
unsigned char data_value1;
data_value1=(data_value&0xF0);
lcddata(data_value1);
data_value1=((data_value<<4)&0xF0);
lcddata(data_value1);
}
void lcdcmd(unsigned char cmdout)
{
lcdport = cmdout; //Send command to lcdport=PORTB
rs = 0;
en = 1;
DDD(2450); //10мс
en = 0;
}
void lcddata(unsigned char dataout)
{
lcdport=dataout; //Send data to lcdport=P3
rs=1;
en=1;
DDD(2450); //10мс
en=0;
}
Вот как то так...
Вроде все правильно сделал. ошибок больше не выводит компилятор, но на экране ничего не появляется.
Помогите пожалуйста. мне надо заставить его выводить текст на экран.


