Отговори на тема  [ 4 мнения ] 
Проблем с LCD 16Х01 и едно въпросче за MPLAB 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Дек 08, 2008 11:37 pm
Мнения: 59
Мнение Проблем с LCD 16Х01 и едно въпросче за MPLAB
Имам едно LCD, 16 символа едноредово но като се опитах да си напиша програмата за един ПИК16Ф628А изскочи един странен проблем ..... когато започна да пиша по дисплея ОК първите 8 символа са добре след 8-мия нищо, като го конфигурирам като двуредов първите 8 символа си ги пише после трябва да мина на 2 ред и да напиша другите 8 О_о
Компилатора е CCS

main.c
Код:
#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection

#use delay(clock=4000000)

#include "C:\mcu_projects\628_lcd\user_lcd.c"

#use rs232(baud=9600,parity=N,xmit=PIN_B7,rcv=PIN_B6,bits=8)

void main()
{
   char temp;
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   LCD_Init();
   // delay_ms(500);
   printf(LCD_PutChar,"TEST TEST TEST");
   do{
      temp=getc();
      putc(temp);
      if(temp=='D'){
      LCD_PutCmd ( 0x01 );    // clear display
      LCD_PutCmd ( 0x80 );
      goto end;
       }
   
     if(temp=='1'){
        LCD_PutCmd ( 0x80 );
        goto end;
      }
      if(temp=='2'){
        LCD_PutCmd ( 0xC0 );
        goto end;
      }
   
     LCD_PutChar(temp);
     end:
   }while(1);
}


user_lcd.c
Код:
#define LCD_D4          PIN_A3
#define LCD_D5          PIN_A2
#define LCD_D6          PIN_A1
#define LCD_D7          PIN_A0

#define LCD_EN          PIN_B1
#define LCD_RS          PIN_B3

#define LINE_1          0x00
#define LINE_2          0x40
#define CLEAR_DISP      0x01

#separate void LCD_Init ( void );
#separate void LCD_SetPosition ( unsigned int cX );
#separate void LCD_PutChar ( unsigned int cX );
#separate void LCD_PutCmd ( unsigned int cX );
#separate void LCD_PulseEnable ( void );
#separate void LCD_SetData ( unsigned int cX );

#use standard_io ( A )
#use standard_io ( B )



#separate void LCD_Init ( void )
    {
    LCD_SetData ( 0x00 );
    delay_ms ( 200 );       
    output_low ( LCD_RS );
    LCD_SetData ( 0x03 );   
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_SetData ( 0x02 ); 
    LCD_PulseEnable();     
    LCD_PutCmd ( 0x2C );   
    LCD_PutCmd ( 0x0C ); 
    LCD_PutCmd ( 0x01 ); 
    LCD_PutCmd ( 0x06 ); 
    }

#separate void LCD_SetPosition ( unsigned int cX )
    {
    LCD_SetData ( swap ( cX ) | 0x08 );
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );
    LCD_PulseEnable();
    }

#separate void LCD_PutChar ( unsigned int cX )
    {
        output_high ( LCD_RS );
        LCD_SetData ( swap ( cX ) );
        LCD_PulseEnable();
        LCD_SetData ( swap ( cX ) );     
        LCD_PulseEnable();
        output_low ( LCD_RS );
    }

#separate void LCD_PutCmd ( unsigned int cX )
    {
    LCD_SetData ( swap ( cX ) );   
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );     
    LCD_PulseEnable();
    }

#separate void LCD_PulseEnable ( void )
    {
    output_high ( LCD_EN );
    delay_us ( 3 );       
    output_low ( LCD_EN );
    delay_ms ( 3 );
    }

#separate void LCD_SetData ( unsigned int cX )
    {
    output_bit ( LCD_D4, cX & 0x01 );
    output_bit ( LCD_D5, cX & 0x02 );
    output_bit ( LCD_D6, cX & 0x04 );
    output_bit ( LCD_D7, cX & 0x08 );
    }


Кода за управление на LCD-то не е мой но беше направен за двуредов, а аз като се водих по това http://joshuagalloway.com/lcd.html го преправих за едноредов но уви :/

А има и втори въпрос. Поогледах се за литература по тази тема на българския пазар и единственото което немерих бе на издателство Млад конструктор.... Интересува ме специално за MPLAB,има ли нещо добро на пазара, понеже се помъчих с разни уроци от Интернет и т.н. но неможе да ми се получат нещата ...


Съб Авг 06, 2011 8:32 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Проблем с LCD 16Х01 и едно въпросче за MPLAB
Дисплея си е наред. Просто така са му разположени сегментите и ти не си човека дето да му каже как да си ги разполага.
Така впрочем са повечето 16х1 дисплеи. Научи английския и почвай да тиърсиш литература по интернет, не си губи времето да търсиш на български.

_________________
Warriors of the Night, ASSEMBLER!!!


Съб Авг 06, 2011 8:54 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение Re: Проблем с LCD 16Х01 и едно въпросче за MPLAB
В CCS си има драйвер за управление. В пака /drivers. Файла е LCD.C Разгледай го, в него си е показано как да го използваш.


Нед Авг 07, 2011 6:14 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение Re: Проблем с LCD 16Х01 и едно въпросче за MPLAB
Оригиналния LCD.C е малко сложно написан за начинаещи и трудно би могъл примерно да си преместиш пиновете на такива каквито иска човек ... аз ползвам flex_lcd.c напиши това в гугъл или си го намери във форумите на CCS-a .. файлчето е направено като за блондинки и си работи ;)

_________________
Код:
while(true);


Пон Авг 08, 2011 9:41 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 4 мнения ] 

Кой е на линия

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


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

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