Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ: (+)

Отправлено sav_ua (213.111.66.216) 12 января 2012, г. 02:18
В ответ на: LCD инициализация отправлено Дмитрии 11 января 2012, г. 19:56

когда-то было сделано, работает на многих проектах, зрить надо в корень :))

#include "C8051F120.h"
#include "lcd_routine.h"
#include "global_variable.h"
#include <intrins.h>
#include <stdio.h>

sbit RS = P4^0;
sbit RW = P4^1;
sbit E = P4^2;


void Read_BUSY_Flag(){
unsigned char c;
Set_RS(0);
Set_RW(1);
do{
Set_E(1);
c = (Read_Port() & (1 << 7));
Set_E(0);
}
while(c != 0);
}

/*
unsigned char ReadInstrReg (void){
unsigned char Instr;
Set_RS(0);
Set_RW(1);
Set_E(1);
Instr = Read_Port(); // read Instruction
Set_E(0);
Read_BUSY_Flag();
return(Instr);
}
*/
void WriteInstrReg (unsigned char Instr){
Set_RS(0);
Set_RW(0);
Set_E(1);
Write_Port(Instr); // write instruction
Set_E(0);
Read_BUSY_Flag();
}
void WriteDataReg (unsigned char val){
Set_RS(1);
Set_RW(0);
Set_E(1);
Write_Port(val); // write value
Set_E(0);
Read_BUSY_Flag();
}
void Set_RS (unsigned char i){
SFRPAGE = CONFIG_PAGE;
if(i == 0) RS = 0;
else RS = 1;
Delay_1us();
SFRPAGE = LEGACY_PAGE;
}
void Set_RW (unsigned char i){
SFRPAGE = CONFIG_PAGE;
if(i == 0) RW = 0;
else RW = 1;
Delay_1us();
SFRPAGE = LEGACY_PAGE;
}
void Set_E (unsigned char i ){
SFRPAGE = CONFIG_PAGE;
if(i == 0) E = 0;
else E = 1;
Delay_1us();
SFRPAGE = LEGACY_PAGE;
}
unsigned char Read_Port(){
unsigned char c;
SFRPAGE = CONFIG_PAGE;
P3MDOUT = 0x0;
Delay_1us();
c = P3;
SFRPAGE = LEGACY_PAGE;
return(c);
}
void Write_Port(unsigned char c){
SFRPAGE = CONFIG_PAGE;
P3MDOUT = 0xFF;
Delay_1us();
P3 = c;
SFRPAGE = LEGACY_PAGE;
}
void Delay_ms(unsigned short ms){
unsigned short i,c = 70*SYS_CLK;;
while(ms--){
for(i = 0; i < c; ++i);
}
}
void Delay_1us(void){
unsigned char i = SYS_CLK;
while(--i) _nop_();
}
void Set_Display_Row_Ptr(unsigned char l){
if(l == 0) WriteInstrReg (LINE1_ADDR | DD_RAM_PTR);
if(l == 1) WriteInstrReg (LINE2_ADDR | DD_RAM_PTR);
if(l == 2) WriteInstrReg (LINE3_ADDR | DD_RAM_PTR);
if(l == 3) WriteInstrReg (LINE4_ADDR | DD_RAM_PTR);
}
void KS0066_Init(void){
Delay_ms(15);
WriteInstrReg(ONE_LINE_DISP_OFF);
Delay_ms(5);
WriteInstrReg(ONE_LINE_DISP_OFF);
Delay_ms(100);
WriteInstrReg(ONE_LINE_DISP_OFF);
Delay_ms(15);
WriteInstrReg(TWO_LINE_DISP_OFF);
Delay_ms(5);
WriteInstrReg(DISP_ON_CUR_OFF_BL_OFF);
Delay_ms(15);
WriteInstrReg(INC_MODE);
Delay_ms(15);
WriteInstrReg (CLEAR_DISPLAY);
Delay_ms(15);
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 654:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru