Отговори на тема  [ 3 мнения ] 
Помощ за управление на графичен LCD LGM12641BS1R 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение Помощ за управление на графичен LCD LGM12641BS1R
Колеги ,реших да се поограмотя малко на тема графичен LCD.Написах една съвсем проста програма за ATMEGA8 с CodevisionAVR.Исках само да пробвам да изведа един байт на екрана ,в случая 0xaa ,на определени координати.Начертах си схемата с Протеус (версия 7.1 SP4).Съгласувах всичко с описанието на LCD-то от PDF-a.Не мога да разбера аз ли съм с грешка или ме подмята симулатора.При проверка на Busy Flag програмата увисва и нищо не се получава на екрана,което според мен е нещо проблем на самия модел от Протеус.Ако махна реда който тества флага за заетост ,на екрана се извеждат байтовете 0xaa и за двата чипа на дисплея ,без координатите да играят някаква роля .Къде е проблема според вас.Ето и кода:Проблемния ред е с коментар!!!


/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.5 Standard
Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
e-mail:office@hpinfotech.com

Project :
Version :
Date : 26.1.2008 г.
Author : ugeen
Company : navigation
Comments:


Chip type : ATmega8L
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>

// Declare your global variables here
#define RS_L PORTC=~(1<<2)
#define RS_H PORTC|=(1<<2)
#define RW_L PORTC&=~(1<<3)
#define RW_H PORTC|=(1<<3)
#define E_L PORTC&=~(1<<4)
#define E_H PORTC|=(1<<4)
#define CS1_L PORTC&=~(1<<0)
#define CS1_H PORTC|=(1<<0)
#define CS2_L PORTC&=~(1<<1)
#define CS2_H PORTC|=(1<<1)
#define First_line 0xC0
#define Displ_ON 0x3F
//

unsigned char X,Y,Data;
//
void Pulse(void)
{
E_H;
delay_us(100);
E_L;
}

//
void Check_Busy_Flag(void)
{
RS_L;
RW_H;
DDRB=0x00;
E_H;
delay_us(350);
// while(PINB&0x80);проблемния ред .Без него се опитва да изкара нещо.
E_L;
DDRB=0xff;
#asm("nop")
}
//
void Initialize(void)
{
CS1_L;CS2_H;
delay_us(200);
Check_Busy_Flag();
RS_L;
RW_L;
PORTB=Displ_ON;
Pulse();
//
//
Check_Busy_Flag();
RS_L;
RW_L;
PORTB=First_line;
Pulse();
//
//
CS1_H;CS2_L;
delay_us(200);
Check_Busy_Flag();
RS_L;
RW_L;
PORTB=Displ_ON;
Pulse();
//
//
Check_Busy_Flag();
RS_L;
RW_L;
PORTB=First_line;
Pulse();
//
//
}
void Gotoxy(void)
{
if(Y>=64){ CS1_H;CS2_L;}
else{CS1_L;CS2_H;}
delay_us(200);
Check_Busy_Flag();
RS_L;
RW_L;
PORTB=0x40|Y;
Pulse();
Check_Busy_Flag();
RS_L;
RW_L;
PORTB=0xb8|X;
Pulse();
}
//
//
void Write_data(void)
{
if(Y>=64){ CS1_H;CS2_L;}
else{CS1_L;CS2_H;}
Check_Busy_Flag();
RS_H;
RW_L;
PORTB=Data;
Pulse();
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=In Func3=In Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=T State3=T State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xE7;

// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0x7F;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
RS_L;
RW_L;
E_L;
CS1_H;
CS2_H;
delay_ms(15);
Initialize();
X=7;
Y=68;
Data=0xaa;
Gotoxy();
Write_data();
while (1)
{






};
}


Нед Яну 27, 2008 12:24 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Това е от Протеуса


Прикачени файлове:
new-1.jpg
new-1.jpg [ 216.51 KiB | Прегледано 1631 пъти ]
Нед Яну 27, 2008 12:31 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
Това последно работеше
ако е същия IC драйвер


Прикачени файлове:
LCD_drv.c [2.18 KiB]
283 пъти

_________________
main[-1u]={1};
Нед Яну 27, 2008 1:39 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни